00001 00039 #ifndef INC_SOA_SERVERLIST_H 00040 #define INC_SOA_SERVERLIST_H 00041 00042 #ifndef INC_MI32_MILIST_H 00043 #include <mi32/milist.h> 00044 #endif 00045 00046 #ifndef INC_MI32_MISTRING_H 00047 #include <mi32/mistring.h> 00048 #endif 00049 00050 #ifndef INC_MI32_STRUTF8_H 00051 #include <mi32/strutf8.h> 00052 #endif 00053 00054 #ifndef INC_MI32_FILEPATH_H 00055 #include <mi32/filepath.h> 00056 #endif 00057 00058 #include <vector> 00059 00060 class HTTPMESSAGE; 00061 class XMLDOC; 00062 class XMLNODE; 00063 00064 namespace SOA { 00065 00066 //===================================================================================================================== 00067 00070 class SERVERLIST { 00071 public: 00072 00073 class ITEM; 00074 typedef MILIST<SERVERLIST::ITEM> ITEMLIST; 00075 00078 class ITEM { 00079 public: 00080 00082 ITEM ( 00083 bool IsList = true 00084 ); 00085 00087 ITEM ( 00088 bool IsList, 00089 std::vector<MISTRING> additionaltags 00090 ); 00091 00093 ITEM ( 00094 const MISTRING& title 00095 ); 00096 00098 ITEM ( 00099 const MISTRING& title, 00100 const MISTRING& url, 00101 bool IsList = false 00102 ); 00103 00104 ~ITEM (); 00105 00107 ITEM& AddChildToBack ( 00108 const ITEM& item 00109 ); 00110 00112 ITEM& AddChildToFront ( 00113 const ITEM& item 00114 ); 00115 00117 const MISTRING& GetAbstract ( 00118 ) const { return (m_Abstract); } 00119 00121 const std::vector<MISTRING> GetAdditionalTagData ( 00122 ) const { return (m_AdditionalTagData); } 00123 00125 const std::vector<MISTRING> GetAdditionalTagNames ( 00126 ) const { return (m_AdditionalTagNames); } 00127 00130 const ITEMLIST& GetItemList ( 00131 ) const { return (m_ItemList); } 00132 00135 const ITEM* GetParent ( 00136 ) const { return (m_pParent); } 00137 00140 ITEM* GetParent ( 00141 ) { return (m_pParent); } 00142 00145 const STRUTF8& GetService ( 00146 ) const { return (m_service); } 00147 00149 const MISTRING& GetTitle ( 00150 ) const { return (m_title); } 00151 00153 const MISTRING& GetURL ( 00154 ) const { return (m_url); } 00155 00157 const MISTRING& GetBaseURL ( 00158 ) const { return (m_baseurl); } 00159 00161 ITEM& InsertChild ( 00162 ITEMLIST::CONST_ITERATOR itInsertBefore, 00163 const ITEM& item 00164 ); 00165 00167 bool IsList ( 00168 ) const { return (m_IsList); } 00169 00172 ERRVALUE Parse ( 00173 const XMLNODE* xmlnode 00174 ); 00175 00177 void RemoveChild ( 00178 ITEMLIST::CONST_ITERATOR itChild 00179 ); 00180 00182 void SetAbstract ( 00183 const MISTRING& Abstract 00184 ) { m_Abstract = Abstract; } 00185 00187 void SetAdditionalTagNames ( 00188 const std::vector<MISTRING>& additionaltags 00189 ) { m_AdditionalTagNames = additionaltags; 00190 m_AdditionalTagData.resize(additionaltags.size());} 00191 00192 void SetAdditionalTagData ( 00193 const std::vector<MISTRING>& additionaltags 00194 ) { m_AdditionalTagData = additionaltags;} 00195 00197 void SetURL ( 00198 const MISTRING& url 00199 ) { m_url = url; } 00200 00202 void SetBaseURL ( 00203 const MISTRING& baseurl 00204 ) { m_baseurl = baseurl; } 00205 00207 void SetTitle ( 00208 const MISTRING& title 00209 ) { m_title = title; } 00210 00212 void TransferList ( 00213 ITEM& listitem 00214 ); 00215 00217 void TransferList ( 00218 const ITEMLIST& list 00219 ) {m_ItemList = list;} 00220 00221 private: 00222 #ifndef GENERATING_DOXYGEN_OUTPUT 00223 MISTRING m_title; 00224 MISTRING m_url; 00225 MISTRING m_baseurl; 00226 STRUTF8 m_service; 00227 MISTRING m_Abstract; 00228 std::vector<MISTRING> m_AdditionalTagNames; 00229 std::vector<MISTRING> m_AdditionalTagData; 00230 ITEMLIST m_ItemList; 00231 ITEM *m_pParent; 00232 bool m_IsList; 00233 00234 ERRVALUE GetXML (XMLNODE *xmlnode) const; 00235 00236 friend class SOA::SERVERLIST; 00237 #endif 00238 }; 00239 00241 SERVERLIST (); 00242 00244 ~SERVERLIST (); 00245 00247 const ITEMLIST& GetItemList ( 00248 ) const { return (m_TopItem.GetItemList()); } 00249 00251 const ITEM& GetTopItem ( 00252 ) const { return (m_TopItem); } 00253 00255 ITEM& GetTopItem ( 00256 ) { return (m_TopItem); } 00257 00259 ERRVALUE Load ( 00260 const FILEPATH& filepath, 00261 std::vector<MISTRING> *additionaltags=0 00262 ); 00263 00265 ERRVALUE Load ( 00266 const HTTPMESSAGE& msg, 00267 std::vector<MISTRING> *additionaltags=0 00268 ); 00269 00271 ERRVALUE Save ( 00272 const FILEPATH& filepath 00273 ) const; 00274 00275 private: 00276 #ifndef GENERATING_DOXYGEN_OUTPUT 00277 ITEM m_TopItem; 00278 00279 ERRVALUE ParseXML (const XMLDOC& doc); 00280 #endif 00281 }; 00282 00283 //===================================================================================================================== 00284 00285 } // End namespace SOA 00286 00287 #endif // INC_SOA_SERVERLIST_H
1.6.1