5 #include <SimoxUtility/algorithm/string/string_tools.h>
18 const std::shared_ptr<Processors>& filters,
19 const std::shared_ptr<persistence::MemoryPersistenceStrategy>& persistenceStrategy) :
21 persistenceStrategy_(persistenceStrategy)
50 std::string origin =
"undefined3";
52 auto& dictConverter =
processors->defaultObjectConverter;
62 if (persistenceStrategy_->containsItem(
id(), dataFilename))
64 auto datafilecontent = persistenceStrategy_->retrieveItem(
id(), dataFilename);
68 auto dataaron = dictConverter.convert({datafilecontent,
""}, {});
71 catch (std::exception& ex)
73 ARMARX_ERROR <<
"Exception during conversion from file into json object. At entity instance=" <<
id().
cleanID().
str() <<
", file=" << dataFilename <<
", error message=" << ex.what();
80 <<
"'. Continuing without data.";
83 if (persistenceStrategy_->containsItem(
id(), metadataFilename))
85 auto itemResult = persistenceStrategy_->retrieveItemWithOrigin(
id(), metadataFilename);
86 auto metadatafilecontent = itemResult.data;
87 origin = itemResult.origin;
91 auto metadataaron = dictConverter.convert({metadatafilecontent,
""}, {});
94 catch (std::exception& ex)
96 ARMARX_ERROR <<
"Exception during conversion from file into json object. At entity instance=" <<
id().
cleanID().
str() <<
", file=" << metadataFilename <<
", error message=" << ex.what();
102 ARMARX_WARNING <<
"Could not find the metadata file '" << metadataFilename
103 <<
"'. Continuing without metadata.";
106 for (
const auto& [key, m] : datadict->getElements())
113 for (
const auto& entityInstanceKey : persistenceStrategy_->getItemKeys(
id()))
118 std::string mode = simox::alg::remove_suffix(
119 simox::alg::remove_prefix(entityInstanceKey, key), f->suffix);
121 auto memberfilecontent = persistenceStrategy_->retrieveItem(
id(), entityInstanceKey);
122 auto memberaron = f->convert(
123 {memberfilecontent, mode},
125 datadict->setElement(key, memberaron);
132 from_aron(metadatadict, datadict, wmEntityInstance);
135 bool usePersistenceStrategyAsOrigin =
true;
137 if (usePersistenceStrategyAsOrigin)
150 if (
id().instanceIndex < 0)
153 <<
"During storage of segment '" << wmEntitySnapshot.
id().
str()
154 <<
"' I noticed that the corresponding LTM has no id set. "
155 <<
"I set the id of the LTM to the same name, however this should not happen!";
159 auto& dictConverter =
processors->defaultObjectConverter;
164 auto dataAron = std::make_shared<aron::data::Dict>();
165 auto metadataAron = std::make_shared<aron::data::Dict>();
166 to_aron(metadataAron, dataAron, wmEntitySnapshot);
168 std::shared_ptr<aron::data::Dict>
source;
170 bool saveAndExtract =
177 source = dataAron->clone();
185 for (
auto& converter :
processors->converters)
189 auto dataExt = converter->extractor->extract(
source);
191 for (
const auto& [memberName, var] : dataExt.extraction)
195 auto [memberDataVec, memberDataModeSuffix] = converter->convert(var);
197 std::string
filename = (memberName + memberDataModeSuffix + converter->suffix);
199 persistenceStrategy_->storeItem(
id(),
filename, memberDataVec);
204 auto [dataVec, dataVecModeSuffix] = dictConverter.convert(dataAron);
205 auto [metadataVec, metadataVecModeSuffix] = dictConverter.convert(metadataAron);
209 auto dataToReturn = nlohmann::json::parse(std::string(dataVec.begin(), dataVec.end()));
215 persistenceStrategy_->storeItem(
id(), dataFilename, dataVec);
216 persistenceStrategy_->storeItem(
id(), metadataFilename, metadataVec);