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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #ifndef XObjectH
00062 #define XObjectH
00063
00064 #include <zeusbase/System/ZObject.h>
00065 #include <zeusbase/System/SingleLinkedList.hpp>
00066 #include <zeusbase/System/Interfaces/IXMLNode.hpp>
00067 #include <zeusbase/System/Interfaces/IXObject.hpp>
00068
00069 BEGIN_NAMESPACE_Zeus
00070
00071 class TCriticalSection;
00072 class TXMemberCollection;
00073
00074
00077
00078 zeusbase_class TXObject : public TZObject, public IXObject
00079 {
00080 public:
00081 TXObject(IXMLNode& rNode);
00082
00083 virtual TString getXMLStream() const;
00084 virtual TString getCodeModule() const;
00085
00086
00087 virtual void MQUALIFIER getName(IString& rName)const;
00088 virtual void MQUALIFIER getClassName(IString& rName)const;
00089 virtual Uint MQUALIFIER getID()const;
00090 virtual Retval MQUALIFIER addChild(IXObject& rChild);
00091 virtual Retval MQUALIFIER deleteChild(Int iIndex, bool bDoFreeze=false);
00092 virtual Retval MQUALIFIER removeChild(IXObject& rChild, bool bDoFreeze=false);
00093 virtual Int MQUALIFIER getChildCount()const;
00094 virtual Retval MQUALIFIER getChild(Int iIndex, IXObject*& rpChild);
00095 virtual Retval MQUALIFIER getChildByName(const IString& rName, IXObject*& rpChild);
00096 virtual Retval MQUALIFIER getChildrenByName(const IString& name, IXObjectCollection*& pObjects);
00097 virtual Retval MQUALIFIER getParent(IXObject*& rpParent)const;
00098 virtual Retval MQUALIFIER setParent(IXObject* pParent);
00099 virtual Retval MQUALIFIER getXMLNode(IXMLNode*& rpNode) const;
00100 virtual Retval MQUALIFIER setChild(IXObject& rChild);
00101 virtual Retval MQUALIFIER getObject(const IString& rPath, IXObject*& rpObj);
00102 virtual Retval MQUALIFIER getObjects(const IString& rPath, IXObjectCollection*& pObjects);
00103 virtual Retval MQUALIFIER getRootObject(IXObject*& rpObj);
00104 virtual bool MQUALIFIER canCreateChildren()const;
00105 virtual bool MQUALIFIER freeze();
00106 virtual bool MQUALIFIER unfreeze();
00107 virtual bool MQUALIFIER isFrozen()const;
00108 virtual void MQUALIFIER setTreeLock(ICriticalSection* pSection);
00109 virtual void MQUALIFIER lockTree();
00110 virtual void MQUALIFIER unlockTree();
00111 virtual Retval MQUALIFIER onExecute(ISimpleCommand& command, Uint uiMode);
00112 virtual void MQUALIFIER onBroadCast(ISimpleCommand& pMessage);
00113 virtual Retval MQUALIFIER insertChild(Int iIndex, IXObject& rChild);
00114 virtual Int MQUALIFIER indexOfChild(IXObject& rChild);
00115 virtual Retval MQUALIFIER createChildObject(const IString& rName,
00116 const IString& rClassName,
00117 const IString& rCodeModule,
00118 IXObject*& rpChild);
00119 virtual Retval MQUALIFIER createChildObjectCustom(const IString& rName,
00120 const IString& rClassName,
00121 const IString& rCodeModule,
00122 const IStringList& rList,
00123 IXObject*& rpChild);
00124 virtual Retval MQUALIFIER getCastedObject(const IString& rPath,
00125 const InterfaceID& rInterfaceID,
00126 IZUnknown*& rpObj);
00127 virtual Retval MQUALIFIER readIntAttribute(const IString& rName, Int& rValue, Int iDefault = 0) const;
00128 virtual Retval MQUALIFIER readUintAttribute(const IString& rName, Uint& rValue, Uint uiDefault = 0) const;
00129 virtual Retval MQUALIFIER readFloatAttribute(const IString& rName, Float& rValue, Float fDefault = 0) const;
00130 virtual Retval MQUALIFIER readStringAttribute(const IString& rName, IString& rValue) const;
00131 virtual Retval MQUALIFIER readTimevalAttribute(const IString& rstrName, Timeval& rtmValue, Timeval rtmDefault = 0) const;
00132 virtual Retval MQUALIFIER readBoolAttribute(const IString& rstrName, bool& rbValue, bool bDefault = false) const;
00133 virtual Retval MQUALIFIER storeIntAttribute(const IString& rName, const Int& rValue);
00134 virtual Retval MQUALIFIER storeUintAttribute(const IString& rName, const Uint& rValue);
00135 virtual Retval MQUALIFIER storeFloatAttribute(const IString& rName, const Float& rValue);
00136 virtual Retval MQUALIFIER storeStringAttribute(const IString& rName, const IString& rValue);
00137 virtual Retval MQUALIFIER storeTimevalAttribute(const IString& rstrName, const Timeval& rtmValue);
00138 virtual Retval MQUALIFIER storeBoolAttribute(const IString& rstrName, bool& rbValue);
00139 virtual Int MQUALIFIER getMemberCount() const;
00140 virtual Retval MQUALIFIER getMemberVariable(Int iIndex, IXMemberVariable*& rpMember) const;
00141 virtual Retval MQUALIFIER getMemberVariableByName(const IString& rName, IXMemberVariable*& rpMember) const;
00142 virtual Retval MQUALIFIER addNewMemberVariable(const IString& rName, IXMemberVariable::EVariableType eType);
00143 virtual Retval MQUALIFIER removeMemberVariable(const IString& rName);
00144 virtual Retval MQUALIFIER getMemberObjectReference(const IString& rName, IXObject*& rpRef);
00145 virtual Retval MQUALIFIER getMemberXMLNode(const IString& rName, IXMLNode*& rpNode) const;
00146 virtual Retval MQUALIFIER readMemberVariable(const IString& rName, IZVariant& rValue) const;
00147 virtual Retval MQUALIFIER storeMemberVariable(const IString& rName, const IZVariant& rValue);
00148 virtual void MQUALIFIER resetMemberVariables();
00149
00150
00151 MEMORY_MANAGER_DECL
00152
00153
00154 virtual void setObjName(const TString& rName);
00155
00156
00157 protected:
00159 IXMLNode* m_pNode;
00161 ICriticalSection* m_pTreeLock;
00163 mutable TXMemberCollection* m_pMemberVariables;
00164
00165 TXObject();
00166 virtual ~TXObject();
00167
00168 virtual void onChildAdded(IXObject& ){};
00169 virtual void onChildDeleted(IXObject& ){};
00170
00171 void freezeChildren();
00172 void unfreezeChildren();
00173
00174 private:
00176 TSingleLinkedList<IXObject*> m_lstChildren;
00178 IXObject* m_pParent;
00180 bool m_bFrozen;
00182 TCriticalSection& m_rLock;
00183
00184 void expandMembers() const;
00185
00187
00188 protected:
00189
00190 inline Retval readAttribute(TString strName, TString& rValue) const { return readStringAttribute(strName, rValue); }
00191 inline Retval readAttribute(TString strName, Int& rValue) const { return readIntAttribute(strName, rValue); }
00192 inline Retval readAttribute(TString strName, Uint& rValue) const { return readUintAttribute(strName, rValue); }
00193 inline Retval readAttribute(TString strName, Float& rValue) const { return readFloatAttribute(strName, rValue); }
00194
00195
00196 inline Retval storeAttribute(TString strName, TString strValue) { return storeStringAttribute(strName, strValue); }
00197 inline Retval storeAttribute(TString strName, Int iValue) { return storeIntAttribute(strName, iValue); }
00198 inline Retval storeAttribute(TString strName, Uint uiValue) { return storeUintAttribute(strName, uiValue); }
00199 inline Retval storeAttribute(TString strName, Float fValue) { return storeFloatAttribute(strName, fValue); }
00201
00202 };
00203
00204
00205
00208
00209 inline void MQUALIFIER TXObject::getName(IString& rName)const
00210 {
00211 rName.assignStr(TZObject::getObjName());
00212 }
00213
00214
00217
00218 inline Int MQUALIFIER TXObject::getChildCount() const
00219 {
00220 return m_lstChildren.getCount();
00221 }
00222
00223
00226
00227 inline bool MQUALIFIER TXObject::canCreateChildren() const
00228 {
00229 return true;
00230 }
00231
00232
00235
00236 inline bool MQUALIFIER TXObject::isFrozen() const
00237 {
00238 return m_bFrozen;
00239 }
00240
00241
00244
00245 inline Retval MQUALIFIER TXObject::onExecute(ISimpleCommand& , Uint )
00246 {
00247 return RET_REQUEST_FAILED;
00248 }
00249
00250
00253
00254 inline Retval MQUALIFIER TXObject::setParent(IXObject* parent)
00255 {
00256 m_pParent = parent;
00257 return RET_NOERROR;
00258 }
00259
00260
00263
00264 inline Int MQUALIFIER TXObject::indexOfChild(IXObject& rChild)
00265 {
00266 return this->m_lstChildren.indexOf(&rChild);
00267 }
00268
00269
00270
00273
00274 inline void TXObject::setObjName(const TString& )
00275 {
00276
00277 }
00278
00279 END_NAMESPACE_Zeus
00280 #endif