Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef XSynchronActionH
00033 #define XSynchronActionH
00034
00035 #include <zeusbase/System/Interfaces/IXObject.hpp>
00036 #include <zeusbase/System/Interfaces/IXSynchronAction.hpp>
00037 #include <zeusbase/System/ZObject.h>
00038 #include <zeusbase/System/ManagedList.hpp>
00039 #include <zeusbase/System/Set.hpp>
00040
00041
00042 BEGIN_NAMESPACE_Zeus
00043
00044
00048
00049 zeusbase_class TXSynchronAction : public TZObject, public IXSynchronAction
00050 {
00051 public:
00052 TXSynchronAction(IXObject* pNode1, IXObject* pNode2, ENodeActionType actionType = IXSynchronAction::etNodeUnchanged);
00053 TXSynchronAction(IXObject* pNode1, IXObject* pNode2, IXSynchronAction* pParent, ENodeActionType actionType = IXSynchronAction::etNodeUnchanged);
00054
00055 static bool isNodeEqual(IXMLNode& pSource,
00056 IXMLNode& rTarget,
00057 bool bRecurs = true);
00058 static bool isNodeEqual(IXMLNode& pSource,
00059 IXMLNode& rTarget,
00060 const TSet<TString>& rExcludedAttributes,
00061 bool bRecurs = true);
00062
00063
00064 virtual Retval MQUALIFIER addNewChild(IXObject* pNode1, IXObject* pNode2, IXSynchronAction::ENodeActionType mType, IXSynchronAction*& pChild);
00065 virtual void MQUALIFIER add(IXSynchronAction& pChild);
00066 virtual Retval MQUALIFIER getNextChildOfAction(IXSynchronAction& rRefChild, IXSynchronAction*& rpNextChild);
00067 virtual Int MQUALIFIER getCount() const ;
00068 virtual Retval MQUALIFIER getChild(Int iIndex, IXSynchronAction*& pAction) const;
00069 virtual ENodeActionType MQUALIFIER getType() const;
00070 virtual Retval MQUALIFIER getNode1(IXObject*& pNode) const;
00071 virtual Retval MQUALIFIER getNode2(IXObject*& pNode) const;
00072 virtual Retval MQUALIFIER getParent(IXSynchronAction*& pParent) const;
00073 virtual void MQUALIFIER setParent(IXSynchronAction& pParent);
00074 virtual void MQUALIFIER disable();
00075 virtual void MQUALIFIER enable();
00076 virtual bool MQUALIFIER isEnabled() const { return m_bEnabled; }
00077 virtual Retval MQUALIFIER executeAction(long lCycleCount=0, bool bUnfreeze = false, bool bCleanTree = false, IXSynchronActionListener* pListener = NULL);
00078 virtual void MQUALIFIER getCaption(IString& rCaption) const;
00079 virtual Retval MQUALIFIER findAction(IXObject& rObject, IXSynchronAction*& rpAction);
00080 virtual Int MQUALIFIER getSubActionCount() const;
00081 virtual Retval MQUALIFIER getErrorCode() const;
00082 virtual Retval MQUALIFIER checkPreConditions(Int iCycleID = 0, bool bForce = false);
00083 virtual void MQUALIFIER setRootObjectNotification(bool bFlag);
00084 virtual Retval MQUALIFIER getRootAction(IXSynchronAction*& rpRoot) const;
00085
00086
00087 MEMORY_MANAGER_DECL
00088
00089 protected:
00091 TManagedList<IXSynchronAction> m_lstChildren;
00093 bool m_bRootObjectNotification;
00094
00095 virtual ~TXSynchronAction();
00096
00097
00098 virtual Retval MQUALIFIER executeRecurs(Int iActCylceID, IXSynchronActionListener* pListener = NULL);
00099 virtual void MQUALIFIER finishRecurs();
00100 virtual void MQUALIFIER cleanTargetTree();
00101
00102
00108
00109 virtual void onStartExecuting(bool& rAbort) { rAbort = false; }
00110
00111
00120
00121 virtual void onExecuted(bool , bool& rAbort) { rAbort = false; }
00122
00123
00129
00130 virtual void onPostProcessing(bool ) {}
00131
00132 bool isRootOfExecution();
00133 bool canUnfreeze();
00134 bool canCleanTree();
00135 void setErrorCode(Retval retErrorCode);
00136
00137
00138 private:
00140 bool m_bEnabled;
00142 IXObject* m_pNode1;
00144 IXObject* m_pNode2;
00146 ENodeActionType m_NodeActionType;
00148 IXSynchronAction* m_pParent;
00150 bool m_bRootOfExecution;
00152 bool m_bUnfreeze;
00154 bool m_bCleanTree;
00156 Retval m_retErrorCode;
00157
00158 Retval performchanges();
00159 Retval addNewXObject();
00160 Retval removeXObject();
00161
00162 void synchronizeAttributes(IXMLNode& rXMLNode1, IXMLNode& rXMLNode2);
00163 void synchronizeSubNodes(IXMLNode& rXMLNode1, IXMLNode& rXMLNode2);
00164
00165 static bool isXObject(IXMLNode& pNode);
00166
00167 void notifySynchronizeStarted();
00168 void notifySynchronizeEnded();
00169 void notifySynchronizeCycleFinished(Int iActCycleID);
00170 };
00171
00172
00173
00178
00179 inline bool TXSynchronAction::isRootOfExecution()
00180 {
00181 return m_bRootOfExecution;
00182 }
00183
00184
00187
00188 inline bool TXSynchronAction::canUnfreeze()
00189 {
00190 return m_bUnfreeze;
00191 }
00192
00193
00196
00197 inline bool TXSynchronAction::canCleanTree()
00198 {
00199 return m_bCleanTree;
00200 }
00201
00202
00203
00206
00207 inline void TXSynchronAction::setErrorCode(Retval retErrorCode)
00208 {
00209 if (retErrorCode != RET_NOERROR)
00210 {
00211 m_retErrorCode = retErrorCode;
00212 m_NodeActionType = etNodeError;
00213 }
00214 }
00215
00216
00219
00220 inline void MQUALIFIER TXSynchronAction::setRootObjectNotification(bool bFlag)
00221 {
00222 m_bRootObjectNotification = bFlag;
00223 }
00224
00225
00228
00229 inline bool TXSynchronAction::isNodeEqual(IXMLNode& pSource,
00230 IXMLNode& rTarget,
00231 bool bRecurs )
00232 {
00233 TSet<TString> setEmpty;
00234 return TXSynchronAction::isNodeEqual(pSource, rTarget, setEmpty, bRecurs);
00235 }
00236
00237 END_NAMESPACE_Zeus
00238
00239 #endif
00240