ROOT logo
#ifndef ALICDBGRID_H
#define ALICDBGRID_H

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

/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBGrid						   //
//  access class to a DataBase in an AliEn storage  		   //
//                                                                 //
/////////////////////////////////////////////////////////////////////

#include "AliCDBStorage.h"
#include "AliCDBManager.h"
#include "AliCDBMetaData.h"

class AliCDBGrid: public AliCDBStorage {
  friend class AliCDBGridFactory;

  public:

  virtual Bool_t IsReadOnly() const {return kFALSE;}
  virtual Bool_t HasSubVersion() const {return kFALSE;}
  virtual Bool_t Contains(const char* path) const;
  virtual Bool_t IdToFilename(const AliCDBId& id, TString& filename) const;
  virtual void SetRetry(Int_t nretry, Int_t initsec);
  virtual void SetMirrorSEs(const char* mirrors) {fMirrorSEs=mirrors;}
  virtual const char* GetMirrorSEs() const {return fMirrorSEs;}


  protected:

  virtual AliCDBEntry*	GetEntry(const AliCDBId& queryId);
  virtual AliCDBId*	GetEntryId(const AliCDBId& queryId);
  virtual TList* 		GetEntries(const AliCDBId& queryId);
  virtual Bool_t          PutEntry(AliCDBEntry* entry, const char* mirrors="");
  virtual TList* 		GetIdListFromFile(const char* fileName);

  private:

  AliCDBGrid(const char *gridUrl, const char *user, const char* dbFolder,
      const char *se, const char* cacheFolder, Bool_t operateDisconnected,
      Long64_t cacheSize, Long_t cleanupInterval);

  virtual ~AliCDBGrid();

  AliCDBGrid(const AliCDBGrid& db);
  AliCDBGrid& operator = (const AliCDBGrid& db);

  Bool_t FilenameToId(TString& filename, AliCDBId& id);

  Bool_t PrepareId(AliCDBId& id);
  AliCDBId* GetId(const TObjArray& validFileIds, const AliCDBId& query);
  AliCDBEntry* GetEntryFromFile(TString& filename, AliCDBId* dataId);
  Bool_t PutInCvmfs(TString &fullFilename, TFile *cdbFile) const;

  // TODO  use AliEnTag classes!
  Bool_t AddTag(TString& foldername, const char* tagname);
  Bool_t TagFileId(TString& filename, const AliCDBId* id);
  Bool_t TagFileMetaData(TString& filename, const AliCDBMetaData* md);
  Bool_t TagShortLived(TString& filename, Bool_t value);

  void MakeQueryFilter(Int_t firstRun, Int_t lastRun, const AliCDBMetaData* md, TString& result) const;

  virtual void QueryValidFiles();

  TString    fGridUrl;	 // Grid Url ("alien://aliendb4.cern.ch:9000")
  TString    fUser;	 // User
  TString    fDBFolder;    // path of the DB folder
  TString    fSE;	  	 // Storage Element
  TString    fMirrorSEs;	 // Mirror Storage Elements
  TString    fCacheFolder; // local cache folder
  Bool_t     fOperateDisconnected; // Operate disconnected flag
  Long64_t   fCacheSize;           // local cache size (in bytes)
  Long_t     fCleanupInterval;     // local cache cleanup interval

  ClassDef(AliCDBGrid, 0)      // access class to a DataBase in an AliEn storage
};

/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBGridFactory					   //
//                                                                 //
/////////////////////////////////////////////////////////////////////

class AliCDBGridFactory: public AliCDBStorageFactory {

  public:

    virtual Bool_t Validate(const char* gridString);
    virtual AliCDBParam* CreateParameter(const char* gridString);
    virtual ~AliCDBGridFactory(){}

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

    ClassDef(AliCDBGridFactory, 0);
};

/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBGridParam					   //
//                                                                 //
/////////////////////////////////////////////////////////////////////

class AliCDBGridParam: public AliCDBParam {

  public:
    AliCDBGridParam();
    AliCDBGridParam(const char* gridUrl, const char* user,
        const char* dbFolder, const char* se,
        const char* cacheFolder, Bool_t operateDisconnected,
        Long64_t cacheSize, Long_t cleanupInterval);

    virtual ~AliCDBGridParam();

    const TString& GridUrl() const {return fGridUrl;}
    const TString& GetUser() const {return fUser;}
    const TString& GetDBFolder() const {return fDBFolder;}
    const TString& GetSE() 	 const {return fSE;}
    const TString& GetCacheFolder() const {return fCacheFolder;}
    Bool_t  GetOperateDisconnected() const {return fOperateDisconnected;}
    Long64_t  GetCacheSize() const {return fCacheSize;}
    Long_t  GetCleanupInterval() const {return fCleanupInterval;}

    virtual AliCDBParam* CloneParam() const;

    virtual ULong_t Hash() const;
    virtual Bool_t IsEqual(const TObject* obj) const;

  private:
    TString  fGridUrl;     // Grid url "Host:port"
    TString  fUser;	      // User
    TString  fDBFolder;    // path of the DB folder
    TString  fSE;	      // Storage Element
    TString  fCacheFolder; // Cache folder
    Bool_t   fOperateDisconnected; // Operate disconnected flag
    Long64_t fCacheSize;           // local cache size (in bytes)
    Long_t   fCleanupInterval;     // local cache cleanup interval

    ClassDef(AliCDBGridParam, 0);
};


#endif
 AliCDBGrid.h:1
 AliCDBGrid.h:2
 AliCDBGrid.h:3
 AliCDBGrid.h:4
 AliCDBGrid.h:5
 AliCDBGrid.h:6
 AliCDBGrid.h:7
 AliCDBGrid.h:8
 AliCDBGrid.h:9
 AliCDBGrid.h:10
 AliCDBGrid.h:11
 AliCDBGrid.h:12
 AliCDBGrid.h:13
 AliCDBGrid.h:14
 AliCDBGrid.h:15
 AliCDBGrid.h:16
 AliCDBGrid.h:17
 AliCDBGrid.h:18
 AliCDBGrid.h:19
 AliCDBGrid.h:20
 AliCDBGrid.h:21
 AliCDBGrid.h:22
 AliCDBGrid.h:23
 AliCDBGrid.h:24
 AliCDBGrid.h:25
 AliCDBGrid.h:26
 AliCDBGrid.h:27
 AliCDBGrid.h:28
 AliCDBGrid.h:29
 AliCDBGrid.h:30
 AliCDBGrid.h:31
 AliCDBGrid.h:32
 AliCDBGrid.h:33
 AliCDBGrid.h:34
 AliCDBGrid.h:35
 AliCDBGrid.h:36
 AliCDBGrid.h:37
 AliCDBGrid.h:38
 AliCDBGrid.h:39
 AliCDBGrid.h:40
 AliCDBGrid.h:41
 AliCDBGrid.h:42
 AliCDBGrid.h:43
 AliCDBGrid.h:44
 AliCDBGrid.h:45
 AliCDBGrid.h:46
 AliCDBGrid.h:47
 AliCDBGrid.h:48
 AliCDBGrid.h:49
 AliCDBGrid.h:50
 AliCDBGrid.h:51
 AliCDBGrid.h:52
 AliCDBGrid.h:53
 AliCDBGrid.h:54
 AliCDBGrid.h:55
 AliCDBGrid.h:56
 AliCDBGrid.h:57
 AliCDBGrid.h:58
 AliCDBGrid.h:59
 AliCDBGrid.h:60
 AliCDBGrid.h:61
 AliCDBGrid.h:62
 AliCDBGrid.h:63
 AliCDBGrid.h:64
 AliCDBGrid.h:65
 AliCDBGrid.h:66
 AliCDBGrid.h:67
 AliCDBGrid.h:68
 AliCDBGrid.h:69
 AliCDBGrid.h:70
 AliCDBGrid.h:71
 AliCDBGrid.h:72
 AliCDBGrid.h:73
 AliCDBGrid.h:74
 AliCDBGrid.h:75
 AliCDBGrid.h:76
 AliCDBGrid.h:77
 AliCDBGrid.h:78
 AliCDBGrid.h:79
 AliCDBGrid.h:80
 AliCDBGrid.h:81
 AliCDBGrid.h:82
 AliCDBGrid.h:83
 AliCDBGrid.h:84
 AliCDBGrid.h:85
 AliCDBGrid.h:86
 AliCDBGrid.h:87
 AliCDBGrid.h:88
 AliCDBGrid.h:89
 AliCDBGrid.h:90
 AliCDBGrid.h:91
 AliCDBGrid.h:92
 AliCDBGrid.h:93
 AliCDBGrid.h:94
 AliCDBGrid.h:95
 AliCDBGrid.h:96
 AliCDBGrid.h:97
 AliCDBGrid.h:98
 AliCDBGrid.h:99
 AliCDBGrid.h:100
 AliCDBGrid.h:101
 AliCDBGrid.h:102
 AliCDBGrid.h:103
 AliCDBGrid.h:104
 AliCDBGrid.h:105
 AliCDBGrid.h:106
 AliCDBGrid.h:107
 AliCDBGrid.h:108
 AliCDBGrid.h:109
 AliCDBGrid.h:110
 AliCDBGrid.h:111
 AliCDBGrid.h:112
 AliCDBGrid.h:113
 AliCDBGrid.h:114
 AliCDBGrid.h:115
 AliCDBGrid.h:116
 AliCDBGrid.h:117
 AliCDBGrid.h:118
 AliCDBGrid.h:119
 AliCDBGrid.h:120
 AliCDBGrid.h:121
 AliCDBGrid.h:122
 AliCDBGrid.h:123
 AliCDBGrid.h:124
 AliCDBGrid.h:125
 AliCDBGrid.h:126
 AliCDBGrid.h:127
 AliCDBGrid.h:128
 AliCDBGrid.h:129
 AliCDBGrid.h:130
 AliCDBGrid.h:131
 AliCDBGrid.h:132
 AliCDBGrid.h:133
 AliCDBGrid.h:134
 AliCDBGrid.h:135
 AliCDBGrid.h:136
 AliCDBGrid.h:137
 AliCDBGrid.h:138
 AliCDBGrid.h:139
 AliCDBGrid.h:140
 AliCDBGrid.h:141
 AliCDBGrid.h:142
 AliCDBGrid.h:143
 AliCDBGrid.h:144
 AliCDBGrid.h:145
 AliCDBGrid.h:146