Teamcenter C++ API Reference  2312
OperationDispatcher.hxx
Go to the documentation of this file.
1 /*==================================================================================================
2 
3  Copyright (c) 2007 UGS
4  Unpublished - All rights reserved
5 ====================================================================================================
6 File description:
7 
8  Filename: OperationDispatcher.hxx
9  Module : extensionframework
10 
11  This class is used by auto-generated Dispatch mechanism (<BO>Dispatch::operation).
12  <br/>To facilitate the compile/build of the auto generated Dispatch classes, this class is made public.
13  @important The class and its members are not intended to be used explicitly for any other purposes.
14 
15  This class dispatches the function calls for a particular BO operation.
16 
17 ====================================================================================================
18  Date Name Description of Change
19 30-Oct-2008 Krzysztof Blaszczyk Following members made const: askBMOperationtag(), baseFunctionExists(), isPropagateInheritedDone()
20 31-Oct-2008 Krzysztof Blaszczyk Following members made const: getSizeOfPreConditions(), getSizeOfPreActions(), getSizeOfPostActions()
21 $HISTORY$
22 ==================================================================================================*/
23 #ifndef OPERATIONDISPATCHER_HXX
24 #define OPERATIONDISPATCHER_HXX
25 
26 #include <unidefs.h>
27 #include <vector>
28 #include <tccore/method.h>
29 #include <itk/bmf.h> //for adding reference of ExtensionPointType_t
31 #include <metaframework/Object.hxx>
33 #include <extensionframework/libextensionframework_exports.h>
34 
35 namespace Teamcenter
36 {
37  class OperationDispatcher;
38  class FunctionInvoker;
39  class OpToOpExtensionInvoker;
40  class BusinessObject;
41  class ExtensionSet;
42  class ExtensionFunctionSet;
43  class ImanTypeCache;
44  struct extn_fn;
45 }
46 
53 {
59 
60 
67 {
74 
75 
80 {
84 
85 
90 {
94 
95 struct EXTENSIONFRAMEWORK_API Teamcenter::extn_fn
96 {
97  METHOD_function_t fn_ptr;
98  TC_argument_list_t *user_args;
99 
109  extn_fn();
110 };
111 
112 class EXTENSIONFRAMEWORK_API Teamcenter::OperationDispatcher : public Teamcenter::Object
113 {
114 public:
116  virtual ~OperationDispatcher();
117 
121  void addPreCondition( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, bool functionInvokerRequired = true );
122  void addPreConditionAt( int pos, METHOD_function_t fnPtr, TC_argument_list_t* userArgs );
123 
127  void addPreAction( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, bool functionInvokerRequired = true );
128  void addPreActionAt( int pos, METHOD_function_t fnPtr, TC_argument_list_t *userArgs );
129 
133  void addPostAction( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, bool functionInvokerRequired = true,
134  bool auto_dispatched = true );
135  void addPostActionAt( int pos, METHOD_function_t fnPtr, TC_argument_list_t *userArgs );
136 
140  void addPostActionInternal( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, bool functionInvokerRequired = true,
141  bool auto_dispatched = true );
142  void setBaseAction( METHOD_function_t baseActionFnPtr, TC_argument_list_t* baseActionUserArgs );
145  void setBaseActionFunctionInvokerRequired( bool functionInvokerRequired );
146 
147 
151  void dumpFunction();
155  extn_fn getBaseAction() const;
156 
158  void propagatedInheritedDone( bool done ){ m_populateInheritedDone = done; }
159 
165 
166  bool baseFunctionExists() const;
167 
168  void propagateInherited( OperationDispatcher* parentOpDispatcher );
169 
173  void setBMOperationtag( tag_t bmoptag );
174  void askBMOperationtag( tag_t* bmoptag ) const;
175  const char* askBMOperationName() const;
176 
180  void setFunctionInvoker( Teamcenter::FunctionInvoker* functionInvokerObj );
181 
185  void setMetaOperation( bool isMetaOperation );
186  bool isOperation() const { return m_isOperation; }
187  int removePreConditionAt( int position );
188  int removePreActionAt( int position );
189  int removePostActionAt( int position );
190  int movePreCondition( int oldPosition, int newPosition );
191  int movePreAction( int oldPosition, int newPosition );
192  int movePostAction( int oldPosition, int newPosition );
193  int reattachExtensions( ImanTypeCache* imanType );
194  int reattachPostActionExtensions ( OperationDispatcher* tarOpDispatcher );
195 
196  static int reattachCreateToSavePostAction( ImanTypeCache* imanType,
197  OperationDispatcher* srcOpDispatcher,
198  const std::string& tarMsgName );
199  void getSizeOfPreConditions( int* size ) const;
200  void getSizeOfPreActions( int* size ) const;
201  void getSizeOfPostActions( int* size ) const;
202  void setBOName( const std::string& boName );
203  std::string getBOName()const { return m_boName; }
204  void setOpIdInt( const int opIdInt );
205  int getOpIdInt()const { return m_opIdInt; }
206  typedef logical (* METHOD_user_arg_compare_t) (TC_argument_list_t * firstArg,
207  TC_argument_list_t * secondArg);
208  int getPreConditionUserArgPosition( TC_argument_list_t* user_arg_to_compare, METHOD_user_arg_compare_t compareFunc, int* positionFound );
209  int getPreActionUserArgPosition( TC_argument_list_t* user_arg_to_compare, METHOD_user_arg_compare_t compareFunc, int* positionFound );
210  int getPostActionUserArgPosition( TC_argument_list_t* user_arg_to_compare, METHOD_user_arg_compare_t compareFunc, int* positionFound );
211 
215  virtual void executePreConditions( METHOD_message_t& msg, va_list args ) const;
216  virtual void executePreActions( METHOD_message_t& msg, va_list args ) const;
217  virtual void executePostActions( METHOD_message_t& msg, va_list args ) const;
218 
222  virtual void executeBaseAction( METHOD_message_t & msg, va_list args, bool userExitBase = false ) const;
223 
224  virtual void executePreConditions( tag_t object_tag, va_list args ) const;
225  virtual void executePreActions( tag_t object_tag, va_list args ) const;
226  virtual void executePostActions( tag_t object_tag, va_list args ) const;
227 
231  virtual void executeBaseAction( tag_t object_tag, va_list args, bool userExitBase = false ) const;
232 
233  virtual void execute( tag_t object_tag, va_list args ) const;
234 
238  virtual void executePreConditions(Teamcenter::BusinessObject* obj, va_list args ) const;
239  virtual void executePreActions(Teamcenter::BusinessObject* obj, va_list args ) const;
240  virtual void executePostActions(Teamcenter::BusinessObject* obj, va_list args ) const;
241  virtual void executeBaseAction(Teamcenter::BusinessObject* obj, va_list args ) const;
242  virtual void execute(Teamcenter::BusinessObject* obj, va_list args ) const;
243  virtual void execute(Teamcenter::BusinessObject* obj, std::vector<void*>& args )const;
244 
245 
249  bool sameBaseAction( const OperationDispatcher* dispatcher) const;
250 
251  virtual void setName(const std::string& /*name*/);
252 
253  bool hasPreOrPostAction() const;
254 
255  ExtensionSet* createExtensionSetObject( ExtensionPointType_t extType );
256 
257  static int executeUserExit( const char* typeName, const char* propName, const char* msgName, bool* customActionExecuted, ... );
258  static int executeUserExit( const char* typeName, const char* propName, const char* msgName, va_list args );
259  static int lookupUserExit( const char* typeName, const char* propName, const char* msgName, OperationDispatcher** opDispatcher );
260 
261  int setBMOperationName( const char* opName );
262  int setPostExtensionToBeReattached( const std::string& extensionName );
263 
264  static bool isExtensionValid( const std::string& typeName, const std::string& operationName,
265  const std::string& extensionName, ExtensionPointType_t extType );
266  bool validateAutoDispatch() const;
267  static bool hasAction( const std::string& typeName, const std::string& operationName,
268  ExtensionPointType_t extType );
269  FunctionInvoker* resetFunctionInvoker( Teamcenter::FunctionInvoker* functionInvokerObj );
270 
274  int exePreConditions( METHOD_message_t * msg, ... ) const ;
275  int exeBaseAction( METHOD_message_t * msg, ... ) const;
276  int exePreActions( METHOD_message_t * msg, ... ) const;
277  int exePostActions( METHOD_message_t * msg, ... ) const;
278  int exeHighPriorityPostActions( METHOD_message_t * msg, ... ) const;
279  void executeHighPriorityPostActions( METHOD_message_t& msg, va_list args ) const;
280 
281  bool anyPreConditions() const;
282  bool anyPreActions() const;
283  bool anyPostActions() const;
284 
289  static int executeObjectBasedSuperBaseAction2( tag_t objectType,
290  const std::string& operationID,
291  int& oprnInt,
292  tag_t object,
293  ...
294  );
295 
300  static int executeSetBasedSuperBaseAction2( const std::string& typeName,
301  const std::string& operationID,
302  int* pOprnInt,
303  ...
304  );
305 
309  int executeBaseAction2( METHOD_message_t& msg, va_list args ) const;
310 
316  int addRuntimeUserArguments( const char * extensionName, ExtensionPointType_t extType, int argCount, const TC_argument_t * args );
317  void setBulkOperationFuncPtr( BulkOperation_bulk_loader_t bulkOperationFuncPtr );
319 
320  virtual void setupMessageData( tag_t object_tag, METHOD_message_t& msgData ) const;
321 
323  void propagateInherited3( OperationDispatcher* sourceOpDispatcher, EXTENSIONFRAMEWORK_operation_extn_propagation_context_t opPropagationContext = DEFAULT_PROPAGATION, bool baseActionMergeRequired = true );
324 
328  void addPreCondition2( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, EXTENSIONFRAMEWORK_extension_category_t extnCategory, bool functionInvokerRequired = true );
329 
333  void addPreAction2( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, EXTENSIONFRAMEWORK_extension_category_t extnCategory, bool functionInvokerRequired = true );
334 
338  void addPostAction2( METHOD_function_t fnPtr, TC_argument_list_t* userArgs, EXTENSIONFRAMEWORK_extension_category_t extnCategory, bool functionInvokerRequired = true, bool auto_dispatched = true );
339 
343  ExtensionSet* getPreConditionSet() const;
344  ExtensionSet* getPreActionSet() const;
345  ExtensionSet* getBaseActionSet() const;
346  ExtensionSet* getPostActionSet() const;
347  ExtensionFunctionSet* getPreConditionExtensionFunctions() const;
348  ExtensionFunctionSet* getPreActionExtensionFunctions() const;
349  ExtensionFunctionSet* getPostActionExtensionFunctions() const;
350 
357  int setExtensionRefactoredAsSetBased( const std::string& extensionName,
358  ExtensionPointType_t extensionType );
359 
361 
365  void setOarEnabled( bool value );
366 
370  bool getOarEnabled() const;
371 
375  void setAsSetBased( bool value );
376 
380  bool isSetBased() const;
381 
382 
383 
384 private:
385 
386  bool isBaseActionExtensionsetEmpty() const;
387 
393  const std::string& objectBasedOperationID,
394  int& oprnInt,
395  bool& oObjBasedSuperDelegToSetBasedParent,
396  OperationDispatcher*& opParentOprnDisp
397  );
398 
403  static int evaluateParentBusinessObjectOverrideOperation( tag_t objectType,
404  const std::string& operationID,
405  int& oprnInt,
407  tag_t& parentWithOpOverriden,
408  OperationDispatcher*& opParentOprnDisp
409  );
410 
415  static int executeSetBasedSuperBaseAction( const std::string& typeName,
416  const std::string& operationID,
417  int& oprnInt,
418  va_list args
419  );
420 
421  ExtensionFunctionSet* createFunctionSetObject( ExtensionPointType_t extType );
422 
423 
424 
425  ExtensionFunctionSet* m_preConditionSet;
426  ExtensionFunctionSet* m_preActionSet;
427  ExtensionFunctionSet* m_postActionSet;
429  ExtensionSet* m_preActionExtensionSet;
430  ExtensionSet* m_baseActionExtensionSet; // only one is allowed
432 
433  bool m_isOperation; // base action is a C++ method (for metamodel operation)
435 
440  FunctionInvoker* m_functionInvokerObj;
441 
442  std::string m_boName;
448 };
449 #include <extensionframework/libextensionframework_undef.h>
450 #endif //OPERATIONDISPATCHER_HXX