//Copyright 2020 Siemens Digital Industries Software
//==================================================
//Copyright $2020.
//Siemens Product Lifecycle Management Software Inc.
//All Rights Reserved.
//==================================================
//Copyright 2020 Siemens Digital Industries Software

/*==================================================================================================
File description:
    This file contains the declaration for the Business Object, Identifier
    Filename:   Identifier.hxx
    Module:     tccore
    @BMIDE autogenerated
==================================================================================================*/

#ifndef TEAMCENTER__IDENTIFIER__HXX
#define TEAMCENTER__IDENTIFIER__HXX

#include <metaframework/ReviseInput.hxx>
#include <metaframework/DeepCopyData.hxx>
#include <metaframework/BulkInput.hxx>
#include <metaframework/BulkData.hxx>
#include <unidefs.h>
#include <common/tc_deprecation_macros.h>
#include <tccore/WorkspaceObject.hxx>

#include <tccore/libtccore_exports.h>

namespace Teamcenter
{
    class Identifier;
}
namespace Teamcenter
{
    class IdentifierImpl;
}
namespace Teamcenter
{
    class IdentifierDelegate;
}
namespace Teamcenter
{
    class IdentifierDispatch;
}
namespace Teamcenter
{
    class IdentifierGenImpl;
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  TCCORE_API  Teamcenter::Identifier
     : public  ::Teamcenter::WorkspaceObject
{
public:

    /**
     * Get the Interface Name
     * @return - return desc for getInterfaceName
     */
    static const std::string&  getInterfaceName();


    ///
    /// Finalize operation input.
    /// @version Teamcenter 10.1
    /// @param pReviseInput - desc
    /// @param vecDeepCopyData - desc
    /// @return - returns n int.
    ///
    int  finalizeReviseInput( ::Teamcenter::ReviseInput *pReviseInput, std::vector<  ::Teamcenter::DeepCopyData* > *vecDeepCopyData );

    ///
    /// This operation is not supported now, there will be no support for issues stemming from uses of this operation.
    /// @version Teamcenter 11.2.3
    /// @param inputs - A vector of data that contains reference information to the objects to be revised
    /// @param bd - A data structure to store objects and other information relevant for set-based operation
    /// @return - 
    ///
    static int  fnd0FinalizeReviseInput( std::vector<  ::Teamcenter::BulkInput* > *inputs, ::Teamcenter::BulkData *bd );

    ///
    /// This operation is not supported now, there will be no support for issues stemming from uses of this operation.
    /// @version Teamcenter 11.2.3
    /// @param inputs - A vector of data that contains reference information to the objects to be revised
    /// @param bd - A data structure to store objects and other information relevant for set-based operation
    /// @return - 
    ///
    static int  fnd0Revise( std::vector<  ::Teamcenter::BulkInput* > *inputs, ::Teamcenter::BulkData *bd );

    ///
    /// This operation is not supported now, there will be no support for issues stemming from uses of this operation.
    /// @version Teamcenter 11.2.3
    /// @param inputs - A vector of data that contains reference information to the objects to be revised
    /// @param bd - A data structure to store objects and other information relevant for set-based operation
    /// @return - 
    ///
    static int  fnd0RevisePost( std::vector<  ::Teamcenter::BulkInput* > *inputs, ::Teamcenter::BulkData *bd );

    ///
    /// operation for creating/setting values to shadow object during revise
    /// @version Teamcenter 11.1
    /// @param pReviseInput - Revise Input
    /// @param newShObjTag - new shadow object created during revise
    /// @return - returns status as int
    ///
    int  fnd0ReviseShadowObject( ::Teamcenter::ReviseInput *pReviseInput, tag_t *newShObjTag );

    ///
    /// This operation is not supported now, there will be no support for issues stemming from uses of this operation.
    /// @version Teamcenter 11.2.3
    /// @param inputs - A vector of data that contains reference information to the objects to be revised
    /// @param bd - A data structure to store objects and other information relevant for set-based operation
    /// @return - 
    ///
    static int  fnd0SetPropertiesFromReviseInput( std::vector<  ::Teamcenter::BulkInput* > *inputs, ::Teamcenter::BulkData *bd );

    ///
    /// This operation is not supported now, there will be no support for issues stemming from uses of this operation.
    /// @version Teamcenter 11.2.3
    /// @param inputs - A vector of data that contains reference information to the objects to be revised
    /// @param bd - A data structure to store objects and other information relevant for set-based operation
    /// @return - 
    ///
    static int  fnd0ValidateReviseInput( std::vector<  ::Teamcenter::BulkInput* > *inputs, ::Teamcenter::BulkData *bd );

    ///
    /// Revise operation.
    /// @version Teamcenter 10.1
    /// @param pReviseInput - Revise input.
    /// @param vecDeepCopyData - Vector of deep copy data.
    /// @param newObjTag - Tag of the revised object.
    /// @return - Returns an int.
    ///
    int  revise( ::Teamcenter::ReviseInput *pReviseInput, std::vector<  ::Teamcenter::DeepCopyData* > *vecDeepCopyData, tag_t *newObjTag );

    ///
    /// Generic revisePost operation.
    /// @version Teamcenter 10.1
    /// @param pReviseInput - Input ReviseInput object.
    /// @param vecDeepCopyData - Vector of deep copy data.
    /// @return - Returns an integer value.
    ///
    int  revisePost( ::Teamcenter::ReviseInput *pReviseInput, std::vector<  ::Teamcenter::DeepCopyData* > *vecDeepCopyData );

    ///
    /// Set properties from revise input.
    /// @version Teamcenter 10.1
    /// @param pReviseInput - desc
    /// @return - Returns an int.
    ///
    int  setPropertiesFromReviseInput( ::Teamcenter::ReviseInput *pReviseInput );

    ///
    /// Validate revise input.
    /// @version Teamcenter 10.1
    /// @param pReviseInput - desc
    /// @param vecDeepCopyData - desc
    /// @return - Returns an int.
    ///
    int  validateReviseInput( ::Teamcenter::ReviseInput *pReviseInput, std::vector<  ::Teamcenter::DeepCopyData* > *vecDeepCopyData );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    Identifier();

    /**
     * Destructor
     */
    virtual ~Identifier();

private:
    //  Getter method for the Implementation Object
    IdentifierImpl*  getIdentifierImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setIdentifierImpl( ::Teamcenter::RootObjectImpl*  impl );

    //  Method to set the delete impl boolean
    void setDeleteImpl( bool  del );

    // Pointer to the Implementation object
    IdentifierImpl*  m_identifierImpl;

    //  Flag to indicate if Implementation object needs to be deleted
    bool  m_deleteImpl;

    /**
     * Name of the Business Object
     */
    static std::string  name;

    /**
     * Private default constructor. We do not want this class instantiated without the business object passed in.
     * @param Identifier - desc for Identifier parameter
     */
    Identifier( const Identifier& );
    Identifier& operator=( const Identifier& );

    friend class  IdentifierDelegate;
    friend class  IdentifierDispatch;
    friend class  IdentifierGenImpl;
};

#include <tccore/libtccore_undef.h>
#endif //   TEAMCENTER__IDENTIFIER__HXX
