ROOT logo
#ifndef ALI_CDB_MANAGER_H
#define ALI_CDB_MANAGER_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBManager                                            //
//                                                                 //
/////////////////////////////////////////////////////////////////////

#include <TObject.h>
#include <TList.h>
#include <TMap.h>
#include <TSystem.h>
#include <TFile.h>

class AliCDBEntry;
class AliCDBId;
class AliCDBPath;
class AliCDBRunRange;
class AliCDBMetaData;
class AliCDBStorage;
class AliCDBStorageFactory;
class AliCDBParam;

class AliCDBManager: public TObject {

  public:
    enum DataType {kCondition=0, kReference, kPrivate};

    void RegisterFactory(AliCDBStorageFactory* factory);

    Bool_t HasStorage(const char* dbString) const;

    AliCDBParam* CreateParameter(const char* dbString) const;
    AliCDBParam* GetCondParam() const {return fCondParam;}
    AliCDBParam* GetRefParam() const {return fRefParam;}
    static const char* GetDataTypeName(DataType type);

    AliCDBStorage* GetStorage(const char* dbString);

    TList* GetActiveStorages();

    const TMap* GetStorageMap() const {return fStorageMap;}
    const TList* GetRetrievedIds() const {return fIds;}

    void SetDefaultStorage(const char* dbString);
    void SetDefaultStorage(const AliCDBParam* param);
    void SetDefaultStorage(AliCDBStorage *storage);
    void SetDefaultStorage(const char* runType, const char* simType);
    void SetDefaultStorageFromRun(Int_t run);

    Bool_t IsDefaultStorageSet() const {return fDefaultStorage != 0;}
    AliCDBStorage* GetDefaultStorage() const {return fDefaultStorage;}
    void UnsetDefaultStorage();

    void SetSpecificStorage(const char* calibType, const char* dbString, Int_t version = -1, Int_t subVersion = -1);

    AliCDBStorage* GetSpecificStorage(const char* calibType);

    void SetDrain(const char* dbString);
    void SetDrain(const AliCDBParam* param);
    void SetDrain(AliCDBStorage *storage);
    void UnsetDrain(){fDrainStorage = 0x0;}
    Bool_t IsDrainSet() const {return fDrainStorage != 0;}
    Bool_t Drain(AliCDBEntry* entry);

    Bool_t SetOCDBUploadMode();
    void UnsetOCDBUploadMode() { fOCDBUploadMode=kFALSE; }
    Bool_t IsOCDBUploadMode() const { return fOCDBUploadMode; }

    AliCDBEntry* Get(const AliCDBId& query, Bool_t forceCaching=kFALSE);
    AliCDBEntry* Get(const AliCDBPath& path, Int_t runNumber=-1,
        Int_t version = -1, Int_t subVersion = -1);
    AliCDBEntry* Get(const AliCDBPath& path, const AliCDBRunRange& runRange,
        Int_t version = -1, Int_t subVersion = -1);
    AliCDBEntry* GetEntryFromSnapshot(const char* path);

    const char* GetURI(const char* path);				 

    TList* GetAll(const AliCDBId& query);
    TList* GetAll(const AliCDBPath& path, Int_t runNumber=-1,
        Int_t version = -1, Int_t subVersion = -1);
    TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange,
        Int_t version = -1, Int_t subVersion = -1); 

    Bool_t Put(TObject* object, const AliCDBId& id, AliCDBMetaData* metaData,
        const char* mirrors="", DataType type=kPrivate);
    Bool_t Put(AliCDBEntry* entry, const char* mirrors="", DataType type=kPrivate);

    void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;}
    Bool_t GetCacheFlag() const {return fCache;}

    ULong64_t SetLock(Bool_t lockFlag=kTRUE, ULong64_t key=0);
    Bool_t GetLock() const {return fLock;}

    void SetRaw(Bool_t rawFlag){fRaw=rawFlag;}
    Bool_t GetRaw() const {return fRaw;}

    void SetRun(Int_t run);
    Int_t GetRun() const {return fRun;}

    void SetMirrorSEs(const char* mirrors);
    const char* GetMirrorSEs() const;

    void DestroyActiveStorages();
    void DestroyActiveStorage(AliCDBStorage* storage);

    void QueryCDB();

    void Print(Option_t* option="") const;

    static void Destroy();
    ~AliCDBManager();

    void ClearCache();
    void UnloadFromCache(const char* path);
    const TMap* GetEntryCache() const {return &fEntryCache;}

    Bool_t IsShortLived(const char* path);

    static AliCDBManager* Instance(TMap *entryCache = NULL, Int_t run = -1);

    void Init();
    void InitFromCache(TMap *entryCache, Int_t run);
    Bool_t InitFromSnapshot(const char* snapshotFileName, Bool_t overwrite=kTRUE);
    Bool_t SetSnapshotMode(const char* snapshotFileName="OCDB.root");
    void UnsetSnapshotMode() {fSnapshotMode=kFALSE;}
    void DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys) const;
    void DumpToLightSnapshotFile(const char* lightSnapshotFileName) const;

    Int_t GetStartRunLHCPeriod();
    Int_t GetEndRunLHCPeriod();
    TString GetLHCPeriod();
    TString GetCvmfsOcdbTag() const {return fCvmfsOcdb;}

    Bool_t DiffObjects(const char *cdbFile1, const char *cdbFile2) const;
    void ExtractBaseFolder(TString& url); // remove everything but the url from OCDB path


  protected:

    static TString fgkCondUri;	// URI of the Conditions data base folder
    static TString fgkRefUri;	// URI of the Reference data base folder
    static TString fgkMCIdealStorage;	// URI of the MC-Ideal Conditions data base folder form MC data
    static TString fgkMCFullStorage;	// URI of the MC-Full Conditions data base folder form MC data
    static TString fgkMCResidualStorage;	// URI of the MC-Residual Conditions data base folder form MC data
    static TString fgkOCDBFolderXMLfile;	// alien path of the XML file for OCDB folder <--> Run range correspondance

    AliCDBManager() ; 
    AliCDBManager(const AliCDBManager & source);
    AliCDBManager & operator=(const AliCDBManager & source);

    static AliCDBManager* fgInstance; // AliCDBManager instance

    AliCDBStorage* GetStorage(const AliCDBParam* param);
    AliCDBStorage* GetActiveStorage(const AliCDBParam* param);
    void PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage);
    void SetSpecificStorage(const char* calibType, const AliCDBParam* param, Int_t version = -1, Int_t subVersion = -1);
    void AlienToCvmfsUri(TString& uriString) const;
    void ValidateCvmfsCase() const;
    void GetLHCPeriodAgainstAlienFile(Int_t run, TString& lhcPeriod, Int_t& startRun, Int_t& endRun);
    void GetLHCPeriodAgainstCvmfsFile(Int_t run, TString& lhcPeriod, Int_t& startRun, Int_t& endRun);

    void CacheEntry(const char* path, AliCDBEntry* entry);

    AliCDBParam* SelectSpecificStorage(const TString& path);

    AliCDBId* GetId(const AliCDBId& query);
    AliCDBId* GetId(const AliCDBPath& path, Int_t runNumber=-1,
        Int_t version = -1, Int_t subVersion = -1);
    AliCDBId* GetId(const AliCDBPath& path, const AliCDBRunRange& runRange,
        Int_t version = -1, Int_t subVersion = -1);


    //	void Init();
    void InitShortLived();
    //	void InitFromCache(TMap *entryCache, Int_t run);


    TList fFactories; 		//! list of registered storage factories
    TMap fActiveStorages;		//! list of active storages
    TMap fSpecificStorages;         //! list of detector-specific storages
    TMap fEntryCache;    	  	//! cache of the retrieved objects

    TList* fIds;           	//! List of the retrieved object Id's (to be streamed to file)
    TMap* fStorageMap;      //! list of storages (to be streamed to file)
    TList* fShortLived; 	//! List of short lived objects

    AliCDBStorage *fDefaultStorage;	//! pointer to default storage
    AliCDBStorage *fDrainStorage;	//! pointer to drain storage

    AliCDBParam* fCondParam; 	// Conditions data storage parameters
    AliCDBParam* fRefParam;		// Reference data storage parameters

    Int_t fRun;			//! The run number
    Bool_t fCache;			//! The cache flag
    Bool_t fLock; 	//! Lock flag, if ON default storage and run number cannot be reset

    Bool_t fSnapshotMode;           //! flag saying if we are in snapshot mode
    TFile *fSnapshotFile;
    Bool_t fOCDBUploadMode;         //! flag for uploads to Official CDBs (upload to cvmfs must follow upload to AliEn)

    Bool_t fRaw;   // flag to say whether we are in the raw case
    TString fCvmfsOcdb;       // set from $OCDB_PATH, points to a cvmfs AliRoot package
    Int_t fStartRunLHCPeriod; // 1st run of the LHC period set
    Int_t fEndRunLHCPeriod;   // last run of the LHC period set
    TString fLHCPeriod;       // LHC period alien folder

  private:
    ULong64_t fKey;  //! Key for locking/unlocking


    ClassDef(AliCDBManager, 0);
};


/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBStorageFactory                                     //
//                                                                 //
/////////////////////////////////////////////////////////////////////

class AliCDBParam;
class AliCDBStorageFactory: public TObject {
  friend class AliCDBManager;

  public:
  virtual ~AliCDBStorageFactory(){}
  virtual Bool_t Validate(const char* dbString) = 0;
  virtual AliCDBParam* CreateParameter(const char* dbString) = 0;	

  protected:
  virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;

  ClassDef(AliCDBStorageFactory, 0);
};

/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBParam                                              //
//                                                                 //
/////////////////////////////////////////////////////////////////////

class AliCDBParam: public TObject {

  public:

    AliCDBParam();
    virtual ~AliCDBParam();

    const TString& GetType() const {return fType;};
    const TString& GetURI() const {return fURI;};

    virtual AliCDBParam* CloneParam() const = 0;

  protected:

    void SetType(const char* type) {fType = type;};
    void SetURI(const char* uri) {fURI = uri;};

  private:

    TString fType; //! CDB type
    TString fURI;  //! CDB URI

    ClassDef(AliCDBParam, 0);
};

#endif
 AliCDBManager.h:1
 AliCDBManager.h:2
 AliCDBManager.h:3
 AliCDBManager.h:4
 AliCDBManager.h:5
 AliCDBManager.h:6
 AliCDBManager.h:7
 AliCDBManager.h:8
 AliCDBManager.h:9
 AliCDBManager.h:10
 AliCDBManager.h:11
 AliCDBManager.h:12
 AliCDBManager.h:13
 AliCDBManager.h:14
 AliCDBManager.h:15
 AliCDBManager.h:16
 AliCDBManager.h:17
 AliCDBManager.h:18
 AliCDBManager.h:19
 AliCDBManager.h:20
 AliCDBManager.h:21
 AliCDBManager.h:22
 AliCDBManager.h:23
 AliCDBManager.h:24
 AliCDBManager.h:25
 AliCDBManager.h:26
 AliCDBManager.h:27
 AliCDBManager.h:28
 AliCDBManager.h:29
 AliCDBManager.h:30
 AliCDBManager.h:31
 AliCDBManager.h:32
 AliCDBManager.h:33
 AliCDBManager.h:34
 AliCDBManager.h:35
 AliCDBManager.h:36
 AliCDBManager.h:37
 AliCDBManager.h:38
 AliCDBManager.h:39
 AliCDBManager.h:40
 AliCDBManager.h:41
 AliCDBManager.h:42
 AliCDBManager.h:43
 AliCDBManager.h:44
 AliCDBManager.h:45
 AliCDBManager.h:46
 AliCDBManager.h:47
 AliCDBManager.h:48
 AliCDBManager.h:49
 AliCDBManager.h:50
 AliCDBManager.h:51
 AliCDBManager.h:52
 AliCDBManager.h:53
 AliCDBManager.h:54
 AliCDBManager.h:55
 AliCDBManager.h:56
 AliCDBManager.h:57
 AliCDBManager.h:58
 AliCDBManager.h:59
 AliCDBManager.h:60
 AliCDBManager.h:61
 AliCDBManager.h:62
 AliCDBManager.h:63
 AliCDBManager.h:64
 AliCDBManager.h:65
 AliCDBManager.h:66
 AliCDBManager.h:67
 AliCDBManager.h:68
 AliCDBManager.h:69
 AliCDBManager.h:70
 AliCDBManager.h:71
 AliCDBManager.h:72
 AliCDBManager.h:73
 AliCDBManager.h:74
 AliCDBManager.h:75
 AliCDBManager.h:76
 AliCDBManager.h:77
 AliCDBManager.h:78
 AliCDBManager.h:79
 AliCDBManager.h:80
 AliCDBManager.h:81
 AliCDBManager.h:82
 AliCDBManager.h:83
 AliCDBManager.h:84
 AliCDBManager.h:85
 AliCDBManager.h:86
 AliCDBManager.h:87
 AliCDBManager.h:88
 AliCDBManager.h:89
 AliCDBManager.h:90
 AliCDBManager.h:91
 AliCDBManager.h:92
 AliCDBManager.h:93
 AliCDBManager.h:94
 AliCDBManager.h:95
 AliCDBManager.h:96
 AliCDBManager.h:97
 AliCDBManager.h:98
 AliCDBManager.h:99
 AliCDBManager.h:100
 AliCDBManager.h:101
 AliCDBManager.h:102
 AliCDBManager.h:103
 AliCDBManager.h:104
 AliCDBManager.h:105
 AliCDBManager.h:106
 AliCDBManager.h:107
 AliCDBManager.h:108
 AliCDBManager.h:109
 AliCDBManager.h:110
 AliCDBManager.h:111
 AliCDBManager.h:112
 AliCDBManager.h:113
 AliCDBManager.h:114
 AliCDBManager.h:115
 AliCDBManager.h:116
 AliCDBManager.h:117
 AliCDBManager.h:118
 AliCDBManager.h:119
 AliCDBManager.h:120
 AliCDBManager.h:121
 AliCDBManager.h:122
 AliCDBManager.h:123
 AliCDBManager.h:124
 AliCDBManager.h:125
 AliCDBManager.h:126
 AliCDBManager.h:127
 AliCDBManager.h:128
 AliCDBManager.h:129
 AliCDBManager.h:130
 AliCDBManager.h:131
 AliCDBManager.h:132
 AliCDBManager.h:133
 AliCDBManager.h:134
 AliCDBManager.h:135
 AliCDBManager.h:136
 AliCDBManager.h:137
 AliCDBManager.h:138
 AliCDBManager.h:139
 AliCDBManager.h:140
 AliCDBManager.h:141
 AliCDBManager.h:142
 AliCDBManager.h:143
 AliCDBManager.h:144
 AliCDBManager.h:145
 AliCDBManager.h:146
 AliCDBManager.h:147
 AliCDBManager.h:148
 AliCDBManager.h:149
 AliCDBManager.h:150
 AliCDBManager.h:151
 AliCDBManager.h:152
 AliCDBManager.h:153
 AliCDBManager.h:154
 AliCDBManager.h:155
 AliCDBManager.h:156
 AliCDBManager.h:157
 AliCDBManager.h:158
 AliCDBManager.h:159
 AliCDBManager.h:160
 AliCDBManager.h:161
 AliCDBManager.h:162
 AliCDBManager.h:163
 AliCDBManager.h:164
 AliCDBManager.h:165
 AliCDBManager.h:166
 AliCDBManager.h:167
 AliCDBManager.h:168
 AliCDBManager.h:169
 AliCDBManager.h:170
 AliCDBManager.h:171
 AliCDBManager.h:172
 AliCDBManager.h:173
 AliCDBManager.h:174
 AliCDBManager.h:175
 AliCDBManager.h:176
 AliCDBManager.h:177
 AliCDBManager.h:178
 AliCDBManager.h:179
 AliCDBManager.h:180
 AliCDBManager.h:181
 AliCDBManager.h:182
 AliCDBManager.h:183
 AliCDBManager.h:184
 AliCDBManager.h:185
 AliCDBManager.h:186
 AliCDBManager.h:187
 AliCDBManager.h:188
 AliCDBManager.h:189
 AliCDBManager.h:190
 AliCDBManager.h:191
 AliCDBManager.h:192
 AliCDBManager.h:193
 AliCDBManager.h:194
 AliCDBManager.h:195
 AliCDBManager.h:196
 AliCDBManager.h:197
 AliCDBManager.h:198
 AliCDBManager.h:199
 AliCDBManager.h:200
 AliCDBManager.h:201
 AliCDBManager.h:202
 AliCDBManager.h:203
 AliCDBManager.h:204
 AliCDBManager.h:205
 AliCDBManager.h:206
 AliCDBManager.h:207
 AliCDBManager.h:208
 AliCDBManager.h:209
 AliCDBManager.h:210
 AliCDBManager.h:211
 AliCDBManager.h:212
 AliCDBManager.h:213
 AliCDBManager.h:214
 AliCDBManager.h:215
 AliCDBManager.h:216
 AliCDBManager.h:217
 AliCDBManager.h:218
 AliCDBManager.h:219
 AliCDBManager.h:220
 AliCDBManager.h:221
 AliCDBManager.h:222
 AliCDBManager.h:223
 AliCDBManager.h:224
 AliCDBManager.h:225
 AliCDBManager.h:226
 AliCDBManager.h:227
 AliCDBManager.h:228
 AliCDBManager.h:229
 AliCDBManager.h:230
 AliCDBManager.h:231
 AliCDBManager.h:232
 AliCDBManager.h:233
 AliCDBManager.h:234
 AliCDBManager.h:235
 AliCDBManager.h:236
 AliCDBManager.h:237
 AliCDBManager.h:238
 AliCDBManager.h:239
 AliCDBManager.h:240
 AliCDBManager.h:241
 AliCDBManager.h:242
 AliCDBManager.h:243
 AliCDBManager.h:244
 AliCDBManager.h:245
 AliCDBManager.h:246
 AliCDBManager.h:247
 AliCDBManager.h:248
 AliCDBManager.h:249
 AliCDBManager.h:250
 AliCDBManager.h:251
 AliCDBManager.h:252
 AliCDBManager.h:253
 AliCDBManager.h:254
 AliCDBManager.h:255
 AliCDBManager.h:256
 AliCDBManager.h:257
 AliCDBManager.h:258
 AliCDBManager.h:259
 AliCDBManager.h:260
 AliCDBManager.h:261
 AliCDBManager.h:262
 AliCDBManager.h:263
 AliCDBManager.h:264
 AliCDBManager.h:265
 AliCDBManager.h:266
 AliCDBManager.h:267
 AliCDBManager.h:268
 AliCDBManager.h:269
 AliCDBManager.h:270
 AliCDBManager.h:271
 AliCDBManager.h:272