]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliCDBPath.cxx
New version of CDB storage framework (A.Colla)
[u/mrichter/AliRoot.git] / STEER / AliCDBPath.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /////////////////////////////////////////////////////////////////////
17 //                                                                 //
18 //  class AliCDBPath                                               //
19 //  Path string identifying the object:                            //
20 //  "level0/level1/level2"                                         //
21 //  (was: "Detector/DBType/DetSpecType")                           //
22 //  (example: "ZDC/Calib/Pedestals")                               //
23 //                                                                 //
24 /////////////////////////////////////////////////////////////////////
25
26 #include "AliCDBPath.h"
27
28 #include <TObjArray.h>
29 #include <TObjString.h>
30 #include <TRegexp.h>
31
32 #include "AliLog.h"
33
34 ClassImp(AliCDBPath)
35
36 //_____________________________________________________________________________
37 AliCDBPath::AliCDBPath() {
38 // default constructor
39
40 }
41
42 //_____________________________________________________________________________
43 AliCDBPath::AliCDBPath(const AliCDBPath& other):
44 TObject(),
45 fPath(other.fPath)
46 {
47 // constructor
48         Init();
49         InitPath();
50
51 }
52
53 //_____________________________________________________________________________
54 AliCDBPath::AliCDBPath(const char* level0, const char* level1,
55         const char* level2):
56 fLevel0(level0), 
57 fLevel1(level1), 
58 fLevel2(level2)
59 {
60 // constructor
61
62         fPath += level0;
63         fPath += '/';
64         fPath += level1;
65         fPath += '/';
66         fPath += level2;
67
68         if ((IsWord(fLevel0) || fLevel0 == "*")
69                 && (IsWord(fLevel1) || fLevel1 == "*")
70                 && (IsWord(fLevel2) || fLevel2 == "*")) {
71
72                 fIsValid = kTRUE;
73         } else {
74                 fIsValid = kFALSE;
75                 AliError(Form("Invalid AliCDBPath <%s/%s/%s>!", 
76                         level0, level1, level2));
77         }
78
79         Init();
80 }
81
82 //_____________________________________________________________________________
83 AliCDBPath::AliCDBPath(const char* path):
84 fPath(path)
85 {
86 // constructor
87
88         Init();
89         InitPath();     
90 }
91
92 //_____________________________________________________________________________
93 AliCDBPath::AliCDBPath(const TString& path):
94 fPath(path)
95 {
96         Init();
97         InitPath();
98 }
99
100 //_____________________________________________________________________________
101 void AliCDBPath::InitPath() {
102 // sets fLevel0, fLevel1, fLevel2, validity flagss from fPath
103
104         TSubString strippedString = fPath.Strip(TString::kBoth);
105         TString aString(strippedString);
106         strippedString = aString.Strip(TString::kBoth, '/');
107
108         TObjArray* anArray = TString(strippedString).Tokenize("/");     
109         Int_t paramCount = anArray->GetEntriesFast();
110         
111         if (paramCount == 1) {
112                 if (fPath == "*") {
113                         fLevel0 = "*";
114                         fLevel1 = "*";
115                         fLevel2 = "*";
116                         
117                         fIsValid = kTRUE;
118                 } else {
119                         fIsValid = kFALSE;
120                 }
121
122         } else if (paramCount == 2) {
123                 fLevel0 = ((TObjString*) anArray->At(0))->GetString();
124                 TString aString =  ((TObjString*) anArray->At(1))->GetString();
125
126                 if (IsWord(fLevel0) && aString == "*") {
127                         fLevel1 = "*";
128                         fLevel2 = "*";
129                 
130                         fIsValid = kTRUE;                       
131
132                 } else {
133                         fIsValid = kFALSE;
134                 }
135                 
136         } else if (paramCount == 3) {
137                 fLevel0 = ((TObjString*) anArray->At(0))->GetString();
138                 fLevel1 = ((TObjString*) anArray->At(1))->GetString();
139                 fLevel2 = ((TObjString*) anArray->At(2))->GetString();
140
141                 if ((IsWord(fLevel0) || fLevel0 == "*")
142                         && (IsWord(fLevel1) || fLevel1 == "*")
143                         && (IsWord(fLevel2) || fLevel2 == "*")) {
144                         
145                         fIsValid = kTRUE;
146                 } else {
147                         fIsValid = kFALSE;
148                 }
149
150         } else {
151                 fIsValid = kFALSE;
152
153         }
154         
155         if (!fIsValid) {
156                 AliInfo(Form("Invalid AliCDBPath <%s>!", fPath.Data()));
157         }
158         
159         delete anArray;
160
161         Init();
162 }
163
164 //_____________________________________________________________________________
165 AliCDBPath::~AliCDBPath() {
166 // destructor
167
168 }
169
170 //_____________________________________________________________________________
171 Bool_t AliCDBPath::IsWord(const TString& str) {
172 // check if string is a word
173
174         TRegexp pattern("^[a-zA-Z0-9_]+$");
175
176         return str.Contains(pattern);   
177 }
178
179 //_____________________________________________________________________________
180 void AliCDBPath::Init() {
181 // set fIsWildcard flag
182
183         fIsWildcard = fPath.MaybeWildcard();    
184 }
185
186 //_____________________________________________________________________________
187 Bool_t AliCDBPath::Level0Comprises(const TString& str) const {
188 // check if Level0 is wildcard or is equal to str
189         
190         if (fLevel0 == "*") {
191                 return kTRUE;
192         }
193
194         return fLevel0 == str;
195 }
196
197 //_____________________________________________________________________________
198 Bool_t AliCDBPath::Level1Comprises(const TString& str) const {
199 // check if Level1 is wildcard or is equal to str
200
201         if (fLevel1 == "*") {
202                 return kTRUE;
203         }
204
205         return fLevel1 == str;
206 }
207
208 //_____________________________________________________________________________
209 Bool_t AliCDBPath::Level2Comprises(const TString& str) const {
210 // check if Level2 is wildcard or is equal to str
211         
212         if (fLevel2 == "*") {
213                 return kTRUE;
214         }
215
216         return fLevel2 == str;
217 }
218
219 //_____________________________________________________________________________
220 Bool_t AliCDBPath::Comprises(const AliCDBPath& other) const {
221 // check if path is wildcard and comprises other
222
223         return Level0Comprises(other.fLevel0) 
224                 && Level1Comprises(other.fLevel1)
225                 && Level2Comprises(other.fLevel2);
226 }