Modified classes for ODCB access in AliReconstruction, and the file
[u/mrichter/AliRoot.git] / STEER / AliCDBManager.h
1 #ifndef ALI_CDB_MANAGER_H
2 #define ALI_CDB_MANAGER_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /////////////////////////////////////////////////////////////////////
8 //                                                                 //
9 //  class AliCDBManager                                            //
10 //                                                                 //
11 /////////////////////////////////////////////////////////////////////
12
13 #include <TObject.h>
14 #include <TList.h>
15 #include <TMap.h>
16
17 class AliCDBEntry;
18 class AliCDBId;
19 class AliCDBPath;
20 class AliCDBRunRange;
21 class AliCDBMetaData;
22 class AliCDBStorage;
23 class AliCDBStorageFactory;
24 class AliCDBParam;
25
26 class AliCDBManager: public TObject {
27
28  public:
29         enum DataType {kCondition=0, kReference, kPrivate};
30
31         void RegisterFactory(AliCDBStorageFactory* factory);
32
33         Bool_t HasStorage(const char* dbString) const;
34
35         AliCDBParam* CreateParameter(const char* dbString) const;
36         AliCDBParam* GetCondParam() const {return fCondParam;}
37         AliCDBParam* GetRefParam() const {return fRefParam;}
38         static const char* GetDataTypeName(DataType type);
39
40         AliCDBStorage* GetStorage(const char* dbString);
41         AliCDBStorage* GetStorage(const AliCDBParam* param);
42
43         TList* GetActiveStorages();
44
45         void SetDefaultStorage(const char* dbString);
46         void SetDefaultStorage(const AliCDBParam* param);
47         void SetDefaultStorage(AliCDBStorage *storage);
48         
49         Bool_t IsDefaultStorageSet() const {return fDefaultStorage != 0;}
50         AliCDBStorage* GetDefaultStorage() const {return fDefaultStorage;}
51         void UnsetDefaultStorage() {fDefaultStorage = 0x0;}
52
53         void SetSpecificStorage(const char* calibType, const char* dbString);
54         void SetSpecificStorage(const char* calibType, AliCDBParam* param);
55
56         AliCDBStorage* GetSpecificStorage(const char* calibType);
57
58         void SetDrain(const char* dbString);
59         void SetDrain(const AliCDBParam* param);
60         void SetDrain(AliCDBStorage *storage);
61
62         Bool_t IsDrainSet() const {return fDrainStorage != 0;}
63
64         Bool_t Drain(AliCDBEntry* entry);
65
66         void UnsetDrain(){fDrainStorage = 0x0;}
67
68         AliCDBEntry* Get(const AliCDBId& query);
69         AliCDBEntry* Get(const AliCDBPath& path, Int_t runNumber=-1,
70                                 Int_t version = -1, Int_t subVersion = -1);
71         AliCDBEntry* Get(const AliCDBPath& path, const AliCDBRunRange& runRange,
72                                  Int_t version = -1, Int_t subVersion = -1);
73
74         TList* GetAll(const AliCDBId& query);
75         TList* GetAll(const AliCDBPath& path, Int_t runNumber=-1,
76                                 Int_t version = -1, Int_t subVersion = -1);
77         TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange,
78                                  Int_t version = -1, Int_t subVersion = -1); 
79
80         Bool_t Put(TObject* object, AliCDBId& id,
81                         AliCDBMetaData* metaData, DataType type=kPrivate);
82         Bool_t Put(AliCDBEntry* entry, DataType type=kPrivate);
83
84         void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;}
85         Bool_t GetCacheFlag() const {return fCache;}
86
87         void SetRun(Int_t run);
88         Int_t GetRun() const {return fRun;}
89
90         // AliCDBEntry* Get(const char* path);
91
92         void DestroyActiveStorages();
93         void DestroyActiveStorage(AliCDBStorage* storage);
94
95         void QueryCDB();
96
97         void Print(Option_t* option="") const;
98
99         static void Destroy();
100         ~AliCDBManager();
101
102         void ClearCache();
103
104         static AliCDBManager* Instance(); 
105
106  private:
107
108         static TString fgkCondUri;      // URI of the Conditions data base folder
109         static TString fgkRefUri;       // URI of the Reference data base folder
110         AliCDBParam* fCondParam;        // Conditions data storage parameters
111         AliCDBParam* fRefParam;         // Reference data storage parameters
112
113         AliCDBManager();
114         AliCDBManager(const AliCDBManager & source);
115         AliCDBManager & operator=(const AliCDBManager & source);
116
117         static AliCDBManager* fgInstance; // AliCDBManager instance
118         
119         AliCDBStorage* GetActiveStorage(const AliCDBParam* param);
120         void PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage);
121
122         void CacheEntry(const char* path, AliCDBEntry* entry);
123
124         AliCDBParam* SelectSpecificStorage(const TString& path);
125         
126
127         void Init();
128         
129         TList fFactories;               //! list of registered storage factories
130         TMap fActiveStorages;           //! list of active storages
131         TMap fSpecificStorages;         //! list of detector-specific storages
132
133         AliCDBStorage *fDefaultStorage; //! pointer to default storage
134         AliCDBStorage *fDrainStorage;   //! pointer to drain storage
135
136         TMap fEntryCache;       //! cache of the retrieved objects
137
138         Bool_t fCache;                  //! The cache flag
139         Int_t fRun;                     //! The run number
140
141         ClassDef(AliCDBManager, 0);
142 };
143
144
145 /////////////////////////////////////////////////////////////////////
146 //                                                                 //
147 //  class AliCDBStorageFactory                                     //
148 //                                                                 //
149 /////////////////////////////////////////////////////////////////////
150
151 class AliCDBParam;
152 class AliCDBStorageFactory: public TObject {
153         friend class AliCDBManager;
154         
155 public:
156         virtual ~AliCDBStorageFactory(){}
157         virtual Bool_t Validate(const char* dbString) = 0;
158         virtual AliCDBParam* CreateParameter(const char* dbString) = 0; 
159
160 protected:
161         virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;
162
163         ClassDef(AliCDBStorageFactory, 0);
164 };
165
166 /////////////////////////////////////////////////////////////////////
167 //                                                                 //
168 //  class AliCDBParam                                              //
169 //                                                                 //
170 /////////////////////////////////////////////////////////////////////
171
172 class AliCDBParam: public TObject {
173
174 public:
175
176         AliCDBParam();
177         virtual ~AliCDBParam();
178
179         const TString& GetType() const {return fType;};
180         const TString& GetURI() const {return fURI;};
181
182         virtual AliCDBParam* CloneParam() const = 0;
183
184 protected:
185
186         void SetType(const char* type) {fType = type;};
187         void SetURI(const char* uri) {fURI = uri;};
188
189 private:
190
191         TString fType; //! CDB type
192         TString fURI;  //! CDB URI
193
194         ClassDef(AliCDBParam, 0);
195 };
196
197 #endif