RemoteGuiAronDataVisitor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <sstream>
4 #include <stack>
5 
7 
9 
12 
13 namespace armarx::armem::server
14 {
15 
17  {
21 
22  struct Group
23  {
24  Group(const std::string& label = {});
25 
28  int nextRow = 0;
29  };
30 
31  std::stack<Group> groups;
33 
34 
35  virtual ~RemoteGuiAronDataVisitor() = default;
36 
37  void
39  {
41  const std::string key = n->getPath().size() > 0 ? n->getPath().getLastElement()
42  : ""; // check if root of object
43  visitEnter(key, "dict", n->childrenSize());
44  }
45 
46  void
48  {
49  visitExit();
50  }
51 
52  void
54  {
56  const std::string key = n->getPath().getLastElement();
57  visitEnter(key, "list", n->childrenSize());
58  }
59 
60  void
62  {
63  visitExit();
64  }
65 
66  // Same for Dict and List
67  bool visitEnter(const std::string& key, const std::string& type, size_t size);
68  bool visitExit();
69 
70  void
71  visitBool(const aron::data::VariantPtr& b) override
72  {
74  const std::string key = b->getPath().getLastElement();
75  this->addValueLabel(key, *aron::data::Bool::DynamicCastAndCheck(b), "bool");
76  }
77 
78  void
80  {
82  const std::string key = d->getPath().getLastElement();
83  this->addValueLabel(key, *aron::data::Double::DynamicCastAndCheck(d), "double");
84  }
85 
86  void
88  {
90  const std::string key = f->getPath().getLastElement();
91  this->addValueLabel(key, *aron::data::Float::DynamicCastAndCheck(f), "float");
92  }
93 
94  void
95  visitInt(const aron::data::VariantPtr& i) override
96  {
98  const std::string key = i->getPath().getLastElement();
99  this->addValueLabel(key, *aron::data::Int::DynamicCastAndCheck(i), "int");
100  }
101 
102  void
104  {
106  const std::string key = l->getPath().getLastElement();
107  this->addValueLabel(key, *aron::data::Long::DynamicCastAndCheck(l), "long");
108  }
109 
110  void
111  visitString(const aron::data::VariantPtr& string) override
112  {
113  ARMARX_CHECK_NOT_NULL(string);
115  const std::string key = string->getPath().getLastElement();
116  this->addValueLabel(key, *s, "string");
117  }
118 
119  void
120  visitNDArray(const aron::data::VariantPtr& array) override
121  {
122  ARMARX_CHECK_NOT_NULL(array);
123  const std::string key = array->getPath().getLastElement();
124  this->addValueLabel(key, *aron::data::NDArray::DynamicCastAndCheck(array), "ND Array");
125  }
126 
127  void
128  visitUnknown(const aron::data::VariantPtr& unknown) override
129  {
130  ARMARX_IMPORTANT << "Unknown data encountered: "
131  << (unknown ? unknown->getFullName() : "nullptr");
132  }
133 
134 
135  private:
136  template <class DataT>
137  void
138  addValueLabel(const std::string& key, DataT& n, const std::string& typeName)
139  {
140  checkGroupsNotEmpty();
141  Group& g = groups.top();
142  g.layout.add(Label(key), {g.nextRow, 0})
143  .add(Label("(" + typeName + ")"), {g.nextRow, 1})
144  .add(Label("= " + getValueText(n)), {g.nextRow, 2});
145  ++g.nextRow;
146  }
147 
148  template <class DataT>
149  std::string
150  getValueText(DataT& n)
151  {
152  std::stringstream ss;
153  streamValueText(n, ss);
154  return ss.str();
155  }
156 
157  template <class DataT>
158  void
159  streamValueText(DataT& n, std::stringstream& ss)
160  {
161  ss << n.getValue();
162  }
163 
164  void streamValueText(aron::data::String& n, std::stringstream& ss);
165  void streamValueText(aron::data::NDArray& n, std::stringstream& ss);
166 
167  void checkGroupsNotEmpty() const;
168  };
169 
170 
171 } // namespace armarx::armem::server
armarx::armem::server::RemoteGuiAronDataVisitor::Group::Group
Group(const std::string &label={})
Definition: RemoteGuiAronDataVisitor.cpp:10
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:190
armarx::armem::server::RemoteGuiAronDataVisitor::groups
std::stack< Group > groups
Definition: RemoteGuiAronDataVisitor.h:31
armarx::RemoteGui::Client::Label
Definition: Widgets.h:31
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::armem::server::RemoteGuiAronDataVisitor
Definition: RemoteGuiAronDataVisitor.h:16
armarx::armem::server::RemoteGuiAronDataVisitor::visitInt
void visitInt(const aron::data::VariantPtr &i) override
Definition: RemoteGuiAronDataVisitor.h:95
armarx::armem::server::RemoteGuiAronDataVisitor::result
GroupBox result
Definition: RemoteGuiAronDataVisitor.h:32
armarx::aron::data::detail::SpecializedVariantBase< data::dto::AronBool, Bool >::DynamicCastAndCheck
static PointerType DynamicCastAndCheck(const VariantPtr &n)
Definition: SpecializedVariant.h:134
armarx::armem::server::RemoteGuiAronDataVisitor::visitNDArray
void visitNDArray(const aron::data::VariantPtr &array) override
Definition: RemoteGuiAronDataVisitor.h:120
armarx::armem::server::RemoteGuiAronDataVisitor::visitListOnEnter
void visitListOnEnter(const aron::data::VariantPtr &n) override
Definition: RemoteGuiAronDataVisitor.h:53
armarx::aron::data::VariantPtr
std::shared_ptr< Variant > VariantPtr
Definition: forward_declarations.h:11
visionx::voxelgrid::Label
uint32_t Label
Type of an object label.
Definition: types.h:6
armarx::armem::server::RemoteGuiAronDataVisitor::visitListOnExit
void visitListOnExit(const aron::data::VariantPtr &) override
Definition: RemoteGuiAronDataVisitor.h:61
armarx::RemoteGui::Client::GridLayout
Definition: Widgets.h:186
armarx::armem::server::RemoteGuiAronDataVisitor::visitFloat
void visitFloat(const aron::data::VariantPtr &f) override
Definition: RemoteGuiAronDataVisitor.h:87
armarx::armem::server::RemoteGuiAronDataVisitor::Group::layout
GridLayout layout
Definition: RemoteGuiAronDataVisitor.h:27
armarx::armem::server::RemoteGuiAronDataVisitor::visitExit
bool visitExit()
Definition: RemoteGuiAronDataVisitor.cpp:29
armarx::armem::server::RemoteGuiAronDataVisitor::~RemoteGuiAronDataVisitor
virtual ~RemoteGuiAronDataVisitor()=default
armarx::RemoteGui::Client::GroupBox
Definition: Widgets.h:193
All.h
armarx::armem::server::RemoteGuiAronDataVisitor::visitDictOnExit
void visitDictOnExit(const aron::data::VariantPtr &) override
Definition: RemoteGuiAronDataVisitor.h:47
armarx::armem::server::RemoteGuiAronDataVisitor::visitDouble
void visitDouble(const aron::data::VariantPtr &d) override
Definition: RemoteGuiAronDataVisitor.h:79
armarx::armem::server::RemoteGuiAronDataVisitor::Group::nextRow
int nextRow
Definition: RemoteGuiAronDataVisitor.h:28
armarx::armem::server
Definition: GraspMemory.cpp:33
armarx::armem::server::RemoteGuiAronDataVisitor::visitBool
void visitBool(const aron::data::VariantPtr &b) override
Definition: RemoteGuiAronDataVisitor.h:71
armarx::armem::server::RemoteGuiAronDataVisitor::visitString
void visitString(const aron::data::VariantPtr &string) override
Definition: RemoteGuiAronDataVisitor.h:111
armarx::armem::server::RemoteGuiAronDataVisitor::visitEnter
bool visitEnter(const std::string &key, const std::string &type, size_t size)
Definition: RemoteGuiAronDataVisitor.cpp:17
armarx::armem::server::RemoteGuiAronDataVisitor::Label
armarx::RemoteGui::Client::Label Label
Definition: RemoteGuiAronDataVisitor.h:20
VariantVisitor.h
armarx::aron::data::RecursiveConstVariantVisitor
Definition: VariantVisitor.h:121
armarx::armem::server::RemoteGuiAronDataVisitor::visitUnknown
void visitUnknown(const aron::data::VariantPtr &unknown) override
Definition: RemoteGuiAronDataVisitor.h:128
armarx::armem::server::RemoteGuiAronDataVisitor::visitLong
void visitLong(const aron::data::VariantPtr &l) override
Definition: RemoteGuiAronDataVisitor.h:103
Widgets.h
armarx::armem::server::RemoteGuiAronDataVisitor::Group::groupBox
GroupBox groupBox
Definition: RemoteGuiAronDataVisitor.h:26
cxxopts::String
std::string String
Definition: cxxopts.hpp:192
armarx::armem::server::RemoteGuiAronDataVisitor::visitDictOnEnter
void visitDictOnEnter(const aron::data::VariantPtr &n) override
Definition: RemoteGuiAronDataVisitor.h:38
Logging.h
armarx::armem::server::RemoteGuiAronDataVisitor::Group
Definition: RemoteGuiAronDataVisitor.h:22
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33