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

#ifndef TEAMCENTER__BULKDATA__HXX
#define TEAMCENTER__BULKDATA__HXX

#include <vector>
#include <unidefs.h>
#include <common/tc_deprecation_macros.h>
#include <metaframework/OperationInput.hxx>

#include <metaframework/libmetaframework_exports.h>

namespace Teamcenter
{
    class ManageBulkData;
}
namespace Teamcenter
{
    class BulkData;
}
namespace Teamcenter
{
    class BulkDataImpl;
}
namespace Teamcenter
{
    class BulkDataDelegate;
}
namespace Teamcenter
{
    class BulkDataDispatch;
}
namespace Teamcenter
{
    class BulkDataGenImpl;
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  METAFRAMEWORK_API  Teamcenter::BulkData
     : public  ::Teamcenter::OperationInput
{
public:

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


    ///
    /// This operation bulk up objects to delete them in bulk. It should be used only in pre action and base action implementation of the set-based operations. Bulk operation framework will delete the bulked up objects after base action completion. It should not be used in the post action implementation of set based operations. To delete objects in the post action, delete operation needs to be invoked explicitly.
    /// @version Teamcenter 11.2.2
    /// @param deleteObjects - Bulk up objects for delete in set-based operations pre action and base action implementation.
    /// @return - ITK_ok always.
    ///
    int  fnd0AddDeleteObjects( std::vector< tag_t > *deleteObjects );

    ///
    /// This operation bulk up objects to save them in bulk. It should be used only in pre action and base action implementation of the set-based operations. Bulk operation framework will save the bulked up objects after base action completion. It should not be used in the post action implementation of set based operations. To save objects in the post action, fnd0Save operation needs to be invoked explicitly.
    /// @version Teamcenter 11.2.2
    /// @param saveObjects - Bulk up objects for save in set-based operations pre action and base action implementation.
    /// @return - ITK_ok always.
    ///
    int  fnd0AddSaveObjects( std::vector< tag_t > *saveObjects );

    ///
    /// This operation bulk up objects to unlock them in bulk. It should be used only in pre action and base action implementation of the set-based operations. Bulk operation framework will unlock the bulked up objects after base action completion. It should not be used in the post action implementation of set based operations. To unlock objects in the post action, fnd0Unlock operation needs to be invoked explicitly.
    /// @version Teamcenter 11.2.2
    /// @param unlockObjects - Bulk up objects for unlock in set-based operations pre action and base action implementation.
    /// @return - ITK_ok always.
    ///
    int  fnd0AddUnlockObjects( std::vector< tag_t > *unlockObjects );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    BulkData();

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

private:
    //  Getter method for the Implementation Object
    BulkDataImpl*  getBulkDataImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setBulkDataImpl( ::Teamcenter::RootObjectImpl*  impl );

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

    // Pointer to the Implementation object
    BulkDataImpl*  m_bulkdataImpl;

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

    friend class  BulkDataDelegate;
    friend class  BulkDataDispatch;
    friend class  BulkDataGenImpl;
    friend class  BulkDataImpl;
    friend class  ManageBulkData;
};

#include <metaframework/libmetaframework_undef.h>
#endif //   TEAMCENTER__BULKDATA__HXX
