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();
76 <<
"'. Continuing without data.";
79 if (persistenceStrategy_->containsItem(
id(), metadataFilename))
81 auto itemResult = persistenceStrategy_->retrieveItemWithOrigin(
id(), metadataFilename);
82 auto metadatafilecontent = itemResult.data;
83 origin = itemResult.origin;
87 auto metadataaron = dictConverter.convert({metadatafilecontent,
""}, {});
90 catch (std::exception& ex)
92 ARMARX_ERROR <<
"Exception during conversion from file into json object. At entity instance=" <<
id().
cleanID().
str() <<
", file=" << metadataFilename <<
", error message=" << ex.what();
98 ARMARX_WARNING <<
"Could not find the metadata file '" << metadataFilename
99 <<
"'. Continuing without metadata.";
102 for (
const auto& [key, m] : datadict->getElements())
109 for (
const auto& entityInstanceKey : persistenceStrategy_->getItemKeys(
id()))
111 if (simox::alg::starts_with(entityInstanceKey, key) and
112 simox::alg::ends_with(entityInstanceKey, f->suffix))
114 std::string mode = simox::alg::remove_suffix(
115 simox::alg::remove_prefix(entityInstanceKey, key), f->suffix);
117 auto memberfilecontent = persistenceStrategy_->retrieveItem(
id(), entityInstanceKey);
118 auto memberaron = f->convert(
119 {memberfilecontent, mode},
121 datadict->setElement(key, memberaron);
128 from_aron(metadatadict, datadict, wmEntityInstance);
131 bool usePersistenceStrategyAsOrigin =
true;
133 if (usePersistenceStrategyAsOrigin)
144 if (
id().instanceIndex < 0)
147 <<
"During storage of segment '" << wmEntitySnapshot.
id().
str()
148 <<
"' I noticed that the corresponding LTM has no id set. "
149 <<
"I set the id of the LTM to the same name, however this should not happen!";
153 auto& dictConverter =
processors->defaultObjectConverter;
158 auto dataAron = std::make_shared<aron::data::Dict>();
159 auto metadataAron = std::make_shared<aron::data::Dict>();
160 to_aron(metadataAron, dataAron, wmEntitySnapshot);
162 std::shared_ptr<aron::data::Dict> source;
164 bool saveAndExtract =
171 source = dataAron->clone();
179 for (
auto& converter :
processors->converters)
183 auto dataExt = converter->extractor->extract(source);
185 for (
const auto& [memberName, var] : dataExt.extraction)
189 auto [memberDataVec, memberDataModeSuffix] = converter->convert(var);
191 std::string filename = (memberName + memberDataModeSuffix + converter->suffix);
193 persistenceStrategy_->storeItem(
id(), filename, memberDataVec);
198 auto [dataVec, dataVecModeSuffix] = dictConverter.convert(dataAron);
199 auto [metadataVec, metadataVecModeSuffix] = dictConverter.convert(metadataAron);
203 auto dataToReturn = nlohmann::json::parse(std::string(dataVec.begin(), dataVec.end()));
209 persistenceStrategy_->storeItem(
id(), dataFilename, dataVec);
210 persistenceStrategy_->storeItem(
id(), metadataFilename, metadataVec);