CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/CondCore/ORA/src/ContainerSchema.h

Go to the documentation of this file.
00001 #ifndef INCLUDE_ORA_CONTAINERSCHEMA_H
00002 #define INCLUDE_ORA_CONTAINERSCHEMA_H
00003 
00004 #include "MappingTree.h"
00005 #include "Sequences.h"
00006 // externals
00007 #include "Reflex/Type.h"
00008 
00009 namespace coral {
00010   class ISchema;
00011 }
00012 
00013 namespace ora {
00014 
00015   class DatabaseSession;
00016   class IBlobStreamingService;
00017   class IReferenceHandler;
00018 
00019   class ContainerSchema {
00020     public:
00021 
00022     ContainerSchema( int containerId,
00023                      const std::string& containerName,
00024                      const Reflex::Type& containerType,
00025                      DatabaseSession& session );
00026 
00027     ContainerSchema( int containerId,
00028                      const std::string& containerName,
00029                      const std::string& className,
00030                      DatabaseSession& session );
00031 
00032     ~ContainerSchema();
00033 
00034     void create();
00035 
00036     void drop();
00037 
00038     void evolve();
00039 
00040     void create( const Reflex::Type& dependentClass );
00041 
00042     void evolve( const Reflex::Type& dependentClass, MappingTree& baseMapping );
00043     
00044     const Reflex::Type& type();
00045 
00046     MappingTree& mapping( bool writeEnabled=false);
00047 
00048     bool extendIfRequired( const Reflex::Type& dependentClass );
00049     
00050     MappingElement& mappingForDependentClass( const Reflex::Type& dependentClass, bool writeEnabled=false );
00051 
00052     bool mappingForDependentClasses( std::vector<MappingElement>& destination );
00053 
00054     Sequences& containerSequences();
00055 
00056     IBlobStreamingService* blobStreamingService();
00057 
00058     IReferenceHandler* referenceHandler();
00059 
00060     int containerId();
00061 
00062     const std::string& containerName();
00063 
00064     const std::string& className();
00065 
00066     const std::string& mappingVersion();
00067 
00068     coral::ISchema& storageSchema();
00069 
00070     DatabaseSession& dbSession();
00071 
00072     private:
00073     void initClassDict();
00074     bool loadMappingForDependentClass( const Reflex::Type& dependentClass );
00075     void extend( const Reflex::Type& dependentClass );
00076     private:
00077 
00078     int m_containerId;
00079     std::string m_containerName;
00080     std::string m_className;
00081     Reflex::Type m_classDict;
00082     DatabaseSession& m_session;
00083     bool m_loaded;
00084     Sequences m_containerSchemaSequences;
00085     MappingTree m_mapping;
00086     std::map<std::string,MappingTree*> m_dependentMappings;
00087     
00088   };
00089 }
00090   
00091 #endif