00001
00002
00003
00004
00005
00006
00007
00008
00012 #ifndef DEVEL_DEVEL_DMACVICAR_XMLFILESBACKEND_H
00013 #define DEVEL_DEVEL_DMACVICAR_XMLFILESBACKEND_H
00014
00015 #include <iosfwd>
00016
00017 #include "zypp/Atom.h"
00018 #include "zypp/Message.h"
00019 #include "zypp/Patch.h"
00020 #include "zypp/Script.h"
00021 #include "zypp/Product.h"
00022 #include "zypp/Selection.h"
00023 #include "zypp/Pattern.h"
00024 #include "zypp/Language.h"
00025
00026 #include "zypp/parser/xmlstore/XMLParserData.h"
00027
00028 #include "zypp/base/PtrTypes.h"
00029 #include "Backend.h"
00030
00031 using namespace zypp;
00032 using namespace zypp::parser::xmlstore;
00033
00035 namespace zypp
00036 {
00037
00038 namespace storage
00039 {
00040
00041
00042
00043
00045 class XMLFilesBackend : public Backend
00046 {
00047 friend std::ostream & operator<<( std::ostream & str, const XMLFilesBackend & obj );
00048 public:
00049 typedef intrusive_ptr<XMLFilesBackend> Ptr;
00050 typedef intrusive_ptr<const XMLFilesBackend> constPtr;
00051
00052 public:
00054 XMLFilesBackend(const Pathname &root);
00056 ~XMLFilesBackend();
00057 void setRandomFileNameEnabled( bool enabled );
00058 virtual void doTest();
00059
00063 virtual bool isBackendInitialized() const;
00067 virtual void initBackend();
00071 virtual void storeObject( ResObject::constPtr resolvable ) ;
00075 virtual void deleteObject( ResObject::constPtr resolvable );
00079 virtual std::list<ResObject::Ptr> storedObjects() const;
00083 virtual std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind) const;
00088 virtual std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind, const std::string & name, bool partial_match = false) const;
00089
00091
00093 public:
00094 void setObjectFlag( ResObject::constPtr resolvable, const std::string &flag );
00095 void removeObjectFlag( ResObject::constPtr resolvable, const std::string &flag );
00096 std::set<std::string> objectFlags( ResObject::constPtr resolvable ) const;
00097 bool doesObjectHasFlag( ResObject::constPtr resolvable, const std::string &flag ) const;
00098
00100
00102 public:
00103 void setFlag( const std::string &key, const std::string &flag );
00104 void removeFlag( const std::string &key, const std::string &flag );
00105 std::set<std::string> flags( const std::string &key ) const;
00106 bool hasFlag( const std::string &key, const std::string &flag ) const;
00107
00108 protected:
00109 void writeObjectFlags( ResObject::constPtr resolvable, const std::set<std::string> &pflags );
00110 void writeFlags( const std::string &key, const std::set<std::string> &pflags );
00111
00112 void writeFlagsInFile( const std::string &filename, const std::set<std::string> &pflags );
00113 std::set<std::string> flagsFromFile( const std::string &filename ) const;
00115
00117 public:
00121 virtual std::list<PersistentStorage::SourceData> storedSources() const;
00125 virtual void storeSource(const PersistentStorage::SourceData &data);
00129 virtual void deleteSource(const std::string &alias);
00130
00131
00132 protected:
00133 std::string randomString(int length) const;
00134 int random() const;
00135
00136
00140 std::string dirForResolvable( ResObject::constPtr resolvable ) const;
00144 std::string dirForResolvableFlags( ResObject::constPtr resolvable ) const;
00148 std::string fileNameForResolvable( ResObject::constPtr resolvable ) const;
00152 std::string fullPathForResolvableFlags( ResObject::constPtr resolvable ) const;
00156 std::string dirForNamedFlags() const;
00160 std::string fullPathForNamedFlags( const std::string &key ) const;
00161
00162
00166 std::string dirForResolvableKind( Resolvable::Kind kind ) const;
00170 std::string dirForResolvableKindFlags( Resolvable::Kind kind ) const;
00175 std::string fullPathForResolvable( ResObject::constPtr resolvable ) const;
00180 std::list<ResObject::Ptr> resolvablesFromFile( std::string file_path, Resolvable::Kind kind ) const;
00181
00182 Patch::Ptr createPatch( const zypp::parser::xmlstore::XMLPatchData & parsed ) const;
00183 Message::Ptr createMessage( const zypp::parser::xmlstore::XMLPatchMessageData & parsed ) const;
00184 Script::Ptr createScript(const zypp::parser::xmlstore::XMLPatchScriptData & parsed ) const;
00185 Product::Ptr createProduct( const zypp::parser::xmlstore::XMLProductData & parsed ) const;
00186 Selection::Ptr createSelection( const zypp::parser::xmlstore::XMLPatternData & parsed ) const;
00187 Pattern::Ptr createPattern( const zypp::parser::xmlstore::XMLPatternData & parsed ) const;
00188 Atom::Ptr createAtom( const zypp::parser::xmlstore::XMLPatchAtomData & parsed ) const;
00189 Language::Ptr createLanguage( const zypp::parser::xmlstore::XMLLanguageData & parsed ) const;
00190
00191 Dependencies createDependencies( const zypp::parser::xmlstore::XMLResObjectData & parsed, const Resolvable::Kind my_kind ) const;
00192
00193 Capability createCapability(const XMLDependency & dep, const Resolvable::Kind & my_kind) const;
00194
00195 private:
00196 class Private;
00197 Private *d;
00198 };
00199
00201
00202 std::ostream & operator<<( std::ostream & str, const XMLFilesBackend & obj );
00204 }
00207 }
00209 #endif // DEVEL_DEVEL_DMACVICAR_SQLITEBACKEND_H