00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef DBCNV_DBCONTAINERCONVERTER_H
00012 #define DBCNV_DBCONTAINERCONVERTER_H
00013
00014
00015
00019
00020 #include "DbGenericConverter.h"
00021
00022
00023 class IContainedObjectCreator;
00024
00048 class DbContainerConverter : public DbGenericConverter {
00050 friend CnvFactory<DbContainerConverter>;
00051 protected:
00053 void* m_factories;
00055 DbContainerConverter(const CLID& clid, IOODataBase* db, ISvcLocator* svc);
00057 virtual ~DbContainerConverter();
00059 virtual StatusCode doTransientUpdate( dbHandle<DbDefObject>& objH, DataObject* pObject);
00061 virtual StatusCode doPersistentUpdate( dbHandle<DbDefObject>& objH, const DataObject* pObject);
00063 ContainedObject* createContained(const CLID& clid);
00065 IContainedObjectFactory* locateCreator(const CLID& clid);
00067 IContainedObjectFactory* objCreator(const CLID& clid);
00069 StatusCode checkObject( ContainedObject* pObj, const CLID& clid );
00070 };
00071
00072 template <class T> class DbOOMsContainerConverter : public DbContainerConverter {
00073 friend DbOOMsCnvFactory< DbOOMsContainerConverter < T > >;
00074 public:
00075 DbOOMsContainerConverter(IOODataBase* db, ISvcLocator* svc)
00076 : DbContainerConverter(classID(), db, svc)
00077 {
00078 }
00079 virtual ~DbOOMsContainerConverter() {
00080 }
00081 virtual DataObject* createTransient() {
00082 return new T();
00083 }
00084 static const CLID& classID() {
00085 return T::classID();
00086 }
00087 };
00088
00098 #define _ImplementContainerConverters(Transient) \
00099 \
00100 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectVector < Transient > > > \
00101 s_##DbOOMs##Transient##VectorFactory; \
00102 const ICnvFactory& DbOOMs##Transient##VectorCnvFactory = \
00103 s_##DbOOMs##Transient##VectorFactory; \
00104 \
00105 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectList < Transient > > > \
00106 s_##DbOOMs##Transient##ListFactory; \
00107 const ICnvFactory& DbOOMs##Transient##ListCnvFactory = \
00108 s_##DbOOMs##Transient##ListFactory;
00109
00110 #define _ImplementNameSpaceContainerConverters(NameSpace,Transient) \
00111 \
00112 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectVector < NameSpace::Transient > > > \
00113 s_##DbOOMs##NameSpace##Transient##VectorFactory; \
00114 const ICnvFactory& DbOOMs##NameSpace##Transient##VectorCnvFactory = \
00115 s_##DbOOMs##NameSpace##Transient##VectorFactory; \
00116 \
00117 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectList < NameSpace::Transient > > > \
00118 s_##DbOOMs##NameSpace##Transient##ListFactory; \
00119 const ICnvFactory& DbOOMs##NameSpace##Transient##ListCnvFactory = \
00120 s_##DbOOMs##NameSpace##Transient##ListFactory;
00121
00122 #endif // DBCNV_DBCONTAINERCONVERTER_H