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 #ifndef OST_DATA_INFO_H
00029 #define OST_DATA_INFO_H
00030
00031 #include <ost/base.hh>
00032
00033 #include "info_path.hh"
00034 #include "info_fw.hh"
00035
00036 namespace ost { namespace info {
00037
00038 class InfoHandle;
00039
00041 DLLEXPORT InfoHandle CreateInfo();
00042 DLLEXPORT InfoHandle CreateInfo(const String& dtdfile);
00043
00045 DLLEXPORT InfoHandle LoadInfo(const String& file);
00046
00047
00049
00054 class DLLEXPORT_OST_INFO InfoHandle {
00055 friend InfoHandle CreateInfo();
00056 friend InfoHandle CreateInfo(const String& text);
00057 friend InfoHandle LoadInfo(const String&);
00058
00059 typedef std::vector<RootPtr> RootPtrList;
00060 public:
00062 InfoHandle();
00063
00065 InfoHandle Copy() const;
00066
00068 void Import(const String& file);
00069
00071 void Export(const String& file) const;
00072
00073 bool IsValid() const;
00074
00075 InfoGroup Root() const;
00076
00077 void AddDefault(const InfoHandle& h);
00078
00079 bool HasDefaultGroup(const InfoPath& p) const;
00080 InfoGroup GetDefaultGroup(const InfoPath& p) const;
00081
00082 bool HasDefaultItem(const InfoPath& p) const;
00083 InfoItem GetDefaultItem(const InfoPath& p) const;
00084
00086 InfoGroup GetParent() const;
00087 void SetName(const String& name);
00088 String GetName() const;
00089 InfoGroup GetGroup(const InfoPath& path, bool use_defaults=true) const;
00090 InfoGroup CreateGroup(const String& name);
00091 bool HasGroup(const InfoPath& name, bool use_defaults=true) const;
00092 InfoGroup RetrieveGroup(const InfoPath& path, bool use_defaults=true);
00093 InfoItem GetItem(const InfoPath& path, bool use_defaults=true) const;
00094 InfoItem CreateItem(const String& name, const String& value);
00095 bool HasItem(const InfoPath& path, bool use_defaults=true) const;
00096 InfoItem RetrieveItem(const InfoPath& path, bool use_defaults=true);
00097 void Remove(const InfoPath& path, bool remove_defaults=false);
00098 void Remove(const InfoGroup& group);
00099 String GetAttribute(const String& name) const;
00100 void SetAttribute(const String& name, const String& value);
00101 bool HasAttribute(const String& name) const;
00102 void RemoveAttribute(const String& name);
00103 std::vector<String> GetAttributeList() const;
00104 String GetTextData() const;
00105 void SetTextData(const String& td);
00106 void Apply(InfoVisitor& v, bool visit_this=true);
00107 void Apply(InfoConstVisitor& v, bool visit_this=true) const;
00108
00109
00110 private:
00111 InfoHandle(RootPtr impl);
00112
00113 RootPtr impl_;
00114 };
00115
00116 }}
00117
00118 #endif