ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliCDBId						   //
//  Identity of an object stored into a database:  		   //
//  path, run validity range, version, subVersion 		   //
//                                                                 //
/////////////////////////////////////////////////////////////////////

#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")
{
  // constructor

}

//_____________________________________________________________________________
AliCDBId::AliCDBId(const AliCDBId& other):
  TObject(),
  fPath(other.fPath), 
  fRunRange(other.fRunRange),
  fVersion(other.fVersion), 
  fSubVersion(other.fSubVersion),
  fLastStorage(other.fLastStorage)
{
  // constructor

}

//_____________________________________________________________________________
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")
{
  // constructor

} 

//_____________________________________________________________________________
AliCDBId::AliCDBId(const AliCDBPath& path, const AliCDBRunRange& runRange, 
    Int_t version, Int_t subVersion):
  fPath(path), 
  fRunRange(runRange), 
  fVersion(version),
  fSubVersion(subVersion),
  fLastStorage("new")
{
  // constructor

}

//_____________________________________________________________________________
AliCDBId* AliCDBId::MakeFromString(const TString& idString)
{
  // constructor from string 
  // string has the format as the output of AliCDBId::ToString:
  // path: "TRD/Calib/PIDLQ"; run range: [0,999999999]; version: v0_s0

  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() {
  //destructor

}

//_____________________________________________________________________________
Bool_t AliCDBId::IsValid() const {
  // validity check

  if (!(fPath.IsValid() && fRunRange.IsValid())) {
    return kFALSE;
  }

  // FALSE if doesn't have version but has subVersion
  return !(!HasVersion() && HasSubVersion());
}

//___________________________________________________________________________
Bool_t AliCDBId::IsEqual(const TObject* obj) const {
  // check if this id is equal to other id (compares path, run range, versions)

  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 {
  // returns a string of Id data

  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* /*option*/) const {
  // Prints ToString()

  cout << ToString().Data() << endl;

}



Int_t AliCDBId::Compare(const TObject* obj) const
{
  //
  // compare according y
  AliCDBId * o2 = (AliCDBId*)obj;
  return TString(this->GetPath()).CompareTo((o2->GetPath()));
  
}

Bool_t AliCDBId::IsSortable() const {
   return kTRUE;
} 
 AliCDBId.cxx:1
 AliCDBId.cxx:2
 AliCDBId.cxx:3
 AliCDBId.cxx:4
 AliCDBId.cxx:5
 AliCDBId.cxx:6
 AliCDBId.cxx:7
 AliCDBId.cxx:8
 AliCDBId.cxx:9
 AliCDBId.cxx:10
 AliCDBId.cxx:11
 AliCDBId.cxx:12
 AliCDBId.cxx:13
 AliCDBId.cxx:14
 AliCDBId.cxx:15
 AliCDBId.cxx:16
 AliCDBId.cxx:17
 AliCDBId.cxx:18
 AliCDBId.cxx:19
 AliCDBId.cxx:20
 AliCDBId.cxx:21
 AliCDBId.cxx:22
 AliCDBId.cxx:23
 AliCDBId.cxx:24
 AliCDBId.cxx:25
 AliCDBId.cxx:26
 AliCDBId.cxx:27
 AliCDBId.cxx:28
 AliCDBId.cxx:29
 AliCDBId.cxx:30
 AliCDBId.cxx:31
 AliCDBId.cxx:32
 AliCDBId.cxx:33
 AliCDBId.cxx:34
 AliCDBId.cxx:35
 AliCDBId.cxx:36
 AliCDBId.cxx:37
 AliCDBId.cxx:38
 AliCDBId.cxx:39
 AliCDBId.cxx:40
 AliCDBId.cxx:41
 AliCDBId.cxx:42
 AliCDBId.cxx:43
 AliCDBId.cxx:44
 AliCDBId.cxx:45
 AliCDBId.cxx:46
 AliCDBId.cxx:47
 AliCDBId.cxx:48
 AliCDBId.cxx:49
 AliCDBId.cxx:50
 AliCDBId.cxx:51
 AliCDBId.cxx:52
 AliCDBId.cxx:53
 AliCDBId.cxx:54
 AliCDBId.cxx:55
 AliCDBId.cxx:56
 AliCDBId.cxx:57
 AliCDBId.cxx:58
 AliCDBId.cxx:59
 AliCDBId.cxx:60
 AliCDBId.cxx:61
 AliCDBId.cxx:62
 AliCDBId.cxx:63
 AliCDBId.cxx:64
 AliCDBId.cxx:65
 AliCDBId.cxx:66
 AliCDBId.cxx:67
 AliCDBId.cxx:68
 AliCDBId.cxx:69
 AliCDBId.cxx:70
 AliCDBId.cxx:71
 AliCDBId.cxx:72
 AliCDBId.cxx:73
 AliCDBId.cxx:74
 AliCDBId.cxx:75
 AliCDBId.cxx:76
 AliCDBId.cxx:77
 AliCDBId.cxx:78
 AliCDBId.cxx:79
 AliCDBId.cxx:80
 AliCDBId.cxx:81
 AliCDBId.cxx:82
 AliCDBId.cxx:83
 AliCDBId.cxx:84
 AliCDBId.cxx:85
 AliCDBId.cxx:86
 AliCDBId.cxx:87
 AliCDBId.cxx:88
 AliCDBId.cxx:89
 AliCDBId.cxx:90
 AliCDBId.cxx:91
 AliCDBId.cxx:92
 AliCDBId.cxx:93
 AliCDBId.cxx:94
 AliCDBId.cxx:95
 AliCDBId.cxx:96
 AliCDBId.cxx:97
 AliCDBId.cxx:98
 AliCDBId.cxx:99
 AliCDBId.cxx:100
 AliCDBId.cxx:101
 AliCDBId.cxx:102
 AliCDBId.cxx:103
 AliCDBId.cxx:104
 AliCDBId.cxx:105
 AliCDBId.cxx:106
 AliCDBId.cxx:107
 AliCDBId.cxx:108
 AliCDBId.cxx:109
 AliCDBId.cxx:110
 AliCDBId.cxx:111
 AliCDBId.cxx:112
 AliCDBId.cxx:113
 AliCDBId.cxx:114
 AliCDBId.cxx:115
 AliCDBId.cxx:116
 AliCDBId.cxx:117
 AliCDBId.cxx:118
 AliCDBId.cxx:119
 AliCDBId.cxx:120
 AliCDBId.cxx:121
 AliCDBId.cxx:122
 AliCDBId.cxx:123
 AliCDBId.cxx:124
 AliCDBId.cxx:125
 AliCDBId.cxx:126
 AliCDBId.cxx:127
 AliCDBId.cxx:128
 AliCDBId.cxx:129
 AliCDBId.cxx:130
 AliCDBId.cxx:131
 AliCDBId.cxx:132
 AliCDBId.cxx:133
 AliCDBId.cxx:134
 AliCDBId.cxx:135
 AliCDBId.cxx:136
 AliCDBId.cxx:137
 AliCDBId.cxx:138
 AliCDBId.cxx:139
 AliCDBId.cxx:140
 AliCDBId.cxx:141
 AliCDBId.cxx:142
 AliCDBId.cxx:143
 AliCDBId.cxx:144
 AliCDBId.cxx:145
 AliCDBId.cxx:146
 AliCDBId.cxx:147
 AliCDBId.cxx:148
 AliCDBId.cxx:149
 AliCDBId.cxx:150
 AliCDBId.cxx:151
 AliCDBId.cxx:152
 AliCDBId.cxx:153
 AliCDBId.cxx:154
 AliCDBId.cxx:155
 AliCDBId.cxx:156
 AliCDBId.cxx:157
 AliCDBId.cxx:158
 AliCDBId.cxx:159
 AliCDBId.cxx:160
 AliCDBId.cxx:161
 AliCDBId.cxx:162
 AliCDBId.cxx:163
 AliCDBId.cxx:164
 AliCDBId.cxx:165
 AliCDBId.cxx:166
 AliCDBId.cxx:167
 AliCDBId.cxx:168
 AliCDBId.cxx:169
 AliCDBId.cxx:170
 AliCDBId.cxx:171
 AliCDBId.cxx:172
 AliCDBId.cxx:173
 AliCDBId.cxx:174
 AliCDBId.cxx:175
 AliCDBId.cxx:176
 AliCDBId.cxx:177
 AliCDBId.cxx:178
 AliCDBId.cxx:179
 AliCDBId.cxx:180
 AliCDBId.cxx:181
 AliCDBId.cxx:182
 AliCDBId.cxx:183
 AliCDBId.cxx:184
 AliCDBId.cxx:185
 AliCDBId.cxx:186
 AliCDBId.cxx:187
 AliCDBId.cxx:188
 AliCDBId.cxx:189
 AliCDBId.cxx:190
 AliCDBId.cxx:191
 AliCDBId.cxx:192
 AliCDBId.cxx:193
 AliCDBId.cxx:194
 AliCDBId.cxx:195