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

#ifndef TEAMCENTER__BOM0BOMMANAGEMENT__BOM0ABSTRACTPART__HXX
#define TEAMCENTER__BOM0BOMMANAGEMENT__BOM0ABSTRACTPART__HXX

#include <metaframework/BulkInput.hxx>
#include <metaframework/BulkData.hxx>
#include <common/tc_deprecation_macros.h>
#include <Bom0bommanagement/Bom0ConfigurableBomElement.hxx>

#include <Bom0bommanagement/libbom0bommanagement_exports.h>

namespace Teamcenter
{
    namespace Bom0bommanagement
    {
        class Bom0AbstractPart;
    }
}
namespace Teamcenter
{
    namespace Bom0bommanagement
    {
        class Bom0AbstractPartImpl;
    }
}
namespace Teamcenter
{
    namespace Bom0bommanagement
    {
        class Bom0AbstractPartDelegate;
    }
}
namespace Teamcenter
{
    namespace Bom0bommanagement
    {
        class Bom0AbstractPartDispatch;
    }
}
namespace Teamcenter
{
    namespace Bom0bommanagement
    {
        class Bom0AbstractPartGenImpl;
    }
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  BOM0BOMMANAGEMENT_API  Teamcenter::Bom0bommanagement::Bom0AbstractPart
     : public  ::Teamcenter::Bom0bommanagement::Bom0ConfigurableBomElement
{
public:

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


    ///
    /// The operation aligns part (Bom0AbstractPart) and design revision(s) (ItemRevision). For each part, primary design given as input will be marked as primary design. If none of the aligned design(s) exists as primary design and no primary design is given as input, first design getting aligned will be marked as primary design.
    /// @version Teamcenter 11.2.3
    /// @param input - A vector of data that contains part, corresponding design revision(s) and design revision to mark as primary design. It should be of type Bom0PartDesignAlgnmtInput.
    /// @param bulkData - A data structure to store objects and other information relevant for set based operation.
    /// @return - This operation returns ITK_ok on success and error code on failure.
    ///
    static int  bom0AlignDesigns( std::vector<  ::Teamcenter::BulkInput* > *input, ::Teamcenter::BulkData *bulkData );

    ///
    /// The operation marks design revision (ItemRevision) as primary design on a part (Bom0AbstractPart). This will remove existing primary design (if any).
    /// @version Teamcenter 11.2.3
    /// @param input - A vector of data that contains part and corresponding design to be marked as primary design. It should be of type Bom0MarkPrimaryDesignInput.
    /// @param bulkData - A data structure to store objects and other information relevant for set based operation.
    /// @return - This operation returns ITK_ok on success and error code on failure.
    ///
    static int  bom0MarkPrimaryDesign( std::vector<  ::Teamcenter::BulkInput* > *input, ::Teamcenter::BulkData *bulkData );

    ///
    /// The operation un-aligns part (Bom0AbstractPart) and design revision(s) (ItemRevision). If the primary design is being un-aligned, primary relationship will also be removed.
    /// @version Teamcenter 11.2.3
    /// @param input - A vector of data that contains part and corresponding design revision(s) for unalignment. It should be of type Bom0PartDesignUnAlgnmtInput.
    /// @param bulkData - A data structure to store objects and other information relevant for set based operation.
    /// @return - This operation returns ITK_ok on success and error code on failure.
    ///
    static int  bom0UnAlignDesigns( std::vector<  ::Teamcenter::BulkInput* > *input, ::Teamcenter::BulkData *bulkData );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    Bom0AbstractPart();

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

private:
    //  Getter method for the Implementation Object
    Bom0AbstractPartImpl*  getBom0AbstractPartImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setBom0AbstractPartImpl( ::Teamcenter::RootObjectImpl*  impl );

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

    // Pointer to the Implementation object
    Bom0AbstractPartImpl*  m_bom0abstractpartImpl;

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

    friend class  Bom0AbstractPartDelegate;
    friend class  Bom0AbstractPartDispatch;
    friend class  Bom0AbstractPartGenImpl;
};

#include <Bom0bommanagement/libbom0bommanagement_undef.h>
#endif //   TEAMCENTER__BOM0BOMMANAGEMENT__BOM0ABSTRACTPART__HXX
