Syndication

statement.cpp
1 /*
2  This file is part of the syndication library
3  SPDX-FileCopyrightText: 2006 Frank Osterfeld <[email protected]>
4 
5  SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #include "statement.h"
9 #include "literal.h"
10 #include "model.h"
11 #include "model_p.h"
12 #include "property.h"
13 #include "resource.h"
14 
15 #include <QString>
16 #include <QWeakPointer>
17 
18 namespace Syndication
19 {
20 namespace RDF
21 {
22 class SYNDICATION_NO_EXPORT Statement::StatementPrivate
23 {
24 public:
25  uint subjectID;
26  uint predicateID;
27  uint objectID;
29 
30  bool operator==(const StatementPrivate &other) const
31  {
32  // FIXME: use better check that works also with multiple models
33  return subjectID == other.subjectID && predicateID == other.predicateID && objectID == other.objectID;
34  }
35 };
36 
37 Statement::Statement()
38  : d(new StatementPrivate)
39 {
40  d->subjectID = 0;
41  d->predicateID = 0;
42  d->objectID = 0;
43 }
44 
45 Statement::Statement(const Statement &other)
46 {
47  d = other.d;
48 }
49 
50 Statement::Statement(ResourcePtr subject, PropertyPtr predicate, NodePtr object)
51  : d(new StatementPrivate)
52 {
53  d->model = subject->model().d;
54  d->subjectID = subject->id();
55  d->predicateID = predicate->id();
56  d->objectID = object->id();
57 }
58 
59 Statement::~Statement()
60 {
61 }
62 
63 Statement &Statement::operator=(const Statement &other)
64 {
65  d = other.d;
66  return *this;
67 }
68 
69 bool Statement::operator==(const Statement &other) const
70 {
71  if (!d || !other.d) {
72  return d == other.d;
73  }
74 
75  return *d == *(other.d);
76 }
77 
78 bool Statement::isNull() const
79 {
80  return d->subjectID == 0;
81 }
82 
83 ResourcePtr Statement::subject() const
84 {
85  const QSharedPointer<Model::ModelPrivate> m = d ? d->model.toStrongRef() : QSharedPointer<Model::ModelPrivate>();
86  return m ? m->resourceByID(d->subjectID) : ResourcePtr(new Resource);
87 }
88 
89 PropertyPtr Statement::predicate() const
90 {
91  const QSharedPointer<Model::ModelPrivate> m = d ? d->model.toStrongRef() : QSharedPointer<Model::ModelPrivate>();
92  return m ? m->propertyByID(d->predicateID) : PropertyPtr(new Property());
93 }
94 
95 NodePtr Statement::object() const
96 {
97  const QSharedPointer<Model::ModelPrivate> m = d ? d->model.toStrongRef() : QSharedPointer<Model::ModelPrivate>();
98  return m ? m->nodeByID(d->objectID) : NodePtr(LiteralPtr(new Literal()));
99 }
100 
101 ResourcePtr Statement::asResource() const
102 {
103  const QSharedPointer<Model::ModelPrivate> m = d ? d->model.toStrongRef() : QSharedPointer<Model::ModelPrivate>();
104 
105  if (isNull() || !m || !m->nodeByID(d->objectID)->isResource()) {
106  return ResourcePtr(new Resource);
107  }
108 
109  return m->resourceByID(d->objectID);
110 }
111 
112 QString Statement::asString() const
113 {
114  if (isNull()) {
115  return QString();
116  }
117 
118  const QSharedPointer<Model::ModelPrivate> m = d ? d->model.toStrongRef() : QSharedPointer<Model::ModelPrivate>();
119  return m ? m->nodeByID(d->objectID)->text() : QString();
120 }
121 
122 } // namespace RDF
123 } // namespace Syndication
bool operator==(const Qt3DRender::QGraphicsApiFilter &reference, const Qt3DRender::QGraphicsApiFilter &sample)
Property
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Jun 6 2023 03:56:27 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.