aron_conversions.cpp
Go to the documentation of this file.
1#include "aron_conversions.h"
2
4
7
8namespace armarx::armem
9{
10 std::map<armarx::eStateType, armarx::skills::arondto::Statechart::StateType>
12 {eNormalState,
13 (armarx::skills::arondto::Statechart::StateType)
14 armarx::skills::arondto::Statechart::StateType::NORMAL},
15 {eFinalState,
16 (armarx::skills::arondto::Statechart::StateType)
17 armarx::skills::arondto::Statechart::StateType::FINAL},
18 {eRemoteState,
19 (armarx::skills::arondto::Statechart::StateType)
20 armarx::skills::arondto::Statechart::StateType::REMOTE},
21 {eDynamicRemoteState,
22 (armarx::skills::arondto::Statechart::StateType)
23 armarx::skills::arondto::Statechart::StateType::DYNAMIC_REMOTE},
24 {eUndefined,
25 (armarx::skills::arondto::Statechart::StateType)
26 armarx::skills::arondto::Statechart::StateType::UNDEFINED},
27 };
28
29 std::map<armarx::skills::arondto::Statechart::StateType, armarx::eStateType>
31 {(armarx::skills::arondto::Statechart::StateType)
32 armarx::skills::arondto::Statechart::StateType::NORMAL,
33 eNormalState},
34 {(armarx::skills::arondto::Statechart::StateType)
35 armarx::skills::arondto::Statechart::StateType::FINAL,
36 eFinalState},
37 {(armarx::skills::arondto::Statechart::StateType)
38 armarx::skills::arondto::Statechart::StateType::REMOTE,
39 eRemoteState},
40 {(armarx::skills::arondto::Statechart::StateType)
41 armarx::skills::arondto::Statechart::StateType::DYNAMIC_REMOTE,
42 eDynamicRemoteState},
43 {(armarx::skills::arondto::Statechart::StateType)
44 armarx::skills::arondto::Statechart::StateType::UNDEFINED,
45 eUndefined},
46 };
47
48 void
49 fromAron(const skills::arondto::Statechart::StateType& dto, eStateType& bo)
50 {
52 {
54 }
55 else
56 {
57 bo = eStateType::eUndefined;
58 }
59 }
60
61 void
62 toAron(skills::arondto::Statechart::StateType& dto, const eStateType& bo)
63 {
64 if (toAronStateTypeMap.find(bo) != toAronStateTypeMap.end())
65 {
66 dto.value = toAronStateTypeMap[bo].value;
67 }
68 else
69 {
70 dto.value = skills::arondto::Statechart::StateType::UNDEFINED;
71 }
72 }
73
74 void
75 fromAron(const skills::arondto::Statechart::ParameterMap& dto, StateParameterMap& bo)
76 {
77 // todo: implement
78 // for (auto const& [key, val] : dto.parameters)
79 // {
80 // fromAron(val, ...)
81 // bo.insert(key, val);
82 // }
83 }
84
85 void
86 toAron(skills::arondto::Statechart::ParameterMap& dto, const StateParameterMap& bo)
87 {
88 for (auto const& [key, val] : bo)
89 {
90 dto.parameters[key] = val->value->toString();
91 }
92 }
93
94 void
95 fromAron(const skills::arondto::Statechart::Transition& dto,
96 ProfilerStatechartTransitionWithParameters& bo)
97 {
98 bo.processId = dto.processId;
99 bo.sourceStateIdentifier = dto.sourceStateIdentifier;
100 bo.targetStateIdentifier = dto.targetStateIdentifier;
101 bo.eventName = dto.eventName;
102 fromAron(dto.targetStateType, bo.targetStateType);
103 fromAron(dto.inputParameters, bo.inputParameters);
104 fromAron(dto.localParameters, bo.localParameters);
105 fromAron(dto.outputParameters, bo.outputParameters);
106 }
107
108 void
109 toAron(skills::arondto::Statechart::Transition& dto,
110 const ProfilerStatechartTransitionWithParameters& bo)
111 {
112 dto.processId = bo.processId;
113 dto.sourceStateIdentifier = bo.sourceStateIdentifier;
114 dto.targetStateIdentifier = bo.targetStateIdentifier;
115 dto.eventName = bo.eventName;
116 toAron(dto.targetStateType, bo.targetStateType);
117 toAron(dto.inputParameters, bo.inputParameters);
118 toAron(dto.localParameters, bo.localParameters);
119 toAron(dto.outputParameters, bo.outputParameters);
120 }
121
122 void
123 fromAron(const armarx::skills::arondto::ProviderID& dto, skills::ProviderID& bo)
124 {
125 bo.providerName = dto.providerName;
126 }
127
128 void
129 toAron(armarx::skills::arondto::ProviderID& dto, const skills::ProviderID& bo)
130 {
131 dto.providerName = bo.providerName;
132 }
133
134 void
135 fromAron(const armarx::skills::arondto::SkillID& dto, skills::SkillID& bo)
136 {
137 bo.skillName = dto.skillName;
138 bo.providerId = skills::ProviderID{.providerName = ""};
139 fromAron(dto.providerId, *bo.providerId);
140 }
141
142 void
143 toAron(armarx::skills::arondto::SkillID& dto, const skills::SkillID& bo)
144 {
145 dto.skillName = bo.skillName;
146 dto.providerId.resetHard();
147 if (bo.providerId.has_value())
148 {
149 toAron(dto.providerId, *bo.providerId);
150 }
151 }
152
153 void
154 fromAron(const armarx::skills::arondto::SkillDescription& dto, skills::SkillDescription& bo)
155 {
156 fromAron(dto.skillId, bo.skillId);
157 bo.description = dto.description;
158 bo.timeout = dto.timeout;
159 bo.rootProfileDefaults = dto.rootProfileParameterization;
160 if (dto.parametersType)
161 {
162 throw armarx::LocalException("Not implemented yet");
163 }
164 }
165
166 void
167 toAron(armarx::skills::arondto::SkillDescription& dto, const skills::SkillDescription& bo)
168 {
169 toAron(dto.skillId, bo.skillId);
170 dto.description = bo.description;
171 dto.timeout = bo.timeout;
172 dto.rootProfileParameterization = bo.rootProfileDefaults;
173 if (bo.parametersType)
174 {
177
178 dto.parametersType = aron::data::Dict::DynamicCastAndCheck(c.latest);
179 }
180 }
181
182 void
183 fromAron(const armarx::skills::arondto::SkillExecutionRequest& dto,
185 {
186 fromAron(dto.skillId, bo.skillId);
187 bo.executorName = dto.executorName;
188 bo.parameters = dto.parameters;
189 }
190
191 void
192 toAron(armarx::skills::arondto::SkillExecutionRequest& dto,
194 {
195 toAron(dto.skillId, bo.skillId);
196 dto.executorName = bo.executorName;
197 dto.parameters = bo.parameters;
198 }
199
200 void
201 fromAron(const armarx::skills::arondto::SkillStatusUpdate& dto, skills::SkillStatusUpdate& bo)
202 {
203 static const std::map<std::string, skills::SkillStatus> map{
204 {"Constructing", skills::SkillStatus::Constructing},
205 {"Initializing", skills::SkillStatus::Initializing},
206 {"Preparing", skills::SkillStatus::Preparing},
207 {"Running", skills::SkillStatus::Running},
208 {"Failed", skills::SkillStatus::Failed},
209 {"Aborted", skills::SkillStatus::Aborted},
210 {"Succeeded", skills::SkillStatus::Succeeded}};
211
212 fromAron(dto.skillId, bo.executionId.skillId);
213 bo.executionId.executionStartedTime = dto.executionStartedTimestamp;
214 bo.executionId.executorName = dto.executorName;
215 bo.parameters = dto.parameters;
216 bo.result = dto.result;
217
218 // Use find() instead of at() so an unknown status string does not
219 // throw std::out_of_range and crash the SkillMemory component on
220 // corrupted data, version mismatches, or new enum values.
221 if (auto it = map.find(dto.status); it != map.end())
222 {
223 bo.status = it->second;
224 }
225 else
226 {
227 ARMARX_WARNING << "Unknown skill status string '" << dto.status
228 << "' encountered in fromAron(SkillStatusUpdate). "
229 "Falling back to SkillStatus::Failed.";
231 }
232 }
233
234 void
235 toAron(armarx::skills::arondto::SkillStatusUpdate& dto, const skills::SkillStatusUpdate& bo)
236 {
237 static const std::map<skills::SkillStatus, std::string> map{
238 {skills::SkillStatus::Constructing, "Constructing"},
239 {skills::SkillStatus::Initializing, "Initializing"},
240 {skills::SkillStatus::Preparing, "Preparing"},
241 {skills::SkillStatus::Running, "Running"},
242 {skills::SkillStatus::Failed, "Failed"},
243 {skills::SkillStatus::Aborted, "Aborted"},
244 {skills::SkillStatus::Succeeded, "Succeeded"}};
245
246 toAron(dto.skillId, bo.executionId.skillId);
247 dto.executorName = bo.executionId.executorName;
248 dto.executionStartedTimestamp = bo.executionId.executionStartedTime;
249 dto.parameters = bo.parameters;
250 dto.result = bo.result;
251
252 // Use find() instead of at() so an unknown enum value (e.g. from a
253 // future enum addition or memory corruption) does not throw and
254 // crash the component.
255 if (auto it = map.find(bo.status); it != map.end())
256 {
257 dto.status = it->second;
258 }
259 else
260 {
261 ARMARX_WARNING << "Unknown skills::SkillStatus enum value "
262 << static_cast<int>(bo.status)
263 << " in toAron(SkillStatusUpdate). "
264 "Falling back to status string \"Failed\".";
265 dto.status = "Failed";
266 }
267 }
268} // namespace armarx::armem
constexpr T c
std::optional< ProviderID > providerId
Definition SkillID.h:40
std::string skillName
Definition SkillID.h:41
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:193
void fromAron(const arondto::MemoryID &dto, MemoryID &bo)
std::map< armarx::eStateType, armarx::skills::arondto::Statechart::StateType > toAronStateTypeMap
std::map< armarx::skills::arondto::Statechart::StateType, armarx::eStateType > fromAronStateTypeMap
void toAron(arondto::MemoryID &dto, const MemoryID &bo)
void visit(VisitorImplementation &v, typename VisitorImplementation::Input &t)
The visit function.
Definition Visitor.h:39
aron::data::DictPtr rootProfileDefaults
aron::type::ObjectPtr parametersType
armarx::core::time::Duration timeout
armarx::core::time::DateTime executionStartedTime