#include <cstring>
#include <sstream>
#include <iostream>
#include <TList.h>
#include "AliJSONReader.h"
#include "AliEMCALConfiguration.h"
#include "AliJSONData.h"
AliEMCALConfiguration::AliEMCALConfiguration(const char* name) :
TNamed(name, ""),
fParams(NULL)
{
fParams = new TList;
fParams->SetOwner();
}
AliEMCALConfiguration::~AliEMCALConfiguration() {
if(!fParams) delete fParams;
}
void AliEMCALConfiguration::AddParam(const char* name,
AliJSONValue* value) {
AliJSONData *entry = dynamic_cast<AliJSONData *>(fParams->FindObject(name));
if(entry) entry->SetValue(value);
else fParams->Add(new AliJSONData(name, value));
}
void AliEMCALConfiguration::Build(const char *jsonstring) {
AliJSONReader parser;
Build(parser.Decode(jsonstring));
}
void AliEMCALConfiguration::Build(TList *entries){
TIter objects(entries);
for(TIter entry = objects.Begin(); entry != objects.End(); ++entry){
AliJSONData *val = dynamic_cast<AliJSONData *>(*entry);
if(val)
fParams->Add(val);
else{
TList *conf = dynamic_cast<TList *>(*entry);
if(conf){
AliEMCALConfiguration *daughter = new AliEMCALConfiguration(conf->GetName());
daughter->Build(conf);
fParams->Add(daughter);
}
}
}
}
void AliEMCALConfiguration::Print(Option_t * ) const {
std::cout << "Configuration " << GetName() << ":" << std::endl;
std::cout << "=================================================" << std::endl;
TIter parIter(fParams);
AliJSONData *conf(NULL);
while((conf = dynamic_cast<AliJSONData *>(parIter()))){
std::cout << "Key " << conf->GetName() << ", value " << conf->GetValue()->ToString() << std::endl;
}
std::cout << "=================================================" << std::endl;
}
void AliEMCALConfiguration::AddConfiguration(AliEMCALConfiguration* conf) {
fParams->Add(conf);
}
AliJSONValue* AliEMCALConfiguration::GetValue(const char *key) const {
AliJSONData *val = dynamic_cast<AliJSONData *>(fParams->FindObject(key));
if(!val) return NULL;
return val->GetValue();
}
const char* AliEMCALConfiguration::CreateJSONString() const {
std::stringstream jsonbuilder;
jsonbuilder << "{";
TIter confentries(fParams);
bool isFirst = true;
for(TIter it = confentries.Begin(); it != confentries.End(); ++it){
AliEMCALConfiguration *conf = dynamic_cast<AliEMCALConfiguration *>(*it);
if(conf){
if(!isFirst) jsonbuilder << ",";
jsonbuilder << "\"" << conf->GetName() << "\":" << conf->CreateJSONString();
} else {
AliJSONData *obj = dynamic_cast<AliJSONData *>(*it);
if(obj){
if(!isFirst) jsonbuilder << ",";
jsonbuilder << obj->ToString();
}
}
if(isFirst) isFirst = false;
}
jsonbuilder << "}";
char * result = new char[jsonbuilder.str().length()];
strcpy(result, jsonbuilder.str().c_str());
return result;
}
std::ostream &operator<<(std::ostream & os, const AliEMCALConfiguration &conf){
os << conf.CreateJSONString();
return os;
}
AliEMCALConfiguration.cxx:1 AliEMCALConfiguration.cxx:2 AliEMCALConfiguration.cxx:3 AliEMCALConfiguration.cxx:4 AliEMCALConfiguration.cxx:5 AliEMCALConfiguration.cxx:6 AliEMCALConfiguration.cxx:7 AliEMCALConfiguration.cxx:8 AliEMCALConfiguration.cxx:9 AliEMCALConfiguration.cxx:10 AliEMCALConfiguration.cxx:11 AliEMCALConfiguration.cxx:12 AliEMCALConfiguration.cxx:13 AliEMCALConfiguration.cxx:14 AliEMCALConfiguration.cxx:15 AliEMCALConfiguration.cxx:16 AliEMCALConfiguration.cxx:17 AliEMCALConfiguration.cxx:18 AliEMCALConfiguration.cxx:19 AliEMCALConfiguration.cxx:20 AliEMCALConfiguration.cxx:21 AliEMCALConfiguration.cxx:22 AliEMCALConfiguration.cxx:23 AliEMCALConfiguration.cxx:24 AliEMCALConfiguration.cxx:25 AliEMCALConfiguration.cxx:26 AliEMCALConfiguration.cxx:27 AliEMCALConfiguration.cxx:28 AliEMCALConfiguration.cxx:29 AliEMCALConfiguration.cxx:30 AliEMCALConfiguration.cxx:31 AliEMCALConfiguration.cxx:32 AliEMCALConfiguration.cxx:33 AliEMCALConfiguration.cxx:34 AliEMCALConfiguration.cxx:35 AliEMCALConfiguration.cxx:36 AliEMCALConfiguration.cxx:37 AliEMCALConfiguration.cxx:38 AliEMCALConfiguration.cxx:39 AliEMCALConfiguration.cxx:40 AliEMCALConfiguration.cxx:41 AliEMCALConfiguration.cxx:42 AliEMCALConfiguration.cxx:43 AliEMCALConfiguration.cxx:44 AliEMCALConfiguration.cxx:45 AliEMCALConfiguration.cxx:46 AliEMCALConfiguration.cxx:47 AliEMCALConfiguration.cxx:48 AliEMCALConfiguration.cxx:49 AliEMCALConfiguration.cxx:50 AliEMCALConfiguration.cxx:51 AliEMCALConfiguration.cxx:52 AliEMCALConfiguration.cxx:53 AliEMCALConfiguration.cxx:54 AliEMCALConfiguration.cxx:55 AliEMCALConfiguration.cxx:56 AliEMCALConfiguration.cxx:57 AliEMCALConfiguration.cxx:58 AliEMCALConfiguration.cxx:59 AliEMCALConfiguration.cxx:60 AliEMCALConfiguration.cxx:61 AliEMCALConfiguration.cxx:62 AliEMCALConfiguration.cxx:63 AliEMCALConfiguration.cxx:64 AliEMCALConfiguration.cxx:65 AliEMCALConfiguration.cxx:66 AliEMCALConfiguration.cxx:67 AliEMCALConfiguration.cxx:68 AliEMCALConfiguration.cxx:69 AliEMCALConfiguration.cxx:70 AliEMCALConfiguration.cxx:71 AliEMCALConfiguration.cxx:72 AliEMCALConfiguration.cxx:73 AliEMCALConfiguration.cxx:74 AliEMCALConfiguration.cxx:75 AliEMCALConfiguration.cxx:76 AliEMCALConfiguration.cxx:77 AliEMCALConfiguration.cxx:78 AliEMCALConfiguration.cxx:79 AliEMCALConfiguration.cxx:80 AliEMCALConfiguration.cxx:81 AliEMCALConfiguration.cxx:82 AliEMCALConfiguration.cxx:83 AliEMCALConfiguration.cxx:84 AliEMCALConfiguration.cxx:85 AliEMCALConfiguration.cxx:86 AliEMCALConfiguration.cxx:87 AliEMCALConfiguration.cxx:88 AliEMCALConfiguration.cxx:89 AliEMCALConfiguration.cxx:90 AliEMCALConfiguration.cxx:91 AliEMCALConfiguration.cxx:92 AliEMCALConfiguration.cxx:93 AliEMCALConfiguration.cxx:94 AliEMCALConfiguration.cxx:95 AliEMCALConfiguration.cxx:96 AliEMCALConfiguration.cxx:97 AliEMCALConfiguration.cxx:98 AliEMCALConfiguration.cxx:99 AliEMCALConfiguration.cxx:100 AliEMCALConfiguration.cxx:101 AliEMCALConfiguration.cxx:102 AliEMCALConfiguration.cxx:103 AliEMCALConfiguration.cxx:104 AliEMCALConfiguration.cxx:105 AliEMCALConfiguration.cxx:106 AliEMCALConfiguration.cxx:107