]>
Commit | Line | Data |
---|---|---|
9e1ceb13 | 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 | //_____________________________________________________________________________ | |
e8d02863 | 37 | AliCDBPath::AliCDBPath() : |
fe12e09c | 38 | TObject(), |
39 | fPath(""), | |
40 | fLevel0(""), | |
41 | fLevel1(""), | |
42 | fLevel2(""), | |
43 | fIsValid(kTRUE), | |
44 | fIsWildcard(kFALSE) | |
e8d02863 | 45 | { |
9e1ceb13 | 46 | // default constructor |
47 | ||
48 | } | |
49 | ||
50 | //_____________________________________________________________________________ | |
51 | AliCDBPath::AliCDBPath(const AliCDBPath& other): | |
fe12e09c | 52 | TObject(other), |
53 | fPath(other.fPath), | |
54 | fLevel0(""), | |
55 | fLevel1(""), | |
56 | fLevel2(""), | |
57 | fIsValid(other.fIsValid), | |
58 | fIsWildcard(other.fIsWildcard) | |
9e1ceb13 | 59 | { |
60 | // constructor | |
61 | Init(); | |
62 | InitPath(); | |
63 | ||
64 | } | |
65 | ||
66 | //_____________________________________________________________________________ | |
67 | AliCDBPath::AliCDBPath(const char* level0, const char* level1, | |
68 | const char* level2): | |
fe12e09c | 69 | TObject(), |
70 | fPath(""), | |
71 | fLevel0(level0), | |
72 | fLevel1(level1), | |
73 | fLevel2(level2), | |
74 | fIsValid(kTRUE), | |
75 | fIsWildcard(kFALSE) | |
9e1ceb13 | 76 | { |
77 | // constructor | |
78 | ||
79 | fPath += level0; | |
80 | fPath += '/'; | |
81 | fPath += level1; | |
82 | fPath += '/'; | |
83 | fPath += level2; | |
84 | ||
85 | if ((IsWord(fLevel0) || fLevel0 == "*") | |
86 | && (IsWord(fLevel1) || fLevel1 == "*") | |
87 | && (IsWord(fLevel2) || fLevel2 == "*")) { | |
88 | ||
89 | fIsValid = kTRUE; | |
90 | } else { | |
91 | fIsValid = kFALSE; | |
92 | AliError(Form("Invalid AliCDBPath <%s/%s/%s>!", | |
93 | level0, level1, level2)); | |
94 | } | |
95 | ||
96 | Init(); | |
97 | } | |
98 | ||
99 | //_____________________________________________________________________________ | |
100 | AliCDBPath::AliCDBPath(const char* path): | |
fe12e09c | 101 | TObject(), |
102 | fPath(path), | |
103 | fLevel0(""), | |
104 | fLevel1(""), | |
105 | fLevel2(""), | |
106 | fIsValid(kTRUE), | |
107 | fIsWildcard(kFALSE) | |
9e1ceb13 | 108 | { |
109 | // constructor | |
110 | ||
111 | Init(); | |
112 | InitPath(); | |
113 | } | |
114 | ||
115 | //_____________________________________________________________________________ | |
116 | AliCDBPath::AliCDBPath(const TString& path): | |
fe12e09c | 117 | TObject(), |
118 | fPath(path), | |
119 | fLevel0(""), | |
120 | fLevel1(""), | |
121 | fLevel2(""), | |
122 | fIsValid(kTRUE), | |
123 | fIsWildcard(kFALSE) | |
9e1ceb13 | 124 | { |
125 | Init(); | |
126 | InitPath(); | |
127 | } | |
128 | ||
129 | //_____________________________________________________________________________ | |
130 | void AliCDBPath::InitPath() { | |
131 | // sets fLevel0, fLevel1, fLevel2, validity flagss from fPath | |
132 | ||
133 | TSubString strippedString = fPath.Strip(TString::kBoth); | |
134 | TString aString(strippedString); | |
135 | strippedString = aString.Strip(TString::kBoth, '/'); | |
136 | ||
e8d02863 | 137 | TObjArray* anArray = TString(strippedString).Tokenize("/"); |
9e1ceb13 | 138 | Int_t paramCount = anArray->GetEntriesFast(); |
139 | ||
140 | if (paramCount == 1) { | |
141 | if (fPath == "*") { | |
142 | fLevel0 = "*"; | |
143 | fLevel1 = "*"; | |
144 | fLevel2 = "*"; | |
145 | ||
146 | fIsValid = kTRUE; | |
147 | } else { | |
148 | fIsValid = kFALSE; | |
149 | } | |
150 | ||
151 | } else if (paramCount == 2) { | |
152 | fLevel0 = ((TObjString*) anArray->At(0))->GetString(); | |
27ce71c7 | 153 | TString bString = ((TObjString*) anArray->At(1))->GetString(); |
9e1ceb13 | 154 | |
27ce71c7 | 155 | if (IsWord(fLevel0) && bString == "*") { |
9e1ceb13 | 156 | fLevel1 = "*"; |
157 | fLevel2 = "*"; | |
158 | ||
159 | fIsValid = kTRUE; | |
160 | ||
161 | } else { | |
162 | fIsValid = kFALSE; | |
163 | } | |
164 | ||
165 | } else if (paramCount == 3) { | |
166 | fLevel0 = ((TObjString*) anArray->At(0))->GetString(); | |
167 | fLevel1 = ((TObjString*) anArray->At(1))->GetString(); | |
168 | fLevel2 = ((TObjString*) anArray->At(2))->GetString(); | |
169 | ||
170 | if ((IsWord(fLevel0) || fLevel0 == "*") | |
171 | && (IsWord(fLevel1) || fLevel1 == "*") | |
172 | && (IsWord(fLevel2) || fLevel2 == "*")) { | |
173 | ||
174 | fIsValid = kTRUE; | |
175 | } else { | |
176 | fIsValid = kFALSE; | |
177 | } | |
178 | ||
179 | } else { | |
180 | fIsValid = kFALSE; | |
181 | ||
182 | } | |
183 | ||
184 | if (!fIsValid) { | |
185 | AliInfo(Form("Invalid AliCDBPath <%s>!", fPath.Data())); | |
8e245d15 | 186 | } else { |
187 | fPath = Form("%s/%s/%s", fLevel0.Data(), fLevel1.Data(), fLevel2.Data()); | |
9e1ceb13 | 188 | } |
189 | ||
190 | delete anArray; | |
8e245d15 | 191 | |
9e1ceb13 | 192 | Init(); |
193 | } | |
194 | ||
195 | //_____________________________________________________________________________ | |
196 | AliCDBPath::~AliCDBPath() { | |
197 | // destructor | |
198 | ||
199 | } | |
200 | ||
201 | //_____________________________________________________________________________ | |
202 | Bool_t AliCDBPath::IsWord(const TString& str) { | |
203 | // check if string is a word | |
204 | ||
a00e23f6 | 205 | TRegexp pattern("^[a-zA-Z0-9_.]+$"); |
9e1ceb13 | 206 | |
207 | return str.Contains(pattern); | |
208 | } | |
209 | ||
210 | //_____________________________________________________________________________ | |
211 | void AliCDBPath::Init() { | |
212 | // set fIsWildcard flag | |
213 | ||
214 | fIsWildcard = fPath.MaybeWildcard(); | |
215 | } | |
216 | ||
217 | //_____________________________________________________________________________ | |
218 | Bool_t AliCDBPath::Level0Comprises(const TString& str) const { | |
219 | // check if Level0 is wildcard or is equal to str | |
220 | ||
221 | if (fLevel0 == "*") { | |
222 | return kTRUE; | |
223 | } | |
224 | ||
225 | return fLevel0 == str; | |
226 | } | |
227 | ||
228 | //_____________________________________________________________________________ | |
229 | Bool_t AliCDBPath::Level1Comprises(const TString& str) const { | |
230 | // check if Level1 is wildcard or is equal to str | |
231 | ||
232 | if (fLevel1 == "*") { | |
233 | return kTRUE; | |
234 | } | |
235 | ||
236 | return fLevel1 == str; | |
237 | } | |
238 | ||
239 | //_____________________________________________________________________________ | |
240 | Bool_t AliCDBPath::Level2Comprises(const TString& str) const { | |
241 | // check if Level2 is wildcard or is equal to str | |
242 | ||
243 | if (fLevel2 == "*") { | |
244 | return kTRUE; | |
245 | } | |
246 | ||
247 | return fLevel2 == str; | |
248 | } | |
249 | ||
250 | //_____________________________________________________________________________ | |
251 | Bool_t AliCDBPath::Comprises(const AliCDBPath& other) const { | |
252 | // check if path is wildcard and comprises other | |
253 | ||
4667c116 | 254 | return Level0Comprises(other.fLevel0) |
9e1ceb13 | 255 | && Level1Comprises(other.fLevel1) |
256 | && Level2Comprises(other.fLevel2); | |
257 | } | |
4667c116 | 258 | |
259 | //_____________________________________________________________________________ | |
260 | const char* AliCDBPath::GetLevel(Int_t i) const { | |
261 | // return level i of the path | |
262 | ||
263 | switch (i) { | |
264 | case 0: | |
265 | return fLevel0.Data(); | |
266 | break; | |
267 | case 1: | |
268 | return fLevel1.Data(); | |
269 | break; | |
270 | case 2: | |
271 | return fLevel2.Data(); | |
272 | break; | |
273 | default: | |
274 | return 0; | |
275 | } | |
276 | ||
277 | } |