]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliCDBMetaData.cxx
New version of CDB storage framework (A.Colla)
[u/mrichter/AliRoot.git] / STEER / AliCDBMetaData.cxx
index 998db568f897df3756f86a6e91f62d7edbf90368..a7004419434fefea4e3ab4d38f272db223641113 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id$ */
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-// Object meta data: full description of a run dependent database object     // 
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
-
-
-#include <TRegexp.h>
-#include <TObjArray.h>
-#include <TObjString.h>
-#include <TSystem.h>
+/////////////////////////////////////////////////////////////////////
+//                                                                 //
+//  class AliCDBMetaData                                          //
+//  Set of data describing the object                                     //
+//  but not used to identify the object                           //
+//                                                                 //
+/////////////////////////////////////////////////////////////////////
 
 #include "AliCDBMetaData.h"
 #include "AliLog.h"
 
+#include <TObjString.h>
 
 ClassImp(AliCDBMetaData)
 
-
 //_____________________________________________________________________________
-AliCDBMetaData::AliCDBMetaData() :
-  TObject(),
-  fName(""),
-  fFirstRun(-1),
-  fLastRun(-1),
-  fVersion(-1),
-  fPeriod(-1),
-  fFormat(""),
-  fResponsible("Duck, Donald"),
-  fExtraInfo("")
-{
+AliCDBMetaData::AliCDBMetaData() {
 // default constructor
-// the default values mean no selection
-  DecodeName();
-}
 
-//_____________________________________________________________________________
-AliCDBMetaData::AliCDBMetaData
-         (const char* name, Int_t firstRun, Int_t lastRun, Int_t period, 
-         const char* objFormat, const char* responsible, 
-         const char* extraInfo):
-  TObject(),
-  fName(name),
-  fFirstRun(firstRun),
-  fLastRun(lastRun),
-  fVersion(-1),
-  fPeriod(period),
-  fFormat(objFormat),
-  fResponsible(responsible),
-  fExtraInfo(extraInfo)
-{
-// constructor
-  DecodeName();
+       fProperties.SetOwner(1);
 }
 
 //_____________________________________________________________________________
-AliCDBMetaData::AliCDBMetaData(const AliCDBMetaData& entry) :
-  TObject(entry),
-  fName(entry.fName),
-  fFirstRun(entry.fFirstRun),
-  fLastRun(entry.fLastRun),
-  fVersion(entry.fVersion),
-  fPeriod(entry.fPeriod),
-  fFormat(entry.fFormat),
-  fResponsible(entry.fResponsible),
-  fExtraInfo(entry.fExtraInfo)
-{
-// copy constructor
-  DecodeName();
-}
+AliCDBMetaData::~AliCDBMetaData() {
+// destructor
 
-//_____________________________________________________________________________
-AliCDBMetaData& AliCDBMetaData::operator = (const AliCDBMetaData& entry)
-{
-// assignment operator
-  fName = entry.fName;
-  fFirstRun = entry.fFirstRun;
-  fLastRun = entry.fLastRun;
-  fVersion = entry.fVersion;
-  fPeriod=entry.fPeriod;
-  fFormat=entry.fFormat;
-  fResponsible=entry.fResponsible;
-  fExtraInfo=entry.fExtraInfo;
-  DecodeName();
-  return *this;
 }
 
 //_____________________________________________________________________________
-void AliCDBMetaData::EncodeName(){
-// Encode name from single elements ("Detector", "DBType", "DetSpecType" -> "Detector/DBType/DetSpecType")   
-   fName = fDetector+'/'+fDBType+'/'+fDetSpecType;
-   if(fDBType == "*" && fDetSpecType == "*") fName = fDetector+'/'+'*';
-   if(fDetector == "*" && fDBType == "*" && fDetSpecType == "*") fName = "*";
+void AliCDBMetaData::SetProperty(const char* property, TObject* object) {
+// add something to the list of properties
 
+       fProperties.Add(new TObjString(property), object);
 }
 
 //_____________________________________________________________________________
-void AliCDBMetaData::DecodeName(){
-// Decode name into single elements ("Detector/DBType/DetSpecType" -> "Detector", "DBType", "DetSpecType")   
-
- if(fName==""){fDetector=""; fDBType=""; fDetSpecType=""; return;}
-
- while(fName.EndsWith("/")) fName.Remove(fName.Last('/'));
- while(fName.BeginsWith("/")) fName.Remove(fName.First('/'),1);
- // fName= "fDetector/fDBType/fDetSpecType
- int nslashes=fName.CountChar('/');
- if(nslashes>2){AliError("Wrong format!\n");fDetector=""; fDBType=""; fDetSpecType="";}
-
- if(nslashes == 0){
-   if(fName == "*"){fDetector="*"; fDBType="*"; fDetSpecType="*";}
-   else{AliError("Wrong format!\n"); fDetector=""; fDBType=""; fDetSpecType="";}
- }
- if(nslashes == 1){
-   if(fName.EndsWith("*"))
-     {fDetector=fName(0, fName.Index('/')); fDBType="*"; fDetSpecType="*";}
-   else {AliError("Wrong format!\n"); fDetector=""; fDBType=""; fDetSpecType="";}
- }
-
- if(nslashes == 2){
-   int firstsl=fName.First('/'), lastsl=fName.Last('/'), lgth=fName.Length();
-   fDetector=fName(0, firstsl); 
-   fDBType=fName(firstsl+1, lastsl-(firstsl+1));
-   fDetSpecType=fName(lastsl+1, lgth-(lastsl+1)); 
- }
- EncodeName();
-}
+TObject* AliCDBMetaData::GetProperty(const char* property) const {
+// get a property specified by its name (property)
 
-//_____________________________________________________________________________
-Bool_t AliCDBMetaData::IsStrictlyValid(Int_t runNumber, AliCDBMetaData* metaData) const
-{
-// check if the object is valid for runNumber. TRUE if metaData version is equal to this's version 
-
-  if ((fFirstRun >= 0) && (runNumber < fFirstRun)) return kFALSE;
-  if ((fLastRun >= 0) && (runNumber > fLastRun)) return kFALSE;
-  if (metaData) {
-    if ((metaData->fVersion >= 0) && (metaData->fVersion != fVersion)) 
-      return kFALSE;
-  }
-  return kTRUE;
-}
-
-//_____________________________________________________________________________
-Bool_t AliCDBMetaData::IsValid(Int_t runNumber, AliCDBMetaData* metaData) const
-{
-// check if the object is valid for runNumber. TRUE if metaData version less or equal wrt to this's
-
-  if ((fFirstRun >= 0) && (runNumber < fFirstRun)) return kFALSE;
-  if ((fLastRun >= 0) && (runNumber > fLastRun)) return kFALSE;
-  if (metaData) {
-    if ((metaData->fVersion >= 0) && (metaData->fVersion < fVersion)) 
-      return kFALSE;
-  }
-  return kTRUE;
-}
-
-//_____________________________________________________________________________
-Int_t AliCDBMetaData::Compare(const TObject* object) const
-{
-// check whether this is preferred to object
-
-  if (!object || !object->InheritsFrom(AliCDBMetaData::Class())) return 1;
-  if (fVersion < ((AliCDBMetaData*)object)->GetVersion()) return -1;
-  if (fVersion > ((AliCDBMetaData*)object)->GetVersion()) return 1;
-  return 0;
+       return fProperties.GetValue(property);
 }
 
 //_____________________________________________________________________________
-Bool_t AliCDBMetaData::Matches(const char* name, Int_t runNumber) const
-{
-// check whether name and run number match with this meta data
-
-  if ((fFirstRun >= 0) && (runNumber < fFirstRun)) return kFALSE;
-  if ((fLastRun >= 0) && (runNumber > fLastRun)) return kFALSE;
-  if (!TString(name).Contains(TRegexp(fName))) return kFALSE;
-  return kTRUE;
+Bool_t AliCDBMetaData::RemoveProperty(const char* property) {
+// removes a property
+
+       TObjString objStrProperty(property);
+       TObjString* aKey = (TObjString*) fProperties.Remove(&objStrProperty);   
+
+       if (aKey) {
+               delete aKey;
+               return kTRUE;
+       } else {
+               return kFALSE;
+       }
 }
 
-
 //_____________________________________________________________________________
-Bool_t operator == (const AliCDBMetaData& entry1, const AliCDBMetaData& entry2)
-{
-// compare two DB entries
-
-  if (strcmp(entry1.GetName(), entry2.GetName()) != 0) return kFALSE;
-  if (entry1.GetFirstRun() != entry2.GetFirstRun()) return kFALSE;
-  if (entry1.GetLastRun() != entry2.GetLastRun()) return kFALSE;
-  if (entry1.GetVersion() != entry2.GetVersion()) return kFALSE;
-  return kTRUE;
+void AliCDBMetaData::PrintMetaData() {
+// print the object's metaData
+
+       AliInfo("**** Object's MetaData set ****");
+       AliInfo(Form("  Object's class name:    %s", fObjectClassName.Data()));
+       AliInfo(Form("  Responsible:            %s", fResponsible.Data()));
+       AliInfo(Form("  Beam period:            %d", fBeamPeriod));
+       AliInfo(Form("  AliRoot version:        %s", fAliRootVersion.Data()));
+       AliInfo(Form("  Comment:                %s", fComment.Data()));
+       AliInfo("  Properties key names:");
+
+       TIter iter(fProperties.GetTable());     
+       TPair* aPair;
+       while ((aPair = (TPair*) iter.Next())) {
+               AliInfo(Form("                  %s",((TObjString* )aPair->Key())->String().Data()));
+       }
+       
 }
-
-