OpenTwin 0.1
OpenTwin
 
Loading...
Searching...
No Matches
EntityResultTableData.hpp
Go to the documentation of this file.
1
3#include "DataBase.h"
4#include "OldTreeIcon.h"
5
6#include <exception>
7#include <bsoncxx/builder/basic/array.hpp>
8
10
12
13template <class T>
14EntityResultTableData<T>::EntityResultTableData(ot::UID ID, EntityBase *parent, EntityObserver *obs, ModelState *ms, ClassFactoryHandler* factory, const std::string &owner) :
15 EntityBase(ID, parent, obs, ms, factory, owner)
16{
17 className = className + "_" + ot::TemplateTypeName<T>::getTypeName();
18}
19
20template <class T>
21EntityResultTableData<T>::~EntityResultTableData()
22{
23}
24
25template <class T>
26bool EntityResultTableData<T>::getEntityBox(double &xmin, double &xmax, double &ymin, double &ymax, double &zmin, double &zmax)
27{
28 return false;
29}
30
31template <class T>
32void EntityResultTableData<T>::StoreToDataBase(void)
33{
34 EntityBase::StoreToDataBase();
35}
36
37template <class T>
38void EntityResultTableData<T>::AddStorageData(bsoncxx::builder::basic::document &storage)
39{
40 // We store the parent class information first
41 EntityBase::AddStorageData(storage);
42
43 auto headerArray = bsoncxx::builder::basic::array();
44
45 for (auto &text : header)
46 {
47 headerArray.append(text);
48 }
49
50 auto dataArray = bsoncxx::builder::basic::array();
51
52 for (unsigned int iRow = 0; iRow < getNumberOfRows(); iRow++)
53 {
54 for (unsigned int iCol = 0; iCol < getNumberOfColumns(); iCol++)
55 {
56 dataArray.append(getValue(iRow, iCol));
57 }
58 }
59
60 // Now add the actual text data
61
62 storage.append(
63 bsoncxx::builder::basic::kvp("NumberColums", (int) getNumberOfColumns()),
64 bsoncxx::builder::basic::kvp("NumberRows", (int) getNumberOfRows()),
65 bsoncxx::builder::basic::kvp("Header", headerArray),
66 bsoncxx::builder::basic::kvp("Data", dataArray)
67 );
68}
69
70template <class T>
71void EntityResultTableData<T>::readSpecificDataFromDataBase(bsoncxx::document::view &doc_view, std::map<ot::UID, EntityBase *> &entityMap)
72{
73 // We read the parent class information first
74 EntityBase::readSpecificDataFromDataBase(doc_view, entityMap);
75
76 // Now read the text data
77 header.clear();
78 data.clear();
79
80 // Now load the data from the storage
81 unsigned int numberCols = doc_view["NumberColums"].get_int32();
82 unsigned int numberRows = doc_view["NumberRows"].get_int32();
83
84 setNumberOfColumns(numberCols);
85 setNumberOfRows(numberRows);
86
87 auto headerArray = doc_view["Header"].get_array().value;
88 auto dataArray = doc_view["Data"].get_array().value;
89
90 unsigned int iCol = 0;
91 for (const auto& text : headerArray)
92 {
93 setHeaderText(iCol, text.get_utf8().value.data());
94 iCol++;
95 }
96
97 unsigned int iRow = 0;
98 iCol = 0;
99
100 for (const auto& data : dataArray)
101 {
102
103 setValue(iRow, iCol, BsonArrayTypeGetterWrapper<T>::getValue(data));
104
105 iCol++;
106 if (iCol == numberCols)
107 {
108 iRow++;
109 iCol = 0;
110 }
111 }
112
113 resetModified();
114}
115
116template <class T>
117void EntityResultTableData<T>::removeChild(EntityBase *child)
118{
119 EntityBase::removeChild(child);
120}
121
122template <class T>
123void EntityResultTableData<T>::setNumberOfColumns(uint64_t cols)
124{
125 header.resize(cols, "");
126
127 for (unsigned int iRow = 0; iRow < getNumberOfRows(); iRow++)
128 {
129 data[iRow].resize(cols);
130 }
131}
132
133template <class T>
134void EntityResultTableData<T>::setNumberOfRows(uint64_t rows)
135{
136 uint64_t oldRows = getNumberOfRows();
137
138 data.resize(rows);
139
140 if (rows > oldRows)
141 {
142 for (uint64_t iRow = oldRows; iRow < rows; iRow++)
143 {
144 data[iRow].resize(getNumberOfColumns());
145 }
146 }
147}
148
149template <class T>
150void EntityResultTableData<T>::setHeaderText(unsigned int col, const std::string &text)
151{
152 assert(col < getNumberOfColumns());
153 header[col] = text;
154}
155
156template <class T>
157void EntityResultTableData<T>::setValue(unsigned int row, unsigned int col, T value)
158{
159 assert(row < getNumberOfRows());
160 assert(col < getNumberOfColumns());
161
162 data[row][col] = value;
163}
164template<class T>
165void EntityResultTableData<T>::setRow(unsigned int row, std::vector<T>& value)
166{
167 if (row >= getNumberOfRows())
168 {
169 throw std::runtime_error("Row index out of range.");
170 }
171 if (value.size() > getNumberOfColumns())
172 {
173 throw std::runtime_error("Vector has too many entries for the set number of columns.");
174 }
175
176 uint64_t i = 0;
177 for (i; i < value.size(); i++)
178 {
179 data[row][i] = value[i];
180 }
181 while (i < getNumberOfColumns())
182 {
183 data[row][i] = "";
184 i++;
185 }
186}
187
188template<class T>
189void EntityResultTableData<T>::setColumn(unsigned int column, std::vector<T>& value)
190{
191 if (column >= getNumberOfColumns())
192 {
193 throw std::runtime_error("Column index out of range.");
194 }
195 if (value.size() >= getNumberOfRows())
196 {
197 throw std::runtime_error("Vector has too many entries for the set number of rows.");
198 }
199
200 for (int i = 0; i < value.size(); i++)
201 {
202 data[i][column] = value[i];
203 }
204
205}
206
207template <class T>
208uint64_t EntityResultTableData<T>::getNumberOfRows(void)
209{
210 return (data.size());
211}
212
213template <class T>
214uint64_t EntityResultTableData<T>::getNumberOfColumns(void)
215{
216 return (header.size());
217}
218
219template <class T>
220std::string EntityResultTableData<T>::getHeaderText(unsigned int col)
221{
222 assert(col < getNumberOfColumns());
223 return header[col];
224}
225
226template <class T>
227T EntityResultTableData<T>::getValue(unsigned int row, unsigned int col)
228{
229 assert(row < getNumberOfRows());
230 assert(col < getNumberOfColumns());
231
232 return data[row][col];
233}
234
bsoncxx::types::value value
Definition DocumentManager.h:16
Template for getting a type name. Some type names are not system independent, hence the need to creat...
Definition BsonArrayTypeGetterWrapper.h:9
static std::string getTypeName()
Definition TemplateTypeName.hpp:9
UICORE_API_EXPORT QString text(UID _checkBoxUID)
Definition uiAPI.cpp:387
int ID
The ID datatype used for items.
Definition globalDataTypes.h:68
unsigned long UID
Unique identifier (32 bit unsigned integer)
Definition CoreTypes.h:27