/*==================================================================================================

                    Copyright (c) 2007 UGS
                             Unpublished - All rights reserved

====================================================================================================
File description:

    Filename: getTagArrayOperationDispatcher.hxx
    Module  : extensionframework

    This is the root interface class of the getTagArrayOperationDispatcher. It contains of all the generic methods
    for getTagArrayOperationDispatcher that can be reused by the derived classes.

====================================================================================================
   Date      Name                    Description of Change
$HISTORY$
==================================================================================================*/
#ifndef getTagArrayOperationDispatcher_HXX
#define getTagArrayOperationDispatcher_HXX

#include <extensionframework/PropOperationDispatcher.hxx>
#include <extensionframework/libextensionframework_exports.h>

namespace Teamcenter
{
    class getTagArrayOperationDispatcher;
    class PropOperationDispatcher;
}

class EXTENSIONFRAMEWORK_API Teamcenter::getTagArrayOperationDispatcher : public Teamcenter::PropOperationDispatcher
{
    public:
        getTagArrayOperationDispatcher();
        virtual ~getTagArrayOperationDispatcher();
        static OperationDispatcher *constructor();

        void executePreConditions( METHOD_message_t &  msg,  va_list  args ) const;
        void executePreActions( METHOD_message_t &  msg,  va_list  args ) const;
        void executePostActions( METHOD_message_t &  msg,  va_list  args ) const;

        void getTagArrayPreConditions( const Teamcenter::BusinessObject* obj, std::vector<tag_t>& tagValues, std::vector<int>& isNullValues ) const;
        void getTagArrayPreActions( const Teamcenter::BusinessObject* obj, std::vector<tag_t>& tagValues, std::vector<int>& isNullValues ) const;
        void getTagArrayBaseAction( const Teamcenter::BusinessObject* obj, std::vector<tag_t>& tagValues, std::vector<int>& isNullValues ) const;
        void getTagArrayPostActions( const Teamcenter::BusinessObject* obj, std::vector<tag_t>& tagValues, std::vector<int>& isNullValues ) const;

        // Project 011450 changes
        void getTagArrayPreConditions( METHOD_message_t*  msgData, int* num, tag_t** value, logical** isNull ) const;
        void getTagArrayPreActions( METHOD_message_t*  msgData, int* num, tag_t** value, logical** isNull ) const;
        void getTagArrayBaseAction( METHOD_message_t*  msgData, int* num, tag_t** value, logical** isNull ) const;
        void getTagArrayPostActions( METHOD_message_t*  msgData, int* num, tag_t** value, logical** isNull ) const;

        void getTagArray( const Teamcenter::BusinessObject* obj, std::vector<tag_t>& tagValues, std::vector<int>& isNullValues ) const;

        void execute( Teamcenter::BusinessObject* obj,  std::vector<void*>&  args ) const;
        void execute( tag_t objTag, va_list  args ) const;
        void execute( Teamcenter::BusinessObject* obj,  va_list  args  ) const;


        //Fix compiler warnings that were hiding virtual functions
        using Teamcenter::OperationDispatcher::executePreConditions;
        using Teamcenter::OperationDispatcher::executePreActions;
        using Teamcenter::OperationDispatcher::executePostActions;

};

#include <extensionframework/libextensionframework_undef.h>
#endif //getTagArrayOperationDispatcher_HXX
