Muster SDK  8.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
MTemplate.h
Go to the documentation of this file.
1 /*****************************************************************************
2 **
3 ** Header file for Virtual Vertex Template class
4 **
5 ** Name : MTemplate.h
6 ** Author : Leonardo Bernardini
7 ** Version : Alpha 0.1, Sun Aug 15th 2006
8 **
9 ** Copyright 2000-2014, Virtual Vertex
10 ** All Rights Reserved.
11 **
12 ** This file contains UNPUBLISHED PROPRIETARY SOURCE CODE.
13 ** The contents of this file may not be disclosed to third parties, copied
14 ** or duplicated in any form, in whole or in part, without the prior written
15 ** permission of the author.
16 **
17 *****************************************************************************/
18 #ifndef MTEMPLATE_H
19 #define MTEMPLATE_H
20 
21 #ifdef WIN32
22 // Windows definitions
23 #ifdef MTEMPLATE_EXPORTS
24 #define MTEMPLATE_API __declspec(dllexport)
25 #else
26 #define MTEMPLATE_API __declspec(dllimport)
27 #endif
28 #else
29 
30 #ifndef MTEMPLATE_EXPORTS
31 #ifdef LINUX
32 #define MTEMPLATE_API
33 #else
34 #define MTEMPLATE_API
35 #endif
36 #else
37 #define MTEMPLATE_API
38 #endif
39 #endif
40 
41 // Disable STL Export warning
42 #if defined(_WIN32)
43 #pragma warning(disable: 4251)
44 #endif // _WIN32
45 
46 #include <string>
47 
48 #include "MClientLib/MProcess.h"
49 #include "MClientLib/MChunk.h"
50 #include "MClientLib/MJob.h"
51 #include "MClientLib/MStringRef.h"
52 
53 namespace MTemplateEngine {
54 
61  };
62 
66 
67  public:
71  kTemplateErrorDefault = 0x01,
72  kTemplateErrorPauseJob = 0x02,
73  kTemplateErrorPauseClient = 0x04,
74  kTemplateErrorAddTemplateToExclusion = 0x08,
75  kTemplateErrorAddJobToExclusion = 0x10,
76  kTemplateErrorRequeueChunk = 0x20,
77  kTemplateErrorAbortRender = 0x40
78  };
79 
86  kTemplateErrorTypeWarning
87  };
88 
90  MTemplateError(int errorCode, std::string errorString, int _errorType);
91  ~MTemplateError();
92 
93  int getErrorCode();
94  void setErrorCode(int _errorCode);
95  std::string getErrorString();
96  void setErrorString(const std::string& _errorString);
97  void addErrorAction(int _errorAction);
98  void setErrorActionToDefault();
99  int getErrorAction();
100  void setErrorType(int _errorType);
101  int getErrorType();
102  private:
103  int errorCode;
104  std::string errorString;
105  int errorAction;
106  int errorType;
107  };
108 
112 
113  public:
119  kTemplateItemFieldsActivationDisable
120  };
121 
123  MTemplateItemEvent(const std::string& field, const std::string& value, int activationEvent);
125  void setActivationEvent(int _activationEvent);
126  void setValue(const std::string& _value);
127  void setField(const std::string& _field);
128  int getActivationEvent();
129  std::string getValue();
130  std::string getField();
131  void encodeTree(void* pt, std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
132 
133  private:
134  std::string value;
135  std::string field;
136  int activationEvent;
137  };
138 
142 
143 public:
144 
147  void clear();
148  void addEvent(const std::string& _field, const std::string& _value, int _activationEvent);
149  std::map<std::string,MTemplateItemEvent>* getEvents();
150 
151 private:
152  std::map<std::string,MTemplateItemEvent> map;
153 };
154 
158 
159  public:
160 
161  friend class MTemplate;
162  friend class MTemplateItemHolder;
163  friend class MTemplatePlatform;
164 
177  kTemplateItemYesNo
178  };
179 
180  MTemplateItem();
181  MTemplateItem(const std::string& _name, const std::string& _description,const std::string& _extendedDescription,
182  const std::string& defaultValue, bool _isActivable,bool _applySubstitution, bool _isMandatory);
183  virtual ~MTemplateItem();
184 
185  std::string getName();
186  std::string getDescription();
187  std::string getExtendedDescription();
188  std::string getDefaultValue();
189  bool getDefaultActivatorValue();
190  bool getIsActivable();
191  bool getApplySubstitution();
192  bool getIsMandatory();
193  int getType();
194 
195  void setName(const std::string& _name);
196  void setDescription(const std::string& _description);
197  void setExtendedDescription(const std::string& _extendedDescription);
198  void setIsActivable(bool _isActivable);
199  void setApplySubstitution(bool _applySubstitution);
200  void setIsMandatory(bool _isMandatory);
201  void setType(int _type);
202  void setDefaultValue(const std::string& _defaultValue);
203  void setDefaultActivatorValue(bool _defaultValue);
204 
205  MTemplateItem* duplicateItem();
206  static void deallocateItemList(std::vector<MTemplateItem*>* list);
207  protected:
208  int type;
209  private:
210  std::string defaultValue;
211  std::string name;
212  std::string description;
213  std::string extendedDescription;
214  bool isActivable;
215  bool applySubstitution;
216  bool isMandatory;
217  bool defaultActivatorValue;
218  protected:
219  virtual void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
220 
221  };
222 
225  public:
227  MTemplateItemFile(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
228  const std::string& _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory, const std::string& fileFilters);
229  virtual ~MTemplateItemFile();
230 
231  void setFileFilters(const std::string& filters);
232  std::string getFileFilters();
233 
234  void setIsFileSaveDialog(bool _isFileDialog);
235  bool getIsFileSaveDialog();
236 
237  protected:
238  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
239  private:
240  std::string fileFilters;
241  bool isFileDialog;
242  };
243 
246  public:
248  MTemplateItemFolder(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
249  const std::string& _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
250  virtual ~MTemplateItemFolder();
251  };
252 
255  public:
257  MTemplateItemString(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
258  const std::string& _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
259  virtual ~MTemplateItemString();
260  };
261 
264  public:
266  MTemplateItemDouble(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
267  double _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
268  virtual ~MTemplateItemDouble();
269  };
270 
273  public:
275  MTemplateItemInteger(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
276  int _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
277  virtual ~MTemplateItemInteger();
278  };
279 
282  public:
284  MTemplateItemCheck(const std::string& _name, const std::string& _description,const std::string& _extendedDescription,
285  bool _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
286  virtual ~MTemplateItemCheck();
287  };
288 
291  public:
293  MTemplateItemYesNo(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
294  bool _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
295  virtual ~MTemplateItemYesNo();
296  };
297 
300  public:
302  MTemplateItemComboItem(const std::string& _key, const std::string& _value) { key = _key; value = _value; }
304  void setKey(const std::string& _key) { key = _key; }
305  void setValue(const std::string& _value) { value = _value; }
306  std::string getKey() { return key; }
307  std::string getValue() { return value; }
308  private:
309  std::string key;
310  std::string value;
311  };
312 
315  public:
317  MTemplateItemCombo(const std::string& _name, const std::string& _description, const std::string& _extendedDescription,
318  const std::string& _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
319  virtual ~MTemplateItemCombo();
320  void addItem(const std::string& key,const std::string& value);
321  void clearItems();
322  std::vector<MTemplateItemComboItem>* getItems();
323  protected:
324  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
325  private:
326  std::vector<MTemplateItemComboItem> items;
327  };
328 
331  public:
333  MTemplateItemMultichoice(const std::string& _name, const std::string& _description,const std::string& _extendedDescription,
334  const std::string& _defaultValue,bool _isActivable,bool _applySubstitution, bool _isMandatory);
335  virtual ~MTemplateItemMultichoice();
336  };
337 
340  {
341  friend class MTemplate;
342 
343  public:
347 
348  bool getPlatformEnabled();
349  bool getEnableErrorCheck();
350  bool getEnabledByDefault();
351  int getFramesFloating();
352  int getDetectionLogic();
353  std::string getDetectionLogicProcessName();
354  std::string getDetectionLogicChildProcessName();
355  bool getHideProcessWindow();
356  bool getSampleEnvironmentFromBat();
357 
358  void setPlatformEnabled(bool _platformEnabled);
359  void setEnableErrorCheck(bool _enableErrorCheck);
360  void setEnabledByDefault(bool _enabledByDefault);
361  void setFramesFloating(int _framesFloating);
362  void setDetectionLogic(int _detectionLogic);
363  void setDetectionLogicProcessName(const std::string& _detectionLogicProcessName);
364  void setDetectionLogicChildProcessName(const std::string& _detectionLogicChildProcessName);
365  void setHideProcessWindow(bool _hideProcessWindow);
366  void setSampleEnvironmentFromBat(bool _sampleEnvironmentFromBat);
367 
368  void clearClientConfigurationItems();
369  void addClientConfigurationItem(MTemplateItem* item);
370  std::vector<MTemplateItem*>* getClientConfigurationItems();
371 
372  private:
373  bool platformEnabled;
374  bool enableErrorCheck;
375  bool enabledByDefault;
376  bool hideProcessWindow;
377  bool sampleEnvironmentFromBat;
378  int framesFloating;
379  int detectionLogic;
380  std::string detectionLogicProcessName;
381  std::string detectionLogicChildProcessName;
382  std::vector<MTemplateItem*> clientAttributes;
383  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
384  MTemplatePlatform& operator= (const MTemplatePlatform &src);
385  void copyFrom(const MTemplatePlatform& src);
386 
387  };
388 
391 
392  {
393  friend class MTemplate;
394 
395  public:
398  void setGroupName(const std::string& _groupName);
399  std::string getGroupName();
400  std::vector<MTemplateItem*>* getVector();
401  void addItem(MTemplateItem* item);
402  void clearItems();
403  MTemplateItemHolder* duplicateItem();
404  private:
405  std::string groupName;
406  std::vector<MTemplateItem*> vec;
407  void encodeTree(void* pt, std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
408 
409  };
410 
413 
414  {
415  friend class MTemplate;
416 
417  public:
420  bool getEnable();
421  bool getPauseJob();
422  bool getPauseNode();
423  bool getAddTemplateToExclusion();
424  bool getAddJobToExclusion();
425  bool getRequeueChunk();
426 
427  void setEnable(bool _enable);
428  void setPauseJob(bool _pauseJob);
429  void setPauseNode(bool _pauseNode);
430  void setAddTemplateToExclusion(bool _addTemplateToExclusion);
431  void setAddJobToExclusion(bool _addJobToExclusion);
432  void setRequeueChunk(bool _requeueChunk);
433  private:
434  bool enable;
435  bool pauseJob;
436  bool pauseNode;
437  bool addTemplateToExclusion;
438  bool addJobToExclusion;
439  bool requeueChunk;
440  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
441 
442  };
443 
446 
447  {
448  friend class MTemplate;
449 
450  public:
453  std::string getAction();
454  bool getCheckReturnCode();
455  int getReturnCode();
456  int getTimeout();
457 
458  void setAction(const std::string& _action);
459  void setCheckReturnCode(bool _checkReturnCode);
460  void setReturnCode(int _returnCode);
461  void setTimeout(int _timeout);
462 
463  private:
464  std::string action;
465  bool checkReturnCode;
466  int returnCode;
467  int timeout;
468  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
469 
470  };
471 
474  {
475  friend class MTemplate;
476 
477  public:
480  bool getEnableFrameCheck();
481  void setEnableFrameCheck(bool _enableFrameCheck);
482  bool getEnableMovieAssembler();
483  void setEnableMovieAssembler(bool _enableMovieAssembler);
484  bool getCanProvideFramesMask();
485  void setCanProvideFramesMask(bool _canProvideFramesMask);
486 
487  private:
488  bool enableFrameCheck;
489  bool canProvideFramesMask;
490  bool enableMovieAssembler;
491  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
492 
493  };
494 
497  {
498  public:
501  void setDescription(const std::string& _description);
502  void setValue(const std::string& _value);
503  std::string getDescription();
504  std::string getValue();
505  private:
506  std::string fileFormatDescription;
507  std::string fileFormatValue;
508  };
509 
512  public:
513  int getSliceFrameResolutionX();
514  int getSliceFrameResolutionY();
515  int getSliceSamplesOriginX();
516  int getSliceSamplesOriginY();
517  int getSliceWidth();
518  int getSliceHeight();
519  int getFinalPositionX();
520  int getFinalPositionY();
521 
522  void setSliceFrameResolutionX(int _sliceFrameResolutionX);
523  void setSliceFrameResolutionY(int _sliceFrameResolutionY);
524  void setSliceSamplesOriginX(int _sliceOriginX);
525  void setSliceSamplesOriginY(int _sliceOriginY);
526  void setSliceWidth(int _sliceWidth);
527  void setSliceHeight(int _sliceHeight);
528  void setFinalPositionX(int _finalPositionX);
529  void setFinalPositionY(int _finalPositionY);
530 
531  private:
532  int sliceFrameResolutionX;
533  int sliceFrameResolutionY;
534  int sliceOriginX;
535  int sliceOriginY;
536  int sliceWidth;
537  int sliceHeight;
538  int finalPositionX;
539  int finalPositionY;
540  };
541 
544 
545  {
546  friend class MTemplate;
547 
548  public:
549 
552  bool getSkipAssembler();
553  void setSkipAssembler(bool _skipAssembler);
554  void addInputFileFormat(const std::string& _fileFormatDescription, const std::string& _fileFormatValue);
555  void clearInputFileFormats();
556  void addOutputFileFormat(const std::string& _fileFormatDescription, const std::string& _fileFormatValue);
557  void clearOutputFileFormats();
558  std::vector<MTemplateImageSlicingFileFormats>* getInputFileFormats();
559  std::vector<MTemplateImageSlicingFileFormats>* getOutputFileFormats();
560 
561 
562  private:
563  bool skipAssembler;
564  std::vector<MTemplateImageSlicingFileFormats> inputFileFormats;
565  std::vector<MTemplateImageSlicingFileFormats> outputFileFormats;
566 
567  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
568 
569  };
570 
573  {
574  friend class MManager;
575  public:
576  MTemplate();
577  virtual ~MTemplate();
578  void Retain();
579  void Release();
580  void Lock();
581  void Unlock();
582 
583  bool isPythonTemplate();
584 
588 
591 
597  bool getEnableLogWarningsOverrides();
598  bool getEnableLogErrorsOverrides();
599  bool getEnableExitCodeWarningsOverrides();
600  bool getEnableExitCodeErrorsOverrides();
601  bool getEnableProcessFailureErrorsOverrides();
602 
603  void setEnableLogWarningsOverrides(bool _enableLogWarningsOverrides);
604  void setEnableLogErrorsOverrides(bool _enableLogErrorsOverrides);
605  void setEnableExitCodeWarningsOverrides(bool _enableExitCodeWarningsOverrides);
606  void setEnableExitCodeErrorsOverrides(bool _enableExitCodeErrorsOverrides);
607  void setEnableProcessFailureErrorsOverrides(bool _enableProcessFailureErrorsOverrides);
608 
609 
614  bool getEnablePreChunkActionsOverrides();
615  bool getEnablePostChunkActionsOverrides();
616  bool getEnablePreJobActionsOverrides();
617  bool getEnablePostJobActionsOverrides();
618  void setEnablePreChunkActionsOverrides(bool _enablePreChunkActionsOverrides);
619  void setEnablePostChunkActionsOverrides(bool _enablePostChunkActionsOverrides);
620  void setEnablePreJobActionsOverrides(bool _enablePreJobActionsOverrides);
621  void setEnablePostJobActionsOverrides(bool _enablePostJobActionsOverrides);
622 
623  std::string getContent();
624  std::string getName();
625  std::string getDescription();
626  int getID();
627  std::string getFileName();
628  std::string getMd5Hash();
629  int getTemplateLogic();
630  int getDefaultPriority();
631  std::string getDefaultPools();
632  std::string getDefaultExcludedPools();
633  int getMaximumLicenses();
634  std::string getLicensesGroup();
635  int getDelay();
636  std::string getDelayGroup();
637  bool getEnableAdditionalFlagsField();
638  bool getEnableChunksTimeoutOverride();
639  bool getOverrideMaximumChunksRequeue();
640  int getOverrideMaximumChunksRequeueValue();
641  int getChunksTimeout();
642 
643  void setName(const std::string& _name);
644  void setDescription(const std::string& _description);
645  void setID(int _id);
646  void setFilename(const std::string& _filename);
647  void setMd5Hash(const std::string& _md5Hash);
648  void setTemplateLogic(int _templateLogic);
649  void setDefaultPriority(int _defaultPriority);
650  void setDefaultPools(const std::string& _defaultPools);
651  void setDefaultExcludedPools(const std::string& _defaultExcludedPools);
652  void setMaximumLicenses(int _maximumLicenses);
653  void setLicensesGroup(const std::string& _licensesGroup);
654  void setDelay(int _delay);
655  void setDelayGroup(const std::string& _delayGroup);
656  void setEnableAdditionalFlagsField(bool _enableAdditionalFlagsField);
657 
658  void setEnableChunksTimeoutOverride(bool _enableChunksTimeoutOverride);
659  void setChunksTimeout(int _chunksTimeout);
660  void setOverrideMaximumChunksRequeue(bool _overrideMaximumChunksRequeue);
661  void setOverrideMaximumChunksRequeueValue(int _overrideMaximumChunksRequeueValue);
662 
663  MTemplatePlatform* getActivePlatform();
664 
665  void clearSubmissionItems();
666  void addSubmissionItem(MTemplateItem* item);
667  std::vector<MTemplateItem*>* getSubmissionItems();
668 
669  void clearSubmissionAdditionalItems();
670  void addSubmissionAdditionalItem(const char* groupName,MTemplateItem* item);
671  std::vector<MTemplateItemHolder*>* getSubmissionAdditionalItems();
672 
673  void clearMappings();
674  void addMapping(const std::string& templateValue, const std::string& builtinValue);
675  std::map<std::string,std::string>* getMappings();
676 
677  virtual void onFieldChanged(const std::string& fieldName, const std::string& fieldValue, MTemplateItemsFields& fieldsToChange);
678  virtual std::string onBuildCommandLine(int platform, MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, int instanceNum);
679  virtual std::string onBuildAdditionalParameters(MClientLib::MPropertiesMap& attributes);
680  virtual MTemplateError onGetApplicationPath(MClientLib::MJob* job,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MStringRef& pathOut );
681  virtual MTemplateError onGetApplicationStartingFolder(MClientLib::MJob* job,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MStringRef& pathOut);
682  virtual MClientLib::MEnvironment onBuildEnvironment(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MEnvironment& existingEnvironment);
683  virtual std::string onGetWindowsBatFile(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MEnvironment& existingEnvironment);
684  virtual bool onCheckForSubframeAdvancingString(const char* line);
685  virtual bool onCheckForFramesPrefixString(const char* line, MClientLib::MStringRef& prefixOut);
686  virtual bool onCheckForFramesMask(const char* line, MClientLib::MStringRef& maskOut);
687  virtual bool onCheckForSubframeProgress(const char* line, MClientLib::MStringRef& progressOut);
688  virtual MTemplateError onCheckLogLine(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, const char* line);
689  virtual MTemplateError onCheckLog(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, const char* log);
690  virtual MTemplateError onCheckExitCode(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, int exitCode);
691  virtual int onApplicationFinder(MClientLib::MStringRef& moduleRegExp, MClientLib::MStringRef& moduleTag);
692  virtual bool onFindApplication(MClientLib::MStringRef& basePath,std::map<std::string,std::string>& clientTemplatePreferences);
693  virtual bool onModuleFound(MClientLib::MStringRef& moduleExec,MClientLib::MStringRef& modulePath,std::map<std::string,std::string>& clientTemplatePreferences);
694  virtual kTemplateFunctionBehaviour onDetectRunningProcess(MPid mainProcess, std::vector <MClientLib::MProcessSnapshot*> hostProcesses, std::map<std::string,std::string>& clientTemplatePreferences,MPid& runningProcessPid);
695  virtual kTemplateFunctionBehaviour onStartProcess(MClientLib::MJob* job, MClientLib::MChunk* chunk, MClientLib::MEnvironment* env, std::map<std::string,std::string>& clientTemplatePreferences, int instanceNum, MPid& runningProcessPid);
696  virtual kTemplateFunctionBehaviour onCollectProcessOutput(MPid mainProcess,MPid runningProcessPid,int instanceNum,MClientLib::MStringRef& output);
697  virtual kTemplateFunctionBehaviour onTerminateProcess(MClientLib::MJob* job,MPid process, int instanceNum);
698  virtual kTemplateFunctionBehaviour onChangeProcessPriority(MClientLib::MJob* job,MPid process,int priority, int instanceNum);
699  virtual kTemplateFunctionBehaviour onCheckProcessTermination(MClientLib::MJob* job,MPid process, int instanceNum);
700  virtual kTemplateFunctionBehaviour onInstanceOverrideImpersonationUser(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences,MClientLib::MStringRef& usernameOut,MClientLib::MStringRef& passwordOut);
701  virtual kTemplateFunctionBehaviour onDispatcherOverrideImpersonationUser(MClientLib::MJob* job, MClientLib::MChunk* chunk,MClientLib::MStringRef& usernameOut,MClientLib::MStringRef& passwordOut);
702 
703  // Virtual functions called on the global template too (id 0)
704  virtual bool onValidateJobSubmission(MClientLib::MJob* job, MClientLib::MStringRef& err); // Fired from the Console, clientlib ,and on the dispatcher when submitting from the web
705 
706  // Fired from the Dispatcher from the networking threads, be as fast as possible
707  virtual void onDeleteJob(MClientLib::MJob* job);
708  virtual void onSubmitJob(MClientLib::MJob* job);
709  virtual void onReinitJob(MClientLib::MJob* job);
710  virtual void onEditJob(MClientLib::MJob* job);
711  virtual void onJobPropertiesChanged(MClientLib::MJob* job);
712  virtual void onJobCompleted(MClientLib::MJob* job);
713  virtual kTemplateFunctionBehaviour onValidateJobDependancies(MClientLib::MJob* job);
714  virtual kTemplateFunctionBehaviour onValidateChunkDependancies(MClientLib::MChunk* chunk);
715 
716  // Fired from the Dispatcher on a different thread, take your time
717  virtual MTemplateError onJobStart(MClientLib::MJob* job);
718  virtual MTemplateError onJobEnd(MClientLib::MJob* job);
719  virtual void onDispatcherIdling();
720 
721  // Fired from the client on a different thread, take your time
722  virtual void onClientIdling();
723  virtual kTemplateFunctionBehaviour onCheckClientAvailability();
724 
725  // Fired from the client on a shared thread, take your time but this will prevent network flow in multiple instances
726  virtual MTemplateError onChunkStart(MClientLib::MJob* job, MClientLib::MChunk* chunk, std::map<std::string,std::string>& clientTemplatePreferences,int instanceId);
727  virtual MTemplateError onChunkEnd(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, int instanceId);
728 
729  virtual std::string onGetSlicesInputFilename(MClientLib::MJob* job, MClientLib::MChunk* chunk);
730  virtual std::string onGetSlicesOutputFilename(MClientLib::MJob* job);
731  virtual void onGetSliceBoundaries(MClientLib::MJob* job,MClientLib::MChunk* chunk,MTemplateSliceBoundaries* boundaries );
732 
733  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
734  bool compareWebFilters(std::vector<std::string>* filters);
735  bool checkWebFilter(const std::string& field, const std::string& value) ;
736 
737  private:
738  int retainsCount;
739  void* pyObject;
740  void* _mutex;
741  std::string content;
742  bool pythonTemplate;
743 
744  std::string filename;
745  std::string md5hash;
746  std::string name;
747  std::string description;
748  int uid;
749  int templateLogic;
750  int defaultPriority;
751  std::string defaultPools;
752  std::string defaultExcludedPools;
753  int maximumLicenses;
754  std::string licensesGroup;
755  int delay;
756  std::string delayGroup;
757  bool enableAdditionalFlagsField;
758  bool _canProvideFramesMask;
759  bool enableChunksTimeoutOverride;
760  bool overrideMaximumChunksRequeue;
761  int overrideMaximumChunksRequeueValue;
762  int chunksTimeout;
763 
764  bool enableLogWarningsOverrides;
765  bool enableLogErrorsOverrides;
766  bool enableExitCodeWarningsOverrides;
767  bool enableExitCodeErrorsOverrides;
768  bool enableProcessFailureErrorsOverrides;
769 
770  bool enablePreChunkActionsOverrides;
771  bool enablePostChunkActionsOverrides;
772  bool enablePreJobActionsOverrides;
773  bool enablePostJobActionsOverrides;
774 
775  std::map<std::string,std::string> mappings;
776  std::map<std::string,std::string> reverseMappings;
777 
778  std::vector<MTemplateItem*> submissionItems;
779  std::vector<MTemplateItemHolder*> submissionAdditionalItems;
780 
781  };
782 
783 };
784 
785 #endif