15 const std::string& exportName,
17 const std::shared_ptr<Processors>& filters,
18 const std::shared_ptr<persistence::MemoryPersistenceStrategy>& persistenceStrategy) :
19 CoreSegmentBase(exportName, id, filters), persistenceStrategy_(persistenceStrategy)
33 << (persistenceStrategy_ !=
35 ARMARX_DEBUG <<
"Strategy identifier=" << persistenceStrategy_->getIdentifier();
36 ARMARX_DEBUG <<
"Strategy export name=" << persistenceStrategy_->getExportName();
38 for (
auto& providerSegmentKey : persistenceStrategy_->getContainerKeys(
id()))
40 std::shared_ptr<persistence::MemoryPersistenceStrategy>
41 providerSegmentPersistenceStrategy(persistenceStrategy_);
44 id().withProviderSegmentName(providerSegmentKey),
46 providerSegmentPersistenceStrategy);
60 return persistenceStrategy_->containsContainer(
id(), providerSegmentName);
63 std::shared_ptr<ProviderSegment>
77 id().withProviderSegmentName(providerSegmentName),
79 persistenceStrategy_);
93 if (persistenceStrategy_->containsItem(
99 auto filecontent = persistenceStrategy_->retrieveItem(
101 auto aron = conv.convert(filecontent,
"");
104 catch (
const nlohmann::json::type_error& e)
107 <<
"You are trying to access aron data which is not available, skipping...";
113 [&wmCoreSegment](
auto& ltmProviderSegment)
116 ltmProviderSegment.loadAllReferences(wmProviderSegment);
121 armem::wm::ProviderSegment existingWmProviderSegment =
122 wmCoreSegment.getProviderSegment(wmProviderSegment.name());
123 existingWmProviderSegment.append(wmProviderSegment);
127 wmCoreSegment.addProviderSegment(wmProviderSegment);
141 auto& conv =
processors->defaultTypeConverter;
143 if (persistenceStrategy_->containsItem(
146 auto& conv =
processors->defaultTypeConverter;
148 auto filecontent = persistenceStrategy_->retrieveItem(
150 auto aron = conv.convert(filecontent,
"");
155 [&wmCoreSegment, &
n](
auto& ltmProviderSegment)
158 ltmProviderSegment.loadLatestNReferences(
n, wmProviderSegment);
163 armem::wm::ProviderSegment existingWmProviderSegment =
164 wmCoreSegment.getProviderSegment(wmProviderSegment.name());
165 existingWmProviderSegment.append(wmProviderSegment);
169 wmCoreSegment.addProviderSegment(wmProviderSegment);
184 [&](
auto& wmProviderSegment)
186 std::shared_ptr<persistence::MemoryPersistenceStrategy>
187 providerSegmentPersistenceStrategy(persistenceStrategy_);
191 id().withProviderSegmentName(wmProviderSegment.id().providerSegmentName),
193 providerSegmentPersistenceStrategy);
195 ltmProviderSegment.
resolve(wmProviderSegment);
206 if (
id().coreSegmentName.empty())
209 <<
"During storage of segment '" << wmCoreSegment.
id().
str()
210 <<
"' I noticed that the corresponding LTM has no id set. "
211 <<
"I set the id of the LTM to the same name, however this should not happen!";
220 auto& conv =
processors->defaultTypeConverter;
222 auto [vec, modeSuffix] = conv.convert(wmCoreSegment.
aronType());
226 persistenceStrategy_->storeItem(
id(), key, vec);
227 ARMARX_DEBUG <<
"Stored type information for CoreSegment "
232 ARMARX_DEBUG <<
"CoreSegment does not have aron type, so aron type information "
233 "cannot be exported";
238 [&](
const auto& wmProviderSegment)
240 std::shared_ptr<persistence::MemoryPersistenceStrategy>
241 providerSegmentPersistenceStrategy(persistenceStrategy_);
245 id().withProviderSegmentName(wmProviderSegment.id().providerSegmentName),
247 providerSegmentPersistenceStrategy);
249 ltmProviderSegment.
store(wmProviderSegment, simulatedVersion);