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

#ifndef MDO__MDO0MDOCONDITIONDELEGATE_HXX
#define MDO__MDO0MDOCONDITIONDELEGATE_HXX

#include <common/tc_deprecation_macros.h>
#include <Mdo0Mdo/Mdo0MDOCondition.hxx>

#include <Mdo0Mdo/libmdo0mdo_exports.h>

namespace mdo
{
    class Mdo0MDOConditionDelegate;
}
namespace mdo
{
    class Mdo0MDOConditionImpl;
}
namespace mdo
{
    class Mdo0MDOCondition;
}
namespace mdo
{
    class Mdo0MDOConditionGenImpl;
}

namespace mdo_alias = ::mdo;


class  MDO0MDO_API mdo_alias::Mdo0MDOConditionDelegate
{
public:
    //  Method to initialize this Class
    static int initializeClass();

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

    //  Method to create the Mdo0MDOConditionImpl pointer
    static Mdo0MDOConditionImpl*  createImpl( Mdo0MDOCondition&  ifObj );

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


    ///
    /// This operation is invoked when attribute group is attached to a Model Element. It returns true, if the model element to which the attribute group is attached is part of instance linkage.
    /// @version Teamcenter 11.1
    /// @param modelElem - The Model Element to which the attribute group is to be attached
    /// @param result - Returns true, if the model element to which the attribute group is attached is part of instance linkage.
    /// @return - 
    ///
    int  mdo0EvaluateAttrGrpAttachBase(const Mdo0MDOCondition &ifObj,  tag_t modelElem, bool *result );


    ///
    /// This operation is invoked when attribute group is detached from a Model Element. It returns true, if the model element from which the attribute group is detached is part of instance linkage.
    /// @version Teamcenter 11.1
    /// @param modelElem - The Model Element from which the attribute group is to be detached.
    /// @param result - Returns true, if the model element from which the attribute group is detached is part of instance linkage.
    /// @return - 
    ///
    int  mdo0EvaluateAttrGrpDetachBase(const Mdo0MDOCondition &ifObj,  tag_t modelElem, bool *result );


    ///
    /// This operation is invoked when a BOM View Revision is released.
    /// @version Teamcenter 11.1
    /// @param bvrObj - The BOM View Revision which is released.
    /// @param result - Returns true if the BOM View Revision is released.
    /// @return - 
    ///
    int  mdo0EvaluateBVRReleaseBase(const Mdo0MDOCondition &ifObj,  tag_t bvrObj, bool *result );


    ///
    /// This operation is invoked when a Model Element is created in an Application model. It returns true when the underlying source object of Model element is part of MDThread association or the type of the Model Element is specified in the preference - MdoNotification_TypesSupportedForCreate.
    /// @version Teamcenter 11.1
    /// @param targetObj - The model element object which is created
    /// @param result - Returns true when the underlying source object of Model element is part of MDThread association or the type of the Model Element is specified in the preference - MdoNotification_TypesSupportedForCreate.
    /// @return - 
    ///
    int  mdo0EvaluateCreateBase(const Mdo0MDOCondition &ifObj,  tag_t targetObj, bool *result );


    ///
    /// This operation is invoked when a Realization Container is created. It returns true only when the realization container is created from a subset definition created from a baseline revision and that baseline revision object is part of MDThread association.
    /// @version Teamcenter 11.1
    /// @param targetObj - The realization container object which is created
    /// @param result - Returns true only when the realization container is created from a subset definition created from a baseline revision and that baseline revision object is part of MDThread association.
    /// @return - 
    ///
    int  mdo0EvaluateCreateRlzContainerBase(const Mdo0MDOCondition &ifObj,  tag_t targetObj, bool *result );


    ///
    /// This operation is invoked when a Realizaiton Container is deleted. It returns true if the the deleted Realization Container is part of MDInstnace linkage. 
    /// @version Teamcenter 11.1
    /// @param rlzContainer - The Realization Container  object which is deleted
    /// @param eventObj - The Event Object
    /// @param actionObj - The Action Object
    /// @param result - Returns true if the the deleted Realization Container is part of MDInstnace linkage.
    /// @return - 
    ///
    int  mdo0EvaluateDeleteRlzContainerBase(const Mdo0MDOCondition &ifObj,  tag_t rlzContainer, tag_t eventObj, tag_t actionObj, bool *result );


    ///
    /// This operation is invoked when a Model Element is modified. It returns true if the modified Model Element is part of instance linkage through MDInstance.
    /// @version Teamcenter 11.1
    /// @param designElem - The Design Component object which is modified.
    /// @param result - Returns true if the modified Model Element is part of instance linkage through MDInstance.
    /// @return - 
    ///
    int  mdo0EvaluateDEModifyBase(const Mdo0MDOCondition &ifObj,  tag_t designElem, bool *result );


    ///
    /// This operation is invoked when a Model Element is replaced. It returns true if the replaced Model Element is part of instance linkage through MDInstance. 
    /// @version Teamcenter 11.1
    /// @param modelElement - The Model Element  which is to be replaced.
    /// @param result - Returns true if the replaced Model Element is part of instance linkage through MDInstance.
    /// @return - 
    ///
    int  mdo0EvaluateMEReplaceBase(const Mdo0MDOCondition &ifObj,  tag_t modelElement, bool *result );


    ///
    /// This operation is invoked when a Model Element is revised. It returns true if the revised Model Element is part of instance linkage through MDInstance.
    /// @version Teamcenter 11.1
    /// @param modelElem - The Model Element which is revised.
    /// @param result - Returns true if the revised Model Element is part of instance linkage through MDInstance.
    /// @return - 
    ///
    int  mdo0EvaluateMEReviseBase(const Mdo0MDOCondition &ifObj,  tag_t modelElem, bool *result );


    ///
    /// This operation is invoked when a Occurrence is created. It returns true if the Item Revision used to create the Occurrence is part of MDThread association.
    /// @version Teamcenter 11.1
    /// @param occObj - The tag of Occurrence object which is created.
    /// @param result - Returns true if the Item Revision used to create the occurrence is part of MDThread association.
    /// @return - 
    ///
    int  mdo0EvaluateOccCreateBase(const Mdo0MDOCondition &ifObj,  tag_t occObj, bool *result );


    ///
    /// This operation is invoked when a Occurrence is modified. It returns true if the underlying Item Revision of the Occurrence modified is part of MDThread association.
    /// @version Teamcenter 11.1
    /// @param occObj - The Occurrence object which is modified
    /// @param result - Returns true if the underlying Item Revision of the Occurrence which is modified is part of MDThread association.
    /// @return - 
    ///
    int  mdo0EvaluateOccModifyBase(const Mdo0MDOCondition &ifObj,  tag_t occObj, bool *result );


    ///
    /// This Operation is invoked when an Occurrence is removed. It returns true if the underlying Item Revision of the Occurrence which is removed is part of MDThread association.
    /// @version Teamcenter 11.1
    /// @param occObj - The tag of Occurrence objet which is removed.
    /// @param result - Returns true if the underlying Item Revision of the Occurrence which is removed is part of MDThread association.
    /// @return - 
    ///
    int  mdo0EvaluateOccRemoveBase(const Mdo0MDOCondition &ifObj,  tag_t occObj, bool *result );


    ///
    /// This operation is invoked when a Occurrence is replaced. It returns true when the underlying Item Revision of the replacing Ocurrence is part of a MDThread association.
    /// @version Teamcenter 11.1
    /// @param occObjSource - The source Occurrence object which is to be replaced.
    /// @param result - Returns true if the underlying Item Revision of the Occurrence which is replaced is part of MDThread association.
    /// @return - 
    ///
    int  mdo0EvaluateOccReplaceBase(const Mdo0MDOCondition &ifObj,  tag_t occObjSource, bool *result );


    ///
    /// This operation is invoked when a Model Element is deleted. It returns true if the deleted Model Element is part of instance linkage through MDInstance.
    /// @version Teamcenter 11.1
    /// @param modelElem - The Model Element which is unrealized.
    /// @param eventObj - The Event Object
    /// @param actionObj - The action Object
    /// @param result - Returns true if the deleted Model Element is part of instance linkage through MDInstance.
    /// @return - 
    ///
    int  mdo0EvaluateUnrealizeBase(const Mdo0MDOCondition &ifObj,  tag_t modelElem, tag_t eventObj, tag_t actionObj, bool *result );



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

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


private:
    friend class  ::mdo::Mdo0MDOConditionGenImpl;

};

#include <Mdo0Mdo/libmdo0mdo_undef.h>
#endif  //  MDO__MDO0MDOCONDITIONDELEGATE_HXX
