IODataManager.h
Go to the documentation of this file.00001 #ifndef GAUDIUTILS_IODATAMANAGER_H
00002 #define GAUDIUTILS_IODATAMANAGER_H
00003
00004
00005 #include <map>
00006
00007 #include "GaudiKernel/Service.h"
00008 #include "GaudiUtils/IIODataManager.h"
00009
00010
00011
00012
00013 namespace Gaudi {
00014
00015
00016 class IFileCatalog;
00017 class RawDataConnectionEntry;
00018
00025 class IODataManager : public extends1<Service, IIODataManager> {
00026 protected:
00027 typedef const std::string& CSTR;
00028 struct Entry {
00029 std::string type;
00030 IoType ioType;
00031 IDataConnection* connection;
00032 bool keepOpen;
00033 Entry(CSTR tech,bool k, IoType iot,IDataConnection* con)
00034 : type(tech), ioType(iot), connection(con), keepOpen(k) {
00035 }
00036 };
00037 typedef std::map<std::string,Entry*> ConnectionMap;
00038 typedef std::map<std::string, std::string> FidMap;
00039
00041 std::string m_catalogSvcName;
00043 int m_ageLimit;
00045 bool m_useGFAL;
00047 bool m_quarantine;
00048
00050 ConnectionMap m_connectionMap;
00052 SmartIF<IFileCatalog> m_catalog;
00054 FidMap m_fidMap;
00055 StatusCode connectDataIO(int typ, IoType rw, CSTR fn, CSTR technology, bool keep,Connection* con);
00056 StatusCode reconnect(Entry* e);
00057 StatusCode error(CSTR msg, bool rethrow);
00058 StatusCode establishConnection(Connection* con);
00059 public:
00060
00066 IODataManager(CSTR nam, ISvcLocator* loc);
00067
00069 virtual ~IODataManager() {}
00070
00072 virtual StatusCode initialize();
00073
00075 virtual StatusCode finalize();
00076
00078 virtual StatusCode connectRead(bool keep_open, Connection* ioDesc);
00080 virtual StatusCode connectWrite(Connection* con,IoType mode=Connection::CREATE,CSTR doctype="UNKNOWN");
00082 virtual StatusCode disconnect(Connection* ioDesc);
00084 virtual Connection* connection(const std::string& dsn) const;
00086 virtual Connections connections(const IInterface* owner) const;
00088 virtual StatusCode read(Connection* ioDesc, void* const data, size_t len);
00090 virtual StatusCode write(Connection* con, const void* data, int len);
00092 virtual long long int seek(Connection* ioDesc, long long int where, int origin);
00093 };
00094 }
00095 #endif // GAUDIUTILS_IODATAMANAGER_H