46 std::string origin =
"undefined3";
48 auto& dictConverter =
processors->defaultObjectConverter;
58 if (persistenceStrategy_->containsItem(
id(), dataFilename))
60 auto datafilecontent = persistenceStrategy_->retrieveItem(
id(), dataFilename);
64 auto dataaron = dictConverter.convert({datafilecontent,
""}, {});
67 catch (std::exception& ex)
69 ARMARX_ERROR <<
"Exception during conversion from file into json object. At entity instance=" <<
id().
cleanID().
str() <<
", file=" << dataFilename <<
", error message=" << ex.what();
80 <<
". Skipping this instance.";
84 if (persistenceStrategy_->containsItem(
id(), metadataFilename))
86 auto itemResult = persistenceStrategy_->retrieveItemWithOrigin(
id(), metadataFilename);
87 auto metadatafilecontent = itemResult.data;
88 origin = itemResult.origin;
92 auto metadataaron = dictConverter.convert({metadatafilecontent,
""}, {});
95 catch (std::exception& ex)
97 ARMARX_ERROR <<
"Exception during conversion from file into json object. At entity instance=" <<
id().
cleanID().
str() <<
", file=" << metadataFilename <<
", error message=" << ex.what();
106 ARMARX_WARNING <<
"Could not find the metadata file '" << metadataFilename
108 <<
". Skipping this instance.";
112 for (
const auto& [key, m] : datadict->getElements())
119 for (
const auto& entityInstanceKey : persistenceStrategy_->getItemKeys(
id()))
121 if (simox::alg::starts_with(entityInstanceKey, key) and
122 simox::alg::ends_with(entityInstanceKey, f->suffix))
124 std::string mode = simox::alg::remove_suffix(
125 simox::alg::remove_prefix(entityInstanceKey, key), f->suffix);
127 auto memberfilecontent = persistenceStrategy_->retrieveItem(
id(), entityInstanceKey);
128 auto memberaron = f->convert(
129 {memberfilecontent, mode},
131 datadict->setElement(key, memberaron);
138 from_aron(metadatadict, datadict, wmEntityInstance);
141 bool usePersistenceStrategyAsOrigin =
true;
143 if (usePersistenceStrategyAsOrigin)
154 if (
id().instanceIndex < 0)
157 <<
"During storage of segment '" << wmEntitySnapshot.
id().
str()
158 <<
"' I noticed that the corresponding LTM has no id set. "
159 <<
"I set the id of the LTM to the same name, however this should not happen!";
163 auto& dictConverter =
processors->defaultObjectConverter;
168 auto dataAron = std::make_shared<aron::data::Dict>();
169 auto metadataAron = std::make_shared<aron::data::Dict>();
170 to_aron(metadataAron, dataAron, wmEntitySnapshot);
172 std::shared_ptr<aron::data::Dict> source;
174 bool saveAndExtract =
181 source = dataAron->clone();
189 for (
auto& converter :
processors->converters)
193 auto dataExt = converter->extractor->extract(source);
195 for (
const auto& [memberName, var] : dataExt.extraction)
199 auto [memberDataVec, memberDataModeSuffix] = converter->convert(var);
201 std::string filename = (memberName + memberDataModeSuffix + converter->suffix);
203 persistenceStrategy_->storeItem(
id(), filename, memberDataVec);
208 auto [dataVec, dataVecModeSuffix] = dictConverter.convert(dataAron);
209 auto [metadataVec, metadataVecModeSuffix] = dictConverter.convert(metadataAron);
213 auto dataToReturn = nlohmann::json::parse(std::string(dataVec.begin(), dataVec.end()));
219 persistenceStrategy_->storeItem(
id(), dataFilename, dataVec);
220 persistenceStrategy_->storeItem(
id(), metadataFilename, metadataVec);