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

#ifndef VAL1CFGVALIDATION__VAL1CFGVALDATAREVISION__HXX
#define VAL1CFGVALIDATION__VAL1CFGVALDATAREVISION__HXX

#include <unidefs.h>
#include <map>
#include <vector>
#include <metaframework/CreateInput.hxx>
#include <common/tc_deprecation_macros.h>
#include <validation/ValDataRevision.hxx>

#include <Val1cfgvalidation/libval1cfgvalidation_exports.h>

namespace val1cfgvalidation
{
    class Val1CfgValDataRevision;
}
namespace val1cfgvalidation
{
    class Val1CfgValDataRevisionImpl;
}
namespace val1cfgvalidation
{
    class Val1CfgValDataRevisionDelegate;
}
namespace val1cfgvalidation
{
    class Val1CfgValDataRevisionDispatch;
}
namespace val1cfgvalidation
{
    class Val1CfgValDataRevisionGenImpl;
}
namespace Teamcenter
{
    class RootObjectImpl;
}

class  VAL1CFGVALIDATION_API  val1cfgvalidation::Val1CfgValDataRevision
     : public  ::Teamcenter::ValDataRevision
{
public:

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


    ///
    /// This operation will return the associated validation results data (not the result objects) after performing the required validation function of this checker on the given target business objects. This operation must be overridden by a validation agent that extends from this class, the specialized implementation of this operation needs to perform the validation using this checker and the given objects to return resultData. If the checker business logic chooses to also update the result(s) and /or create new validation results, then an empty resultData shuld be returned.
    /// @version Teamcenter 12.1
    /// @param agentRevTag - The tag for agent revision.
    /// @param owningObjectToTargetObjectsVec - The map for owning object to its validation target objects vector.
    /// @param resultData - The returned 'resultData' is a vector of structure for result properties name/value pairs. The result property structures may represent a new validation result that is to be created, or an existing validation result that will be updated.
    /// @return - Status. 0 if successful
    ///
    int  val1PerformValidation( tag_t &agentRevTag, const std::map< tag_t,std::vector< tag_t > > &owningObjectToTargetObjectsVec, std::vector<  ::Teamcenter::CreateInput* > &resultData );
protected:
    //  Method to initialize
    virtual void initialize( ::Teamcenter::RootObjectImpl*  impl );

    /**
     * Constructor
     */
    Val1CfgValDataRevision();

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

private:
    //  Getter method for the Implementation Object
    Val1CfgValDataRevisionImpl*  getVal1CfgValDataRevisionImpl() const;
    //  Setter method for the Implementation Object
    ::Teamcenter::RootObjectImpl*  setVal1CfgValDataRevisionImpl( ::Teamcenter::RootObjectImpl*  impl );

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

    // Pointer to the Implementation object
    Val1CfgValDataRevisionImpl*  m_val1cfgvaldatarevisionImpl;

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

    friend class  Val1CfgValDataRevisionDelegate;
    friend class  Val1CfgValDataRevisionDispatch;
    friend class  Val1CfgValDataRevisionGenImpl;
};

#include <Val1cfgvalidation/libval1cfgvalidation_undef.h>
#endif //   VAL1CFGVALIDATION__VAL1CFGVALDATAREVISION__HXX
