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

#ifndef TEAMCENTER__CPD__CPD0DESIGNITEMINSTANCEDELEGATE_HXX
#define TEAMCENTER__CPD__CPD0DESIGNITEMINSTANCEDELEGATE_HXX

#include <common/tc_deprecation_macros.h>
#include <cpd0cd/Cpd0DesignItemInstance.hxx>

#include <cpd0cd/libcpd0cd_exports.h>

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

namespace Teamcenter_alias = ::Teamcenter;


class  CPD0CD_API Teamcenter_alias::Cpd::Cpd0DesignItemInstanceDelegate
{
public:
    //  Method to initialize this Class
    static int initializeClass();

    //  Method to get the Cpd0DesignItemInstanceDelegate instance
    static Cpd0DesignItemInstanceDelegate&  getInstance();

    //  Method to create the Cpd0DesignItemInstanceImpl pointer
    static Cpd0DesignItemInstanceImpl*  createImpl( Cpd0DesignItemInstance&  ifObj );

    //  Method to delete the Cpd0DesignItemInstanceImpl pointer
    static void deleteImpl( Cpd0DesignItemInstanceImpl*  impl );


    ///
    /// 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_elementBase(const Cpd0DesignItemInstance &ifObj,  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_lmdBase(const Cpd0DesignItemInstance &ifObj,  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_elementBase(Cpd0DesignItemInstance &ifObj,  const tag_t &value, bool isNull );


    ///
    /// 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_lmdBase(Cpd0DesignItemInstance &ifObj,  const date_t &value, bool isNull );


    ///
    /// 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  cpd0ItemRealizationBase(const Cpd0DesignItemInstance &ifObj,  const std::vector< tag_t > *bomLines, std::vector< tag_t > *designElements );


    ///
    /// This operation is not supported now, there will be no support for issues stemming from uses of this operation.
    /// @version Teamcenter 11.2.2
    /// @param inputs - A vector of data that contains reference information to the object to be saved
    /// @param bd - A data structure to store objects and other information relevant for set-based operation
    /// @return - This operation returns ITK_ok on success. Otherwise, it will return specific error code.
    ///
    int  fnd0SaveBase( std::vector<  ::Teamcenter::BulkInput* > *inputs, ::Teamcenter::BulkData *bd );



protected:
    //  Pointer to the instance
    static Cpd0DesignItemInstanceDelegate*  m_pInstance;

    Cpd0DesignItemInstanceDelegate();
    virtual ~Cpd0DesignItemInstanceDelegate();
    static void setInstance( Cpd0DesignItemInstanceDelegate*  instance );


private:
    friend class  ::Teamcenter::Cpd::Cpd0DesignItemInstanceGenImpl;

};

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