#include "AliCDBId.h"
#include <Riostream.h>
#include <TObjArray.h>
#include <TObjString.h>
using std::endl;
using std::cout;
ClassImp(AliCDBId)
AliCDBId::AliCDBId():
fPath(),
fRunRange(-1,-1),
fVersion(-1),
fSubVersion(-1),
fLastStorage("new")
{
}
AliCDBId::AliCDBId(const AliCDBId& other):
TObject(),
fPath(other.fPath),
fRunRange(other.fRunRange),
fVersion(other.fVersion),
fSubVersion(other.fSubVersion),
fLastStorage(other.fLastStorage)
{
}
AliCDBId::AliCDBId(const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
Int_t version, Int_t subVersion):
fPath(path),
fRunRange(firstRun, lastRun),
fVersion(version),
fSubVersion(subVersion),
fLastStorage("new")
{
}
AliCDBId::AliCDBId(const AliCDBPath& path, const AliCDBRunRange& runRange,
Int_t version, Int_t subVersion):
fPath(path),
fRunRange(runRange),
fVersion(version),
fSubVersion(subVersion),
fLastStorage("new")
{
}
AliCDBId* AliCDBId::MakeFromString(const TString& idString)
{
AliCDBId* id = new AliCDBId("a/b/c",-1,-1,-1,-1);
TObjArray* arr1 = idString.Tokenize(';');
TIter iter1(arr1);
TObjString *objStr1 = 0;
while((objStr1 = dynamic_cast<TObjString*>(iter1.Next()))) {
TString buff(objStr1->GetName());
if(buff.Contains("path:")) {
TString path(buff(buff.First('\"')+1, buff.Length()-buff.First('\"')-2));
id->SetPath(path.Data());
} else if (buff.Contains("run range:")) {
TString firstRunStr(buff(buff.Index('[')+1, buff.Index(',')-buff.Index('[')-1));
TString lastRunStr(buff(buff.Index(',')+1, buff.Index(']')-buff.Index(',')-1));
id->SetRunRange(firstRunStr.Atoi(), lastRunStr.Atoi());
} else if (buff.Contains("version:")) {
if (buff.Contains("_s")) {
TString versStr(buff(buff.Last('v')+1, buff.Index('_')-buff.Last('v')-1));
TString subVersStr(buff(buff.Last('s')+1, buff.Length()-buff.Last('s')-1));
id->SetVersion(versStr.Atoi());
id->SetSubVersion(subVersStr.Atoi());
} else {
TString versStr(buff(buff.Last('v')+1, buff.Length()-buff.Last('v')-1));
id->SetVersion(versStr.Atoi());
}
}
}
delete arr1;
return id;
}
AliCDBId::~AliCDBId() {
}
Bool_t AliCDBId::IsValid() const {
if (!(fPath.IsValid() && fRunRange.IsValid())) {
return kFALSE;
}
return !(!HasVersion() && HasSubVersion());
}
Bool_t AliCDBId::IsEqual(const TObject* obj) const {
if (this == obj) {
return kTRUE;
}
if (AliCDBId::Class() != obj->IsA()) {
return kFALSE;
}
AliCDBId* other = (AliCDBId*) obj;
return fPath.GetPath() == other->GetPath() && fRunRange.IsEqual(&other->GetAliCDBRunRange()) &&
fVersion == other->GetVersion() && fSubVersion == other->GetSubVersion();
}
TString AliCDBId::ToString() const {
TString result = Form("path: \"%s\"; run range: [%d,%d]",
GetPath().Data(), GetFirstRun(), GetLastRun());
if(GetVersion() >= 0) result += Form("; version: v%d", GetVersion());
if(GetSubVersion() >= 0) result += Form("_s%d", GetSubVersion());
return result;
}
void AliCDBId::Print(Option_t* ) const {
cout << ToString().Data() << endl;
}
Int_t AliCDBId::Compare(const TObject* obj) const
{
AliCDBId * o2 = (AliCDBId*)obj;
return TString(this->GetPath()).CompareTo((o2->GetPath()));
}
Bool_t AliCDBId::IsSortable() const {
return kTRUE;
}