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