Go to the documentation of this file.00001 #ifndef INCLUDE_ORA_MAPPINGDATABASE_H
00002 #define INCLUDE_ORA_MAPPINGDATABASE_H
00003
00004 #include "Sequences.h"
00005
00006 #include <string>
00007 #include <map>
00008 #include <vector>
00009 #include <set>
00010
00011 namespace Reflex{
00012 class Type;
00013 }
00014
00015 namespace ora {
00016
00017 class IDatabaseSchema;
00018 class MappingTree;
00019 class MappingElement;
00020 class MappingRawData;
00021 class MappingRawElement;
00022
00027 class MappingDatabase {
00028
00029 public:
00030
00031 static std::string versionOfClass( const Reflex::Type& dictionary );
00032 public:
00034 explicit MappingDatabase( IDatabaseSchema& schema );
00035
00037 ~MappingDatabase();
00038
00039 void setUp();
00040
00041 std::string newMappingVersionForContainer( const std::string& className );
00042
00043 std::string newMappingVersionForDependentClass( const std::string& containerName, const std::string& className );
00044
00045 bool getMappingByVersion( const std::string& version, MappingTree& destination );
00046
00047 void removeMapping( const std::string& version );
00048
00049 bool getMappingForContainer( const Reflex::Type& containerClass, int containerId, MappingTree& destination );
00050
00051 bool getBaseMappingForContainer( const std::string& className, int containerId, MappingTree& destination );
00052
00053 bool getDependentMappingsForContainer( int containerId, std::vector<MappingElement>& destination );
00054
00055 bool getDependentClassesForContainer( int containerId, std::set<std::string>& list );
00056
00057 bool getClassVersionListForMappingVersion( const std::string& mappingVersion, std::set<std::string>& destination );
00058
00059 bool getClassVersionListForContainer( int containerId, std::map<std::string,std::string>& versionMap );
00060
00061 void insertClassVersion( const Reflex::Type& dictionaryEntry, int dependencyIndex, int containerId, const std::string& mappingVersion, bool asBase=false );
00062
00063 void insertClassVersion( const std::string& className, const std::string& classVersion, int dependencyIndex, int containerId, const std::string& mappingVersion, bool asBase=false );
00064
00065 void setMappingVersionForClass( const Reflex::Type& dictionaryEntry, int containerId, const std::string& mappingVersion , bool dependency=false);
00066
00067 void storeMapping( const MappingTree& mappingStructure );
00068
00069 bool getMappingVersionsForContainer( int containerId, std::set<std::string>& versionList );
00070
00071 const std::set<std::string>& versions();
00072
00073 void clear();
00074
00075 private:
00076 void buildElement( MappingElement& parentElement, const std::string& scopeName,
00077 std::map<std::string,std::vector<MappingRawElement> >& innerElements );
00078 void unfoldElement( const MappingElement& element, MappingRawData& destination );
00079
00080 private:
00081
00083 IDatabaseSchema& m_schema;
00084 NamedSequence m_mappingSequence;
00085 std::set<std::string> m_versions;
00086 bool m_isLoaded;
00087 bool m_writingEnabled;
00088
00089 };
00090
00091 }
00092
00093 #endif