kDB: Knowledge DataBase
Loading...
Searching...
No Matches
FocusNodeCollection.h
1#pragma once
2
3#include <kDB/Forward.h>
4
5#include <QExplicitlySharedDataPointer>
6
7#include <knowCore/ConstrainedValue.h>
8#include <knowCore/UriList.h>
9
10#include <kDB/Repository/Connection.h>
11
12#include "FocusNode.h"
13
14namespace kDB::Repository::RDF
15{
21 {
22 friend class kDB::Repository::Connection;
23 private:
24 static cres_qresult<void> initialise(const Connection& _connection);
25 public:
28 FocusNodeCollection operator=(const FocusNodeCollection& _rhs);
30 public:
31 bool operator==(const FocusNodeCollection& _collection) const;
32 public:
38 static cres_qresult<FocusNodeCollection> get(const kDB::Repository::Connection& _connection,
39 const knowCore::Uri& _collection_uri);
44 static cres_qresult<FocusNodeCollection> create(const kDB::Repository::Connection& _connection,
45 const knowCore::Uri& _graph,
46 const knowCore::Uri& _collection_type,
47 const knowCore::UriList& _contained_types);
53 static cres_qresult<FocusNodeCollection>
54 getOrCreate(const kDB::Repository::Connection& _connection, const knowCore::Uri& _graph,
55 const knowCore::Uri& _collection_type, const knowCore::UriList& _contained_types);
56
61
66
70 static cres_qresult<knowCore::UriList>
72 const knowCore::Uri& _focus_node_type);
76 static cres_qresult<knowCore::UriList>
78 const knowCore::Uri& _focus_node);
79 public:
80 static cres_qresult<void>
81 registerCollection(const kDB::Repository::QueryConnectionInfo& _connection,
82 const knowCore::Uri& _view_graph, const knowCore::Uri& _collection_type,
83 const knowCore::UriList& _contained_types);
84 public:
88 bool isValid() const;
92 bool isReadOnly() const;
96 cres_qresult<knowCore::UriList> containedTypes() const;
100 cres_qresult<knowCore::Uri> collectionType() const;
104 knowCore::Uri uri() const;
112 cres_qresult<std::size_t> count() const;
116 cres_qresult<std::size_t> count(const knowCore::Uri& _type) const;
120 cres_qresult<FocusNode> focusNode(const knowCore::Uri& _focusNodeUri) const;
124 cres_qresult<bool> hasFocusNode(const knowCore::Uri& _focusNodeUri,
125 const knowCore::Uri& _typeUri) const;
129 cres_qresult<QList<FocusNode>> all() const;
133 cres_qresult<QList<FocusNode>> all(const knowCore::Uri& _typeUri) const;
135 {
136 OperatorOptions() : intersectsPrecision(0.0) {}
137 OperatorOptions(double _intersectsPrecision) : intersectsPrecision(_intersectsPrecision) {}
138 double intersectsPrecision;
139 };
147 cres_qresult<QList<FocusNode>>
148 focusNodes(const knowCore::UriList& _default_datatypes,
149 const QList<QPair<knowCore::Uri, knowCore::ConstrainedValue>>& _constraints,
150 const OperatorOptions& _operatorOptions = OperatorOptions()) const;
154 cres_qresult<FocusNode> createFocusNode(const knowCore::Uri& _typeUri,
155 const knowCore::ValueHash& _properties,
156 const knowCore::Uri& _focusNodeUri);
157 private:
158 struct Private;
159 QExplicitlySharedDataPointer<Private> d;
160 FocusNodeCollection(const QExplicitlySharedDataPointer<Private>& _d);
165 static void clearCache();
166 };
167
168 template<typename _TDerive_>
170
171 template<typename _TDerive_>
173 {
174 public:
175 using Derive = _TDerive_;
176 using ValueType = typename FocusNodeCollectionTrait<Derive>::ValueType;
177 public:
182 static cres_qresult<Derive> get(const kDB::Repository::Connection& _connection,
183 const knowCore::Uri& _graph)
184 {
185 Derive c;
186 cres_try(c.m_focus_node_collection, FocusNodeCollection::get(_connection, _graph));
187 return cres_success(c);
188 }
189
195 static cres_qresult<Derive> create(const kDB::Repository::Connection& _connection,
196 const knowCore::Uri& _graph)
197 {
198 Derive c;
199 cres_try(c.m_focus_node_collection,
200 FocusNodeCollection::create(_connection, _graph, Derive::collectionType(),
201 Derive::containedTypes()));
202 return cres_success(c);
203 }
204
209 static cres_qresult<Derive> getOrCreate(const kDB::Repository::Connection& _connection,
210 const knowCore::Uri& _graph)
211 {
212 Derive c;
213 cres_try(c.m_focus_node_collection,
214 FocusNodeCollection::getOrCreate(_connection, _graph, Derive::collectionType(),
215 Derive::containedTypes()));
216 clog_debug_vn(c.isValid(), c.uri());
217 return cres_success(c);
218 }
219 public:
220 bool operator==(const Derive& _rhs) const
221 {
222 return m_focus_node_collection == _rhs.m_focus_node_collection;
223 }
224 public:
228 bool isValid() const { return m_focus_node_collection.isValid(); }
232 bool isReadOnly() const { return m_focus_node_collection.isReadOnly(); }
236 knowCore::Uri uri() const { return m_focus_node_collection.uri(); }
240 kDB::Repository::Connection connection() const { return m_focus_node_collection.connection(); }
244 cres_qresult<std::size_t> count() const
245 {
246 return m_focus_node_collection.count(Derive::primaryType());
247 }
251 cres_qresult<QList<ValueType>> all() const
252 {
254 cres_try(QList<FocusNode> fns, m_focus_node_collection.all());
255 for(const FocusNode& node : fns)
256 {
257 cres_try(ValueType ds, ValueType::fromFocusNode(node));
258 all.push_back(ds);
259 }
260 return cres_success(all);
261 }
262 static cres_qresult<void>
263 registerCollection(const kDB::Repository::QueryConnectionInfo& _connection)
264 {
265 return FocusNodeCollection::registerCollection(_connection, Derive::allFocusNodesView(),
266 Derive::collectionType(),
267 Derive::containedTypes());
268 }
269 protected:
270 operator Derive() const { return Derive(*this); }
271 cres_qresult<ValueType> focusNode(const knowCore::Uri& _uri) const
272 {
273 cres_try(FocusNode fn, m_focus_node_collection.focusNode(_uri));
274 cres_try(ValueType vt, ValueType::fromFocusNode(fn));
275 return cres_success(vt);
276 }
277 cres_qresult<bool> hasFocusNode(const knowCore::Uri& _focusNodeUri,
278 const knowCore::Uri& _typeUri = Derive::primaryType()) const
279 {
280 return m_focus_node_collection.hasFocusNode(_focusNodeUri, _typeUri);
281 }
282 cres_qresult<QList<ValueType>>
283 focusNodes(const QList<QPair<knowCore::Uri, knowCore::ConstrainedValue>>& _constraints,
284 const FocusNodeCollection::OperatorOptions& _operatorOptions) const
285 {
286 cres_try(knowCore::UriList default_datatypes, Derive::defaultDatatypes(_constraints));
287 return focusNodes(default_datatypes, _constraints, _operatorOptions);
288 }
289 template<typename... _TArgs_>
290 cres_qresult<QList<ValueType>> focusNodes(const knowCore::Uri& _uri,
291 const knowCore::ConstrainedValue& _constraint,
292 const _TArgs_&... _args) const
293 {
296 buildFocusNodeConstraints(&constraints, &operatorOptions, _uri, _constraint, _args...);
297 cres_try(knowCore::UriList default_datatypes, Derive::defaultDatatypes(constraints));
298 return focusNodes(default_datatypes, constraints, operatorOptions);
299 }
300
301 cres_qresult<ValueType> createFocusNode(const knowCore::Uri& _typeUri,
302 const knowCore::ValueHash& _properties,
303 const knowCore::Uri& _focusNodeUri)
304 {
305 cres_try(FocusNode fn,
306 m_focus_node_collection.createFocusNode(_typeUri, _properties, _focusNodeUri));
307 return ValueType::fromFocusNode(fn);
308 }
309 FocusNodeCollection& focusNodeCollection() { return m_focus_node_collection; }
310 const FocusNodeCollection& focusNodeCollection() const { return m_focus_node_collection; }
311 private:
312 cres_qresult<QList<ValueType>>
313 focusNodes(const knowCore::UriList& _default_datatypes,
314 const QList<QPair<knowCore::Uri, knowCore::ConstrainedValue>>& _constraints,
315 const FocusNodeCollection::OperatorOptions& _operatorOptions) const
316 {
317 cres_try(QList<FocusNode> nodes, m_focus_node_collection.focusNodes(
318 _default_datatypes, _constraints, _operatorOptions));
320 for(const FocusNode& node : nodes)
321 {
322 cres_try(ValueType vt, ValueType::fromFocusNode(node));
323 rs.append(vt);
324 }
325 return cres_success(rs);
326 }
327
328 template<typename... _TArgs_>
329 void buildFocusNodeConstraints(
330 QList<QPair<knowCore::Uri, knowCore::ConstrainedValue>>* _constraints,
331 FocusNodeCollection::OperatorOptions* _operatorOptions, const knowCore::Uri& _uri,
332 const knowCore::ConstrainedValue& _constraint, const _TArgs_&... _args) const
333 {
334 _constraints->append({_uri, _constraint});
335 buildFocusNodeConstraints(_constraints, _operatorOptions, _args...);
336 }
337
338 void
339 buildFocusNodeConstraints(QList<QPair<knowCore::Uri, knowCore::ConstrainedValue>>*,
341 const FocusNodeCollection::OperatorOptions& _operatorOptions) const
342 {
343 *_out_oo = _operatorOptions;
344 }
345
346 void buildFocusNodeConstraints(QList<QPair<knowCore::Uri, knowCore::ConstrainedValue>>*,
348 {
349 }
350 private:
351 FocusNodeCollection m_focus_node_collection;
352 };
353
354} // namespace kDB::Repository::RDF
Definition Revision.h:9
Definition Connection.h:26
Definition QueryConnectionInfo.h:8
Definition FocusNodeCollection.h:173
bool isReadOnly() const
Definition FocusNodeCollection.h:232
static cres_qresult< Derive > getOrCreate(const kDB::Repository::Connection &_connection, const knowCore::Uri &_graph)
Definition FocusNodeCollection.h:209
static cres_qresult< Derive > get(const kDB::Repository::Connection &_connection, const knowCore::Uri &_graph)
Definition FocusNodeCollection.h:182
static cres_qresult< Derive > create(const kDB::Repository::Connection &_connection, const knowCore::Uri &_graph)
Definition FocusNodeCollection.h:195
kDB::Repository::Connection connection() const
Definition FocusNodeCollection.h:240
knowCore::Uri uri() const
Definition FocusNodeCollection.h:236
cres_qresult< std::size_t > count() const
Definition FocusNodeCollection.h:244
bool isValid() const
Definition FocusNodeCollection.h:228
cres_qresult< QList< ValueType > > all() const
Definition FocusNodeCollection.h:251
Definition FocusNodeCollection.h:21
bool isReadOnly() const
Definition FocusNodeCollection.cpp:298
static cres_qresult< knowCore::UriList > allCollectionUris(const kDB::Repository::QueryConnectionInfo &_connection, const knowCore::Uri &_focus_node_type)
Definition FocusNodeCollection.cpp:210
cres_qresult< std::size_t > count() const
Definition FocusNodeCollection.cpp:320
cres_qresult< QList< FocusNode > > all() const
Definition FocusNodeCollection.cpp:390
static cres_qresult< FocusNodeCollection > getOrCreate(const kDB::Repository::Connection &_connection, const knowCore::Uri &_graph, const knowCore::Uri &_collection_type, const knowCore::UriList &_contained_types)
Definition FocusNodeCollection.cpp:164
cres_qresult< FocusNode > focusNode(const knowCore::Uri &_focusNodeUri) const
Definition FocusNodeCollection.cpp:351
cres_qresult< QList< FocusNode > > focusNodes(const knowCore::UriList &_default_datatypes, const QList< QPair< knowCore::Uri, knowCore::ConstrainedValue > > &_constraints, const OperatorOptions &_operatorOptions=OperatorOptions()) const
Definition FocusNodeCollection.cpp:438
cres_qresult< FocusNode > createFocusNode(const knowCore::Uri &_typeUri, const knowCore::ValueHash &_properties, const knowCore::Uri &_focusNodeUri)
Definition FocusNodeCollection.cpp:522
kDB::Repository::Connection connection() const
Definition FocusNodeCollection.cpp:312
static cres_qresult< FocusNodeCollection > get(const kDB::Repository::Connection &_connection, const knowCore::Uri &_collection_uri)
Definition FocusNodeCollection.cpp:90
static FocusNodeCollection allCollections(const kDB::Repository::Connection &_connection)
Definition FocusNodeCollection.cpp:190
cres_qresult< bool > hasFocusNode(const knowCore::Uri &_focusNodeUri, const knowCore::Uri &_typeUri) const
Definition FocusNodeCollection.cpp:375
static FocusNodeCollection allFocusNodes(const kDB::Repository::Connection &_connection)
Definition FocusNodeCollection.cpp:200
cres_qresult< knowCore::Uri > collectionType() const
Definition FocusNodeCollection.cpp:305
static cres_qresult< FocusNodeCollection > create(const kDB::Repository::Connection &_connection, const knowCore::Uri &_graph, const knowCore::Uri &_collection_type, const knowCore::UriList &_contained_types)
Definition FocusNodeCollection.cpp:110
cres_qresult< knowCore::UriList > containedTypes() const
Definition FocusNodeCollection.cpp:300
knowCore::Uri uri() const
Definition FocusNodeCollection.cpp:310
bool isValid() const
Definition FocusNodeCollection.cpp:286
static cres_qresult< knowCore::UriList > allCollectionUrisWith(const kDB::Repository::QueryConnectionInfo &_connection, const knowCore::Uri &_focus_node)
Definition FocusNodeCollection.cpp:231
Definition FocusNode.h:34
Definition ConstrainedValue.h:15
Definition UriList.h:9
Definition Uri.h:15
Definition ValueHash.h:13
Definition FocusNodeCollection.cpp:32
Definition FocusNodeCollection.h:169