kDB: Knowledge DataBase
Loading...
Searching...
No Matches
FocusNode.h
1#pragma once
2
3#include <QCborMap>
4
5#include <knowCore/ValueList.h>
6
7#include <kDB/Repository/Connection.h>
8#include <kDB/Repository/Transaction.h>
9
10#include "FocusNodeDeclaration.h"
11
12namespace kDB::Repository::RDF
13{
34 {
35 friend class FocusNodeCollection;
36 public:
37 FocusNode();
38 FocusNode(const FocusNode& _rhs);
39 FocusNode& operator=(const FocusNode& _rhs);
40 FocusNode(const kDB::Repository::Connection& _connection, const knowCore::Uri& _graph,
41 const knowCore::Uri& _object_uri, const FocusNodeDeclaration& _declaration);
42 ~FocusNode();
43 bool operator==(const FocusNode& _rhs) const;
47 cres_qresult<bool> exists() const;
51 bool isValid() const;
59 knowCore::Uri uri() const;
63 knowCore::Uri graph() const;
71 cres_qresult<bool> hasProperty(const knowCore::Uri& _property,
72 const Transaction& _transaction = Transaction()) const;
76 cres_qresult<knowCore::Value> property(const knowCore::Uri& _property,
77 const Transaction& _transaction = Transaction()) const;
81 template<typename _T_>
82 requires(not std::is_base_of_v<knowCore::Value, _T_>)
83 cres_qresult<_T_> property(const knowCore::Uri& _property) const;
87 cres_qresult<void> setProperty(const knowCore::Uri& _property, const knowCore::Value& _value,
88 const Transaction& _transaction = Transaction()) const;
92 cres_qresult<void> addPropertyToList(const knowCore::Uri& _property,
93 const knowCore::Value& _value,
94 const Transaction& _transaction = Transaction()) const;
98 cres_qresult<void>
99 removePropertyFromList(const knowCore::Uri& _property, const knowCore::Value& _value,
100 const Transaction& _transaction = Transaction()) const;
104 cres_qresult<knowCore::ValueList> propertyList(const knowCore::Uri& _property,
105 const Transaction& _transaction
106 = Transaction()) const;
107
111 cres_qresult<void> setPropertyInMap(const knowCore::Uri& _property, const knowCore::Uri& _key,
112 const knowCore::Value& _value,
113 const Transaction& _transaction = Transaction()) const;
117 cres_qresult<knowCore::ValueHash> propertyMap(const knowCore::Uri& _property,
118 const Transaction& _transaction
119 = Transaction()) const;
123 cres_qresult<knowCore::Value>
124 propertyMapValue(const knowCore::Uri& _property, const knowCore::Uri& _key,
125 const Transaction& _transaction = Transaction()) const;
126
130 template<typename _T_>
131 requires(not std::is_base_of_v<knowCore::Value, _T_>)
132 cres_qresult<void> setProperty(const knowCore::Uri& _property, const _T_& _value,
133 const Transaction& _transaction = Transaction()) const
134 {
135 return setProperty(_property, knowCore::Value::fromValue(_value), _transaction);
136 }
140 cres_qresult<QCborMap> toCborMap() const;
144 static cres_qresult<FocusNode> fromCborMap(const kDB::Repository::Connection& _connection,
145 const knowCore::Uri& _graph, const QCborMap& _map);
146 private:
150 cres_qresult<void> setProperty(const knowCore::Uri& _property, const knowCore::Value& _value,
151 const Transaction& _transaction,
152 bool _allow_constant_changes) const;
153 cres_qresult<void> addPropertyToList(const knowCore::Uri& _property,
154 const knowCore::Value& _value,
155 const Transaction& _transaction,
156 bool _allow_constant_changes) const;
157 cres_qresult<void> setPropertyInMap(const knowCore::Uri& _property, const knowCore::Uri& _key,
158 const knowCore::Value& _value,
159 const Transaction& _transaction,
160 bool _allow_constant_changes) const;
161
165 static cres_qresult<FocusNode> create(const kDB::Repository::QueryConnectionInfo& _connection,
166 const knowCore::Uri& _graph_uri,
167 const knowCore::Uri& _typeUri,
168 const knowCore::ValueHash& _properties,
169 const knowCore::Uri& _focusNodeUri);
170 private:
171 struct Private;
172 QExplicitlySharedDataPointer<Private> d;
173 };
174 template<typename _T_>
175 requires(not std::is_base_of_v<knowCore::Value, _T_>)
176 inline cres_qresult<_T_> FocusNode::property(const knowCore::Uri& _property) const
177 {
178 cres_try(knowCore::Value value, property(_property));
179 return value.value<_T_>();
180 }
181
182 template<typename _TDerive_>
184 {
185 protected:
187 FocusNodeWrapper(const FocusNodeWrapper& _rhs) : m_focus_node(_rhs.m_focus_node) {}
188 public:
189 _TDerive_& operator=(const _TDerive_& _rhs)
190 {
191 m_focus_node = _rhs.m_focus_node;
192 return static_cast<_TDerive_&>(*this);
193 }
194
195 bool operator==(const FocusNodeWrapper& _rhs) const
196 {
197 return m_focus_node == _rhs.m_focus_node;
198 }
199 protected:
200 void setFocusNode(const FocusNode& _fn) { m_focus_node = _fn; }
201 const FocusNode& focusNodeRef() const { return m_focus_node; }
202 FocusNode& focusNodeRef() { return m_focus_node; }
203 public:
207 cres_qresult<bool> exists() const { return m_focus_node.exists(); }
208 knowCore::Uri graph() const { return m_focus_node.graph(); }
209 knowCore::Uri uri() const { return m_focus_node.uri(); }
210 knowCore::Uri type() const { return m_focus_node.declaration().type(); }
214 kDB::Repository::Connection connection() const { return m_focus_node.connection(); }
218 cres_qresult<bool> hasProperty(const knowCore::Uri& _property) const
219 {
220 return m_focus_node.hasProperty(_property);
221 }
225 cres_qresult<knowCore::Value> property(const knowCore::Uri& _property) const
226 {
227 return m_focus_node.property(_property);
228 }
232 template<typename _T_>
233 requires(not std::is_base_of_v<knowCore::Value, _T_>)
234 cres_qresult<_T_> property(const knowCore::Uri& _property) const
235 {
236 return m_focus_node.property<_T_>(_property);
237 }
241 cres_qresult<void> setProperty(const knowCore::Uri& _property,
242 const knowCore::Value& _value) const
243 {
244 return m_focus_node.setProperty(_property, _value);
245 }
249 template<typename _T_>
250 requires(not std::is_base_of_v<knowCore::Value, _T_>)
251 cres_qresult<void> setProperty(const knowCore::Uri& _property, const _T_& _value) const
252 {
253 return m_focus_node.setProperty(_property, _value);
254 }
258 cres_qresult<void> addPropertyToList(const knowCore::Uri& _property,
259 const knowCore::Value& _value,
260 const Transaction& _transaction = Transaction()) const
261 {
262 return m_focus_node.addPropertyToList(_property, _value, _transaction);
263 }
267 cres_qresult<void> removePropertyFromList(const knowCore::Uri& _property,
268 const knowCore::Value& _value,
269 const Transaction& _transaction = Transaction()) const
270 {
271 return m_focus_node.removePropertyFromList(_property, _value, _transaction);
272 }
276 cres_qresult<knowCore::ValueList> propertyList(const knowCore::Uri& _property,
277 const Transaction& _transaction
278 = Transaction()) const
279 {
280 return m_focus_node.propertyList(_property, _transaction);
281 }
282
286 cres_qresult<void> setPropertyInMap(const knowCore::Uri& _property, const knowCore::Uri& _key,
287 const knowCore::Value& _value,
288 const Transaction& _transaction = Transaction()) const
289 {
290 return m_focus_node.setPropertyInMap(_property, _key, _value, _transaction);
291 }
295 cres_qresult<knowCore::ValueHash> propertyMap(const knowCore::Uri& _property,
296 const Transaction& _transaction
297 = Transaction()) const
298 {
299 return m_focus_node.propertyMap(_property, _transaction);
300 }
304 cres_qresult<knowCore::Value>
305 propertyMapValue(const knowCore::Uri& _property, const knowCore::Uri& _key,
306 const Transaction& _transaction = Transaction()) const
307 {
308 return m_focus_node.propertyMapValue(_property, _key, _transaction);
309 }
313 cres_qresult<QCborMap> toCborMap() const { return m_focus_node.toCborMap(); }
314 private:
315 FocusNode m_focus_node;
316 };
317} // namespace kDB::Repository::RDF
Definition Connection.h:26
Definition QueryConnectionInfo.h:8
Definition FocusNodeCollection.h:21
Definition FocusNodeDeclaration.h:17
knowCore::Uri type() const
Definition FocusNodeDeclaration.cpp:80
Definition FocusNode.h:184
kDB::Repository::Connection connection() const
Definition FocusNode.h:214
cres_qresult< bool > hasProperty(const knowCore::Uri &_property) const
Definition FocusNode.h:218
cres_qresult< void > addPropertyToList(const knowCore::Uri &_property, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:258
cres_qresult< knowCore::ValueHash > propertyMap(const knowCore::Uri &_property, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:295
cres_qresult< void > setProperty(const knowCore::Uri &_property, const _T_ &_value) const
Definition FocusNode.h:251
cres_qresult< bool > exists() const
Definition FocusNode.h:207
cres_qresult< _T_ > property(const knowCore::Uri &_property) const
Definition FocusNode.h:234
cres_qresult< void > removePropertyFromList(const knowCore::Uri &_property, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:267
cres_qresult< knowCore::Value > property(const knowCore::Uri &_property) const
Definition FocusNode.h:225
cres_qresult< knowCore::ValueList > propertyList(const knowCore::Uri &_property, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:276
cres_qresult< QCborMap > toCborMap() const
Definition FocusNode.h:313
cres_qresult< void > setPropertyInMap(const knowCore::Uri &_property, const knowCore::Uri &_key, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:286
cres_qresult< void > setProperty(const knowCore::Uri &_property, const knowCore::Value &_value) const
Definition FocusNode.h:241
cres_qresult< knowCore::Value > propertyMapValue(const knowCore::Uri &_property, const knowCore::Uri &_key, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:305
Definition FocusNode.h:34
kDB::Repository::Connection connection() const
Definition FocusNode.cpp:100
cres_qresult< void > setProperty(const knowCore::Uri &_property, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:229
bool isValid() const
Definition FocusNode.cpp:46
knowCore::Uri graph() const
Definition FocusNode.cpp:98
cres_qresult< void > removePropertyFromList(const knowCore::Uri &_property, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:494
cres_qresult< void > setProperty(const knowCore::Uri &_property, const _T_ &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.h:132
cres_qresult< bool > hasProperty(const knowCore::Uri &_property, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:102
knowCore::Uri uri() const
Definition FocusNode.cpp:96
FocusNodeDeclaration declaration() const
Definition FocusNode.cpp:94
cres_qresult< void > setPropertyInMap(const knowCore::Uri &_property, const knowCore::Uri &_key, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:667
static cres_qresult< FocusNode > fromCborMap(const kDB::Repository::Connection &_connection, const knowCore::Uri &_graph, const QCborMap &_map)
Definition FocusNode.cpp:871
cres_qresult< knowCore::ValueHash > propertyMap(const knowCore::Uri &_property, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:754
cres_qresult< bool > exists() const
Definition FocusNode.cpp:68
cres_qresult< knowCore::Value > propertyMapValue(const knowCore::Uri &_property, const knowCore::Uri &_key, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:794
cres_qresult< knowCore::Value > property(const knowCore::Uri &_property, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:142
cres_qresult< void > addPropertyToList(const knowCore::Uri &_property, const knowCore::Value &_value, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:383
cres_qresult< knowCore::ValueList > propertyList(const knowCore::Uri &_property, const Transaction &_transaction=Transaction()) const
Definition FocusNode.cpp:599
cres_qresult< QCborMap > toCborMap() const
Definition FocusNode.cpp:846
Definition Transaction.h:19
Definition Uri.h:15
Definition ValueHash.h:13
Definition Value.h:21
static Value fromValue(const _T_ &_value)
Definition Value.h:241
cres_qresult< _T_ > value(TypeCheckingMode _conversion=TypeCheckingMode::Safe) const
Definition Value.h:353