FluxioExecutor.cpp
Go to the documentation of this file.
1 #include "FluxioExecutor.h"
2 
3 #include <memory>
4 #include <mutex>
5 
7 
11 
12 #include "../SkillStatusUpdate.h"
13 
14 namespace armarx::skills
15 {
16  void
18  {
20  armarx::DateTime::Now(), this->id, nodeId, status};
21 
22  std::scoped_lock statusLock(statusMutex, statusUpdatesMutex);
23  this->status = update;
24  this->statusUpdates.push_front(update);
25  }
26 
28  FluxioExecutor::getPossibleInputCopy(const std::string nodeId, const std::string parameterId)
29  {
30  std::scoped_lock l(possibleInputsMutex);
31  const auto& dictIt = possibleInputs.find(nodeId);
32  if (dictIt == possibleInputs.end())
33  {
34  ARMARX_WARNING << "No possible input found for node " << nodeId;
35  return nullptr;
36  }
37  if (dictIt->second == nullptr || !dictIt->second->hasElement(parameterId))
38  {
39  ARMARX_WARNING << "No possible input found for parameter " << parameterId;
40  return nullptr;
41  }
42  const auto& res = dictIt->second->getElement(parameterId);
43  if (res == nullptr)
44  {
45  return nullptr;
46  }
47  return res->cloneAsVariant();
48  }
49 
52  {
53  std::scoped_lock l(resultMutex);
54  if (result == nullptr)
55  {
56  return nullptr;
57  }
58 
59  return result->clone();
60  }
61 
62  std::optional<std::vector<skills::FluxioSkillStatusUpdate>>
64  {
65  return std::nullopt;
66  }
67 
68  std::optional<skills::FluxioSkillStatusUpdate>
70  {
71  return status;
72  }
73 
77  const FluxioParameter& parameter) const
78  {
81  while (value == nullptr)
82  {
83  const auto& valueIt = std::find_if(parameter.values.begin(),
84  parameter.values.end(),
85  [idPtr](const FluxioValue& v)
86  { return v.profilePtr->id == idPtr->id; });
87  if (valueIt == parameter.values.end())
88  {
89  if (idPtr->parentPtr == nullptr)
90  {
91  ARMARX_WARNING << "Value for parameter " << parameter.id
92  << " not found in profile " << profilePtr->id;
93  return nullptr;
94  }
95  idPtr = idPtr->parentPtr;
96  }
97  else
98  {
99  value = valueIt->content;
100  }
101  }
102  return value->cloneAsVariant();
103  }
104 } // namespace armarx::skills
Variant.h
armarx::skills::FluxioParameter
Definition: FluxioParameter.h:23
armarx::skills::FluxioExecutor::status
std::optional< skills::FluxioSkillStatusUpdate > status
Definition: FluxioExecutor.h:62
armarx::skills::FluxioExecutor::resultMutex
std::shared_mutex resultMutex
Definition: FluxioExecutor.h:57
armarx::skills::FluxioExecutor::getStatus
std::optional< skills::FluxioSkillStatusUpdate > getStatus() const
Definition: FluxioExecutor.cpp:69
armarx::skills::FluxioExecutor::result
armarx::aron::data::DictPtr result
Definition: FluxioExecutor.h:56
armarx::skills
This file is part of ArmarX.
Definition: PeriodicUpdateWidget.cpp:11
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:51
armarx::skills::FluxioExecutor::statusMutex
std::shared_mutex statusMutex
Definition: FluxioExecutor.h:63
FluxioValue.h
armarx::skills::FluxioExecutor::getPossibleInputCopy
virtual armarx::aron::data::VariantPtr getPossibleInputCopy(const std::string nodeId, const std::string parameterId)
Definition: FluxioExecutor.cpp:28
armarx::skills::FluxioExecutor::possibleInputsMutex
std::shared_mutex possibleInputsMutex
Definition: FluxioExecutor.h:60
armarx::skills::FluxioExecutor::possibleInputs
std::map< std::string, armarx::aron::data::DictPtr > possibleInputs
Definition: FluxioExecutor.h:59
FluxioProfile.h
std::experimental::fundamentals_v2::observer_ptr
Definition: ManagedIceObject.h:53
armarx::skills::FluxioSkillStatusUpdate
Definition: FluxioSkillStatusUpdate.h:10
armarx::aron::data::VariantPtr
std::shared_ptr< Variant > VariantPtr
Definition: forward_declarations.h:11
armarx::status
status
Definition: FiniteStateMachine.h:244
armarx::skills::FluxioExecutor::findParameterValue
armarx::aron::data::VariantPtr findParameterValue(const std::experimental::observer_ptr< const FluxioProfile > profilePtr, const FluxioParameter &parameter) const
Definition: FluxioExecutor.cpp:75
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:855
armarx::skills::FluxioParameter::values
std::list< FluxioValue > values
Definition: FluxioParameter.h:32
armarx::skills::FluxioExecutor::getResultsCopy
virtual armarx::aron::data::DictPtr getResultsCopy()
Definition: FluxioExecutor.cpp:51
armarx::skills::FluxioExecutor::id
const std::string id
Definition: FluxioExecutor.h:47
FluxioExecutor.h
armarx::skills::FluxioParameter::id
std::string id
Definition: FluxioParameter.h:25
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:68
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
armarx::skills::FluxioExecutor::statusUpdates
std::list< skills::FluxioSkillStatusUpdate > statusUpdates
Definition: FluxioExecutor.h:53
armarx::skills::FluxioExecutor::statusUpdatesMutex
std::shared_mutex statusUpdatesMutex
Definition: FluxioExecutor.h:54
Logging.h
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:193
armarx::skills::FluxioExecutor::setStatus
virtual void setStatus(skills::SkillStatus status, const std::string &nodeId="noId")
Definition: FluxioExecutor.cpp:17
armarx::skills::FluxioExecutor::getStatusUpdate
virtual std::optional< std::vector< skills::FluxioSkillStatusUpdate > > getStatusUpdate()
Definition: FluxioExecutor.cpp:63
armarx::skills::SkillStatus
SkillStatus
Definition: SkillStatusUpdate.h:15
armarx::skills::FluxioValue
Definition: FluxioValue.h:17