//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, Cpd0DesignItemInstance
    Filename:   Cpd0DesignItemInstance.hxx
    Module:     cpd0cd
    @BMIDE autogenerated
==================================================================================================*/

#ifndef TEAMCENTER__CPD__CPD0DESIGNITEMINSTANCE__HXX
#define TEAMCENTER__CPD__CPD0DESIGNITEMINSTANCE__HXX

#include <vector>
#include <unidefs.h>
#include <common/tc_deprecation_macros.h>
#include <rlz0realization/Rlz0ItemRealization.hxx>

#include <cpd0cd/libcpd0cd_exports.h>

namespace Teamcenter
{
    namespace Cpd
    {
        class Cpd0DesignItemInstance;
    }
}
namespace Teamcenter
{
    namespace Cpd
    {
        class Cpd0DesignItemInstanceImpl;
    }
}
namespace Teamcenter
{
    namespace Cpd
    {
        class Cpd0DesignItemInstanceDelegate;
    }
}
namespace Teamcenter
{
    namespace Cpd
    {
        class Cpd0DesignItemInstanceDispatch;
    }
}
namespace Teamcenter
{
    namespace Cpd
    {
        class Cpd0DesignItemInstanceGenImpl;
    }
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  CPD0CD_API  Teamcenter::Cpd::Cpd0DesignItemInstance
     : public  ::Teamcenter::Realization::Rlz0ItemRealization
{
public:

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


    ///
    /// Getter for a Tag Property
    /// @version Teamcenter 11.1
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getCpd0reuse_element( tag_t &value, bool &isNull ) const;

    ///
    /// Getter for a Date Property
    /// @version Teamcenter 9
    /// @param value - Parameter value
    /// @param isNull - Returns true if the Parameter value is null
    /// @return - Status. 0 if successful
    ///
    int  getCpd0structure_lmd( date_t &value, bool &isNull ) const;

    ///
    /// Setter for a Tag Property
    /// @version Teamcenter 11.1
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setCpd0reuse_element( const tag_t &value, bool isNull=false );

    ///
    /// Setter for a Date Property
    /// @version Teamcenter 9
    /// @param value - Value to be set for the parameter
    /// @param isNull - If true, set the parameter value to null
    /// @return - Status. 0 if successful
    ///
    int  setCpd0structure_lmd( const date_t &value, bool isNull=false );

    ///
    /// This is generic operation to process BOMLines, retrieve any custom data attached to BOMLines like forms,occ notes and set it on to Attribute Groups which are attached to corresponding Design Components. This operation also allows to attach an extension as post action where users can write their own ITK implementation to map attributes.
    /// @version Teamcenter 9
    /// @param bomLines - A vector of BOMLines
    /// @param designElements - A vector of Designelements
    /// @return - Updated Design Components.
    ///
    int  cpd0ItemRealization( const std::vector< tag_t > *bomLines, std::vector< tag_t > *designElements );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    Cpd0DesignItemInstance();

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

private:
    //  Getter method for the Implementation Object
    Cpd0DesignItemInstanceImpl*  getCpd0DesignItemInstanceImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setCpd0DesignItemInstanceImpl( ::Teamcenter::RootObjectImpl*  impl );

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

    // Pointer to the Implementation object
    Cpd0DesignItemInstanceImpl*  m_cpd0designiteminstanceImpl;

    //  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 Cpd0DesignItemInstance - desc for Cpd0DesignItemInstance parameter
     */
    Cpd0DesignItemInstance( const Cpd0DesignItemInstance& );
    Cpd0DesignItemInstance& operator=( const Cpd0DesignItemInstance& );

    friend class  Cpd0DesignItemInstanceDelegate;
    friend class  Cpd0DesignItemInstanceDispatch;
    friend class  Cpd0DesignItemInstanceGenImpl;
};

#include <cpd0cd/libcpd0cd_undef.h>
#endif //   TEAMCENTER__CPD__CPD0DESIGNITEMINSTANCE__HXX
