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

#ifndef TEAMCENTER__REALIZATION__RLZ0M2MSUBSETINSTANTIATION__HXX
#define TEAMCENTER__REALIZATION__RLZ0M2MSUBSETINSTANTIATION__HXX

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

#include <rlz0realization/librlz0realization_exports.h>

namespace Teamcenter
{
    namespace Realization
    {
        class Rlz0M2MSubsetInstantiation;
    }
}
namespace Teamcenter
{
    namespace Realization
    {
        class Rlz0M2MSubsetInstantiationImpl;
    }
}
namespace Teamcenter
{
    namespace Realization
    {
        class Rlz0M2MSubsetInstantiationDelegate;
    }
}
namespace Teamcenter
{
    namespace Realization
    {
        class Rlz0M2MSubsetInstantiationDispatch;
    }
}
namespace Teamcenter
{
    namespace Realization
    {
        class Rlz0M2MSubsetInstantiationGenImpl;
    }
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  RLZ0REALIZATION_API  Teamcenter::Realization::Rlz0M2MSubsetInstantiation
     : public  ::Teamcenter::Realization::Rlz0ModelRealization
{
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  getRlz0ReuseElement( tag_t &value, bool &isNull ) const;

    ///
    /// 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  getRlz0SearchCriteria( tag_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  setRlz0ReuseElement( const tag_t &value, bool isNull=false );

    ///
    /// 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  setRlz0SearchCriteria( const tag_t &value, bool isNull=false );

    ///
    /// This operation is to perform action comparisions on custom Instantiated or updated data. This operation also allows to attach an extension as pre and post action where users can write their own ITK implementation.
    /// @version Teamcenter 11.1
    /// @param sourceObjectsList - List of objects from source model.
    /// @param targetObjectsList - List of objects from target model.
    /// @return - Error code will be thrown if the operation is not completed successfully, on success will return zero.
    ///
    int  rlz0M2MInstantiationExtnOperation( const std::vector< tag_t > *sourceObjectsList, std::vector< tag_t > *targetObjectsList );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    Rlz0M2MSubsetInstantiation();

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

private:
    //  Getter method for the Implementation Object
    Rlz0M2MSubsetInstantiationImpl*  getRlz0M2MSubsetInstantiationImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setRlz0M2MSubsetInstantiationImpl( ::Teamcenter::RootObjectImpl*  impl );

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

    // Pointer to the Implementation object
    Rlz0M2MSubsetInstantiationImpl*  m_rlz0m2msubsetinstantiationImpl;

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

    friend class  Rlz0M2MSubsetInstantiationDelegate;
    friend class  Rlz0M2MSubsetInstantiationDispatch;
    friend class  Rlz0M2MSubsetInstantiationGenImpl;
};

#include <rlz0realization/librlz0realization_undef.h>
#endif //   TEAMCENTER__REALIZATION__RLZ0M2MSUBSETINSTANTIATION__HXX
