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

#ifndef TEAMCENTER__CONDVALAGENTREVISIONDELEGATE_HXX
#define TEAMCENTER__CONDVALAGENTREVISIONDELEGATE_HXX

#include <common/tc_deprecation_macros.h>
#include <condvalidation/CondValAgentRevision.hxx>

#include <condvalidation/libcondvalidation_exports.h>

namespace Teamcenter
{
    class CondValAgentRevisionDelegate;
}
namespace Teamcenter
{
    class CondValAgentRevisionImpl;
}
namespace Teamcenter
{
    class CondValAgentRevision;
}
namespace Teamcenter
{
    class CondValAgentRevisionGenImpl;
}

namespace Teamcenter_alias = ::Teamcenter;


class  CONDVALIDATION_API Teamcenter_alias::CondValAgentRevisionDelegate
{
public:
    //  Method to initialize this Class
    static int initializeClass();

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

    //  Method to create the CondValAgentRevisionImpl pointer
    static CondValAgentRevisionImpl*  createImpl( CondValAgentRevision&  ifObj );

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


    ///
    /// This ioperation will retun a vector of ValidationResult object tags via an ouput paramter.
    /// @version Teamcenter 8.2
    /// @param valDataRevisions - A vector of ValDataRevision objects that will be used to limit the scope of the ValidationResult  objects.
    /// @param selectedObjects - A vector of selected objects that the system will use to find the actual target objects. The resulting target objects will be used to find the associated ValidationResult objects.
    /// @param targetObjects - A vector objects that will be used to find the associated ValidationResult objects.
    /// @param validationResultObjects - A vector of ValidationResult tags that are found from the given inut criteria.
    /// @return - The status code. ITK_ok indicates that this operation is successfully executed.
    ///
    int  getValidationResultsBase(const CondValAgentRevision &ifObj,  const std::vector< tag_t > &valDataRevisions, const std::vector< tag_t > &selectedObjects, const std::vector< tag_t > &targetObjects, std::vector< tag_t > &validationResultObjects );


    ///
    /// This operation will perform the validation tasks. Each validation agent revision must implement this method to process the validation tasks.
    /// @version Teamcenter 8.2
    /// @param valDataRevisionObjects - A vector of ValDataRevision objects that will be used to validate against the validation targets
    /// @param selectedObjects - A vector of selected objects that this validation agent will use to find the actual validation targets for this validation run.
    /// @param targetObjects - A vector of validation targets for this validation run.
    /// @return - The status code returned from the run. TIK_ok indicates that the validation run is executed successfully.
    ///
    int  runValidationBase(const CondValAgentRevision &ifObj,  const std::vector< tag_t > &valDataRevisionObjects, const std::vector< tag_t > &selectedObjects, const std::vector< tag_t > &targetObjects );



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

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


private:
    friend class  ::Teamcenter::CondValAgentRevisionGenImpl;

};

#include <condvalidation/libcondvalidation_undef.h>
#endif  //  TEAMCENTER__CONDVALAGENTREVISIONDELEGATE_HXX
