@@ -130,9 +130,8 @@ void CcdbDatabase::storeMO(std::shared_ptr<o2::quality_control::core::MonitorObj
130130 ccdbApi.storeAsTFile (mo.get (), path, metadata, from, to);
131131}
132132
133- std::shared_ptr<core::MonitorObject > CcdbDatabase::retrieveMO (std::string taskName, std::string objectName , long timestamp)
133+ std::shared_ptr<TObject > CcdbDatabase::retrieveTObject (std::string path , long timestamp)
134134{
135- string path = taskName + " /" + objectName;
136135 map<string, string> metadata;
137136 long when = timestamp == 0 ? getCurrentTimestamp () : timestamp;
138137
@@ -146,22 +145,66 @@ std::shared_ptr<core::MonitorObject> CcdbDatabase::retrieveMO(std::string taskNa
146145 return nullptr ;
147146 }
148147 }
149- std::shared_ptr<core::MonitorObject> mo (dynamic_cast <core::MonitorObject*>(object));
148+ std::shared_ptr<TObject> result (object);
149+ return result;
150+ }
151+
152+ std::shared_ptr<core::MonitorObject> CcdbDatabase::retrieveMO (std::string taskName, std::string objectName, long timestamp)
153+ {
154+ string path = taskName + " /" + objectName;
155+ std::shared_ptr<TObject> obj = retrieveTObject (path, timestamp);
156+ std::shared_ptr<MonitorObject> mo = std::dynamic_pointer_cast<MonitorObject>(obj);
150157 if (mo == nullptr ) {
151158 ILOG (Error) << " Could not cast the object " << taskName << " /" << objectName << " to MonitorObject" << ENDM ;
152159 }
153160 return mo;
154161}
155162
156- std::string CcdbDatabase::retrieveMOJson (std::string taskName, std::string objectName, long /* timestamp*/ )
163+ std::shared_ptr<QualityObject> CcdbDatabase::retrieveQO (std::string qoPath, long timestamp)
164+ {
165+ std::shared_ptr<TObject> obj = retrieveTObject (qoPath, timestamp);
166+ std::shared_ptr<QualityObject> qo = std::dynamic_pointer_cast<QualityObject>(obj);
167+ if (qo == nullptr ) {
168+ LOG (ERROR ) << " Could not cast the object " << qoPath << " to QualityObject" ;
169+ }
170+ return qo;
171+ }
172+
173+ std::string CcdbDatabase::retrieveQOJson (std::string qoPath, long timestamp)
157174{
158- auto monitor = retrieveMO (taskName, objectName);
159- if (monitor == nullptr ) {
175+ return retrieveJson (qoPath, timestamp);
176+ }
177+
178+ std::string CcdbDatabase::retrieveMOJson (std::string taskName, std::string objectName, long timestamp)
179+ {
180+ string path = taskName + " /" + objectName;
181+ return retrieveJson (path, timestamp);
182+ }
183+
184+ std::string CcdbDatabase::retrieveJson (std::string path, long timestamp)
185+ {
186+ auto tobj = retrieveTObject (path, timestamp);
187+ if (tobj == nullptr ) {
188+ return std::string ();
189+ }
190+ TObject* toConvert;
191+ if (tobj->IsA () == MonitorObject::Class ()) {
192+ std::shared_ptr<MonitorObject> mo = std::dynamic_pointer_cast<MonitorObject>(tobj);
193+ toConvert = mo->getObject ();
194+ mo->setIsOwner (false );
195+ } else if (tobj->IsA () == QualityObject::Class ()) {
196+ toConvert = dynamic_cast <QualityObject*>(tobj.get ());
197+ if (toConvert == nullptr ) {
198+ return std::string ();
199+ }
200+ } else {
201+ LOG (ERROR ) << " Unknown type of object : " << path << " -> " << tobj->ClassName ();
160202 return std::string ();
161203 }
162- std::unique_ptr<TObject> obj (monitor->getObject ());
163- monitor->setIsOwner (false );
164- TString json = TBufferJSON::ConvertToJSON (obj.get ());
204+ TString json = TBufferJSON::ConvertToJSON (toConvert);
205+ if (toConvert) {
206+ delete toConvert;
207+ }
165208 return json.Data ();
166209}
167210
@@ -182,39 +225,6 @@ void CcdbDatabase::storeQO(std::shared_ptr<QualityObject> qo)
182225 ccdbApi.storeAsTFile (qo.get (), path, metadata, from, to);
183226}
184227
185- std::shared_ptr<QualityObject> CcdbDatabase::retrieveQO (std::string qoPath, long timestamp)
186- {
187- string fullPath = qoPath;
188- map<string, string> metadata;
189- long when = timestamp == 0 ? getCurrentTimestamp () : timestamp;
190-
191- // we try first to load a TFile
192- TObject* object = ccdbApi.retrieveFromTFile (fullPath, metadata, when);
193- if (object == nullptr ) {
194- // We could not open a TFile we should now try to open an object directly serialized
195- object = ccdbApi.retrieve (fullPath, metadata, when);
196- LOG (DEBUG ) << " We could retrieve the object " << fullPath << " as a streamed object." ;
197- if (object == nullptr ) {
198- return nullptr ;
199- }
200- }
201- std::shared_ptr<QualityObject> qo (dynamic_cast <QualityObject*>(object));
202- if (qo == nullptr ) {
203- LOG (ERROR ) << " Could not cast the object " << qoPath << " to QualityObject" ;
204- }
205- return qo;
206- }
207-
208- std::string CcdbDatabase::retrieveQOJson (std::string qoPath, long /* timestamp*/ )
209- {
210- auto qualityObject = retrieveQO (qoPath);
211- if (qualityObject == nullptr ) {
212- return std::string ();
213- }
214- TString json = TBufferJSON::ConvertToJSON (qualityObject.get ());
215- return json.Data ();
216- }
217-
218228void CcdbDatabase::disconnect ()
219229{
220230 // NOOP for CCDB
0 commit comments