Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TDataSetManagerAliEn.h
Go to the documentation of this file.
1 // @(#)root/proof:$Id: 511148a2a899e02c8f5b86a7d87caee2e5979f9d $
2 // Author: Dario Berzano, 26.11.12
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TDataSetManagerAliEn
13 #define ROOT_TDataSetManagerAliEn
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TDataSetManagerAliEn //
18 // //
19 // Implementation of TDataSetManager dynamically creating datasets //
20 // by querying the AliEn file catalog. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 #include "TDataSetManager.h"
25 
26 #include "TDataSetManagerFile.h"
27 
28 #include "TFileStager.h"
29 #include "TPRegexp.h"
30 #include "TObjString.h"
31 #include "TObjArray.h"
32 #include "TFileCollection.h"
33 #include "TFileInfo.h"
34 #include "TGridResult.h"
35 #include "TGrid.h"
36 #include "THashList.h"
37 #include "TSystem.h"
38 
39 typedef enum { kDataRemote, kDataCache, kDataLocal } EDataMode;
40 
41 class TAliEnFind : public TObject {
42 
43  private:
44 
45  TString fBasePath;
46  TString fFileName;
47  TString fTreeName;
48  TString fRegexpRaw;
49  TString fAnchor;
50  TString fQuery;
51  Bool_t fArchSubst;
52  TPMERegexp *fRegexp;
53  TString fSearchId;
54  TGridResult *fGridResult;
55 
56  inline virtual void InvalidateSearchId();
57  inline virtual void InvalidateGridResult();
58 
59  public:
60 
61  TAliEnFind(const TString &basePath = "", const TString &fileName = "",
62  const TString &anchor = "", const Bool_t archSubst = kFALSE,
63  const TString &treeName = "", const TString &regexp = "",
64  const TString &query = "");
65 
66  TAliEnFind(const TAliEnFind &src);
67  TAliEnFind &operator=(const TAliEnFind &rhs);
68 
69  virtual ~TAliEnFind();
70 
71  virtual TGridResult *GetGridResult(Bool_t forceNewQuery = kFALSE);
72 
73  virtual const TString &GetBasePath() const { return fBasePath; };
74  virtual const TString &GetFileName() const { return fFileName; };
75  virtual const TString &GetAnchor() const { return fAnchor; };
76  virtual const TString &GetTreeName() const { return fTreeName; };
77  virtual Bool_t GetArchSubst() const { return fArchSubst; };
78  virtual const TPMERegexp *GetRegexp() const { return fRegexp; };
79 
80  virtual void SetBasePath(const char *basePath);
81  virtual void SetFileName(const char *fileName);
82  virtual void SetAnchor(const char *anchor);
83  virtual void SetTreeName(const char *fileName);
84  virtual void SetArchSubst(Bool_t archSubst);
85  virtual void SetRegexp(const char *regexp);
86 
87  virtual const char *GetSearchId();
88  virtual TFileCollection *GetCollection(Bool_t forceNewQuery = kFALSE);
89  virtual void Print(Option_t* opt = "") const;
90 
91  ClassDef(TAliEnFind, 0); // Interface to the AliEn find command
92 
93 };
94 
95 class TDataSetManagerAliEn : public TDataSetManager {
96 
97  protected:
98 
99  TPMERegexp *fUrlRe;
100  TString fUrlTpl;
101  TDataSetManagerFile *fCache;
102  Long_t fCacheExpire_s;
103  Bool_t fReadFromSE;
104 
105  const TUrl *kfNoopRedirUrl;
106  const TUrl *kfNoopUnknownUrl;
107  const TUrl *kfNoopNoneUrl;
108 
109  static std::vector<Int_t> *ExpandRunSpec(TString &runSpec);
110 
111  static Bool_t ParseCustomFindUri(TString &uri, TString &basePath,
112  TString &fileName, TString &anchor, TString &query, TString &treeName,
113  TString &regexp);
114 
115  static Bool_t ParseOfficialDataUri(TString &uri, Bool_t sim,
116  TString &period, Int_t &year, std::vector<Int_t> *&runList,
117  Bool_t &esd, Int_t &aodNum, TString &pass);
118 
119  static TUrl *AliEnWhereIs(TUrl *alienUrl, TString &closeSE,
120  Bool_t onlyFromCloseSE);
121 
122  virtual void Init(TString cacheDir, TString urlTpl,
123  ULong_t cacheExpire_s);
124 
125  virtual TList *GetFindCommandsFromUri(TString &uri, EDataMode &dataMode, Bool_t &forceUpdate);
126 
127  public:
128 
129  TDataSetManagerAliEn() : TDataSetManager(0, 0, 0) {}
130  TDataSetManagerAliEn(const char *cacheDir, const char *urlTpl,
131  ULong_t cacheExpire_s);
132  TDataSetManagerAliEn(const char *, const char *, const char *cfgStr);
133 
134  virtual ~TDataSetManagerAliEn();
135  virtual TFileCollection *GetDataSet(const char *uri, const char * = 0);
136  virtual Bool_t ExistsDataSet(const char *uri);
137 
138  // Not implemented functionalities
139  virtual Int_t RegisterDataSet(const char *, TFileCollection *,
140  const char *);
141  virtual TMap *GetDataSets(const char *, UInt_t);
142  virtual void ShowDataSets(const char * = "*", const char * = "");
143  virtual Bool_t RemoveDataSet(const char *uri);
144  virtual Int_t ScanDataSet(const char *, UInt_t);
145  virtual Int_t ShowCache(const char *);
146  virtual Int_t ClearCache(const char *);
147 
148  ClassDef(TDataSetManagerAliEn, 0) // Dataset to AliEn catalog interface
149 };
150 
151 #endif