• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

Nepomuk-Core

  • sources
  • kde-4.12
  • kdelibs
  • nepomuk-core
  • libnepomukcore
  • datamanagement
simpleresourcegraph.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Nepomuk KDE project.
3  Copyright (C) 2011 Sebastian Trueg <trueg@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) version 3, or any
9  later version accepted by the membership of KDE e.V. (or its
10  successor approved by the membership of KDE e.V.), which shall
11  act as a proxy defined in Section 6 of version 3 of the license.
12 
13  This library is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #include "simpleresourcegraph.h"
23 #include "simpleresource.h"
24 #include "datamanagement.h"
25 #include "storeresourcesjob.h"
26 
27 #include <QtCore/QSharedData>
28 #include <QtCore/QHash>
29 #include <QtCore/QString>
30 #include <QtCore/QUrl>
31 #include <QtCore/QDebug>
32 #include <QtCore/QDataStream>
33 
34 #include <Soprano/Graph>
35 
36 #include <KRandom>
37 
38 class Nepomuk2::SimpleResourceGraph::Private : public QSharedData
39 {
40 public:
41  QHash<QUrl, SimpleResource> resources;
42 };
43 
44 
45 Nepomuk2::SimpleResourceGraph::SimpleResourceGraph()
46  : d(new Private)
47 {
48 }
49 
50 Nepomuk2::SimpleResourceGraph::SimpleResourceGraph(const SimpleResource& resource)
51  : d(new Private)
52 {
53  insert(resource);
54 }
55 
56 Nepomuk2::SimpleResourceGraph::SimpleResourceGraph(const QList<SimpleResource>& resources)
57  : d(new Private)
58 {
59  Q_FOREACH(const SimpleResource& res, resources) {
60  insert(res);
61  }
62 }
63 
64 Nepomuk2::SimpleResourceGraph::SimpleResourceGraph(const QSet<SimpleResource>& resources)
65  : d(new Private)
66 {
67  Q_FOREACH(const SimpleResource& res, resources) {
68  insert(res);
69  }
70 }
71 
72 Nepomuk2::SimpleResourceGraph::SimpleResourceGraph(const SimpleResourceGraph& other)
73  : d(other.d)
74 {
75 }
76 
77 Nepomuk2::SimpleResourceGraph::~SimpleResourceGraph()
78 {
79 }
80 
81 Nepomuk2::SimpleResourceGraph & Nepomuk2::SimpleResourceGraph::operator=(const Nepomuk2::SimpleResourceGraph &other)
82 {
83  d = other.d;
84  return *this;
85 }
86 
87 void Nepomuk2::SimpleResourceGraph::insert(const SimpleResource &res)
88 {
89  d->resources.insert(res.uri(), res);
90 }
91 
92 Nepomuk2::SimpleResourceGraph& Nepomuk2::SimpleResourceGraph::operator<<(const SimpleResource &res)
93 {
94  insert(res);
95  return *this;
96 }
97 
98 void Nepomuk2::SimpleResourceGraph::remove(const QUrl &uri)
99 {
100  d->resources.remove(uri);
101 }
102 
103 void Nepomuk2::SimpleResourceGraph::remove(const SimpleResource &res)
104 {
105  if( contains( res ) )
106  remove( res.uri() );
107 }
108 
109 void Nepomuk2::SimpleResourceGraph::add(const QUrl &uri, const QUrl &property, const QVariant &value)
110 {
111  if(!uri.isEmpty()) {
112  d->resources[uri].setUri(uri);
113  d->resources[uri].addProperty(property, value);
114  }
115 }
116 
117 void Nepomuk2::SimpleResourceGraph::set(const QUrl &uri, const QUrl &property, const QVariant &value)
118 {
119  removeAll(uri, property);
120  add(uri, property, value);
121 }
122 
123 void Nepomuk2::SimpleResourceGraph::remove(const QUrl &uri, const QUrl &property, const QVariant &value)
124 {
125  QHash< QUrl, SimpleResource >::iterator it = d->resources.find( uri );
126  if( it != d->resources.end() ) {
127  it.value().remove(property, value);
128  }
129 }
130 
131 void Nepomuk2::SimpleResourceGraph::removeAll(const QUrl &uri, const QUrl &property, const QVariant &value)
132 {
133  if(!uri.isEmpty()) {
134  QHash< QUrl, SimpleResource >::iterator it = d->resources.find( uri );
135  if( it != d->resources.end() ) {
136  it.value().removeAll(property, value);
137  }
138  }
139  else {
140  for(QHash<QUrl, SimpleResource>::iterator it = d->resources.begin();
141  it != d->resources.end(); ++it) {
142  it->removeAll(property, value);
143  }
144  }
145 }
146 
147 bool Nepomuk2::SimpleResourceGraph::contains(const QUrl &uri) const
148 {
149  return d->resources.contains(uri);
150 }
151 
152 bool Nepomuk2::SimpleResourceGraph::containsAny(const QUrl &res, const QUrl &property) const
153 {
154  QHash< QUrl, SimpleResource >::const_iterator it = d->resources.constFind( res );
155  if( it == d->resources.constEnd() )
156  return false;
157 
158  return it.value().contains(property);
159 }
160 
161 bool Nepomuk2::SimpleResourceGraph::contains(const SimpleResource &res) const
162 {
163  QHash< QUrl, SimpleResource >::const_iterator it = d->resources.find( res.uri() );
164  if( it == d->resources.constEnd() )
165  return false;
166 
167  return res == it.value();
168 }
169 
170 Nepomuk2::SimpleResource Nepomuk2::SimpleResourceGraph::operator[](const QUrl &uri) const
171 {
172  return d->resources[uri];
173 }
174 
175 Nepomuk2::SimpleResource& Nepomuk2::SimpleResourceGraph::operator[](const QUrl &uri)
176 {
177  QHash<QUrl, SimpleResource>::iterator it = d->resources.find(uri);
178  if( it == d->resources.end() ) {
179  // One expects the uri to be set if one uses operator[]
180  SimpleResource res( uri );
181  it = d->resources.insert( uri, res );
182  }
183 
184  return it.value();
185 }
186 
187 QSet<Nepomuk2::SimpleResource> Nepomuk2::SimpleResourceGraph::toSet() const
188 {
189  return QSet<SimpleResource>::fromList(toList());
190 }
191 
192 QList<Nepomuk2::SimpleResource> Nepomuk2::SimpleResourceGraph::toList() const
193 {
194  return d->resources.values();
195 }
196 
197 QList<QUrl> Nepomuk2::SimpleResourceGraph::allResourceUris() const
198 {
199  return d->resources.keys();
200 }
201 
202 void Nepomuk2::SimpleResourceGraph::clear()
203 {
204  d->resources.clear();
205 }
206 
207 bool Nepomuk2::SimpleResourceGraph::isEmpty() const
208 {
209  return d->resources.isEmpty();
210 }
211 
212 int Nepomuk2::SimpleResourceGraph::count() const
213 {
214  return d->resources.count();
215 }
216 
217 namespace {
218 QVariant nodeToVariant(const Soprano::Node& node) {
219  if(node.isResource())
220  return node.uri();
221  else if(node.isBlank())
222  return QUrl(QLatin1String("_:") + node.identifier());
223  else
224  return node.literal().variant();
225 }
226 }
227 
228 Nepomuk2::SimpleResourceGraph &
229 Nepomuk2::SimpleResourceGraph::operator+=( const SimpleResourceGraph & graph )
230 {
231  if ( this == &graph )
232  return *this;
233 
234  if ( d->resources.size() == 0 ) {
235  d->resources = graph.d->resources;
236  }
237  else {
238  QHash<QUrl, SimpleResource>::const_iterator it;
239  QHash<QUrl, SimpleResource>::iterator fit;
240  for (it = graph.d->resources.begin();
241  it!= graph.d->resources.end();
242  ++it
243  )
244  {
245  fit = d->resources.find(it.key());
246  if ( fit == d->resources.end() ) {
247  // Not found
248  d->resources[it.key()] = it.value();
249  }
250  else {
251  // Found. Should merge
252  fit.value().addProperties(it.value().properties());
253  }
254  }
255  }
256 
257  return *this;
258 }
259 
260 
261 void Nepomuk2::SimpleResourceGraph::addStatement(const Soprano::Statement &s)
262 {
263  const QUrl uri = nodeToVariant(s.subject()).toUrl();
264  const QVariant value = nodeToVariant(s.object());
265  d->resources[uri].setUri(uri);
266  d->resources[uri].addProperty(s.predicate().uri(), value);
267 }
268 
269 void Nepomuk2::SimpleResourceGraph::addStatement(const Soprano::Node& subject, const Soprano::Node& predicate, const Soprano::Node& object)
270 {
271  addStatement( Soprano::Statement( subject, predicate, object ) );
272 }
273 
274 Soprano::Graph Nepomuk2::SimpleResourceGraph::toStatementGraph() const
275 {
276  Soprano::Graph g;
277  for(QHash<QUrl, SimpleResource>::const_iterator it = d->resources.constBegin();
278  it != d->resources.constEnd(); ++it) {
279  g += it.value().toStatementList();
280  }
281  return g;
282 }
283 
284 Nepomuk2::StoreResourcesJob* Nepomuk2::SimpleResourceGraph::save(const KComponentData& component) const
285 {
286  return Nepomuk2::storeResources(*this, Nepomuk2::IdentifyNew, Nepomuk2::NoStoreResourcesFlags, QHash<QUrl, QVariant>(), component);
287 }
288 
289 QDebug Nepomuk2::operator<<(QDebug dbg, const Nepomuk2::SimpleResourceGraph& graph)
290 {
291  dbg.nospace() << "SimpleResourceGraph(" << endl;
292  foreach(const SimpleResource& res, graph.toList()) {
293  dbg << res << endl;
294  }
295  dbg.nospace() << ")" << endl;
296  return dbg;
297 }
298 
299 QDataStream & Nepomuk2::operator<<(QDataStream & stream, const Nepomuk2::SimpleResourceGraph& graph)
300 {
301  stream << graph.toList();
302  return stream;
303 }
304 
305 QDataStream & Nepomuk2::operator>>(QDataStream & stream, Nepomuk2::SimpleResourceGraph& graph)
306 {
307  QList<SimpleResource> l;
308  stream >> l;
309  graph = SimpleResourceGraph(l);
310  return stream;
311 }
312 
313 
314 bool Nepomuk2::SimpleResourceGraph::operator!=( const SimpleResourceGraph & rhs) const
315 {
316  return !(*this == rhs);
317 }
318 
319 
320 bool Nepomuk2::SimpleResourceGraph::operator==( const SimpleResourceGraph & rhs) const
321 {
322  return (d->resources == rhs.d->resources);
323 }
storeresourcesjob.h
Nepomuk2::SimpleResourceGraph::save
StoreResourcesJob * save(const KComponentData &component=KGlobal::mainComponent()) const
Save the graph to the Nepomuk database.
Definition: simpleresourcegraph.cpp:284
Nepomuk2::SimpleResourceGraph::addStatement
void addStatement(const Soprano::Statement &statement)
Definition: simpleresourcegraph.cpp:261
Nepomuk2::operator>>
QDataStream & operator>>(QDataStream &, Nepomuk2::SimpleResource &)
Definition: simpleresource.cpp:313
Nepomuk2::SimpleResourceGraph::operator==
bool operator==(const SimpleResourceGraph &rhs) const
Definition: simpleresourcegraph.cpp:320
Nepomuk2::SimpleResourceGraph::toStatementGraph
Soprano::Graph toStatementGraph() const
Definition: simpleresourcegraph.cpp:274
Nepomuk2::SimpleResource
Represents a snapshot of one Nepomuk resource.
Definition: simpleresource.h:46
QHash
Nepomuk2::operator<<
QDataStream & operator<<(QDataStream &, const Nepomuk2::SimpleResource &)
Definition: simpleresource.cpp:307
Nepomuk2::SimpleResourceGraph::containsAny
bool containsAny(const QUrl &res, const QUrl &property) const
Definition: simpleresourcegraph.cpp:152
Nepomuk2::SimpleResourceGraph::isEmpty
bool isEmpty() const
Definition: simpleresourcegraph.cpp:207
Nepomuk2::SimpleResourceGraph::operator<<
SimpleResourceGraph & operator<<(const SimpleResource &res)
Definition: simpleresourcegraph.cpp:92
Nepomuk2::SimpleResourceGraph
Definition: simpleresourcegraph.h:48
Nepomuk2::SimpleResourceGraph::remove
void remove(const QUrl &uri)
Definition: simpleresourcegraph.cpp:98
Nepomuk2::SimpleResourceGraph::toList
QList< SimpleResource > toList() const
Definition: simpleresourcegraph.cpp:192
Nepomuk2::SimpleResourceGraph::clear
void clear()
Definition: simpleresourcegraph.cpp:202
Nepomuk2::SimpleResourceGraph::toSet
QSet< SimpleResource > toSet() const
Definition: simpleresourcegraph.cpp:187
Nepomuk2::SimpleResourceGraph::removeAll
void removeAll(const QUrl &uri, const QUrl &property, const QVariant &value=QVariant())
Remove all properties matching the provided parameters.
Definition: simpleresourcegraph.cpp:131
Nepomuk2::SimpleResourceGraph::count
int count() const
Definition: simpleresourcegraph.cpp:212
Nepomuk2::SimpleResourceGraph::SimpleResourceGraph
SimpleResourceGraph()
Definition: simpleresourcegraph.cpp:45
Nepomuk2::storeResources
StoreResourcesJob * storeResources(const Nepomuk2::SimpleResourceGraph &resources, Nepomuk2::StoreIdentificationMode identificationMode=Nepomuk2::IdentifyNew, Nepomuk2::StoreResourcesFlags flags=Nepomuk2::NoStoreResourcesFlags, const QHash< QUrl, QVariant > &additionalMetadata=QHash< QUrl, QVariant >(), const KComponentData &component=KGlobal::mainComponent())
Store many resources at once.
Definition: datamanagement.cpp:144
Nepomuk2::SimpleResourceGraph::~SimpleResourceGraph
~SimpleResourceGraph()
Definition: simpleresourcegraph.cpp:77
Nepomuk2::SimpleResourceGraph::operator[]
SimpleResource operator[](const QUrl &uri) const
Definition: simpleresourcegraph.cpp:170
Nepomuk2::IdentifyNew
This is the default mode.
Definition: datamanagement.h:352
simpleresource.h
Nepomuk2::SimpleResourceGraph::operator!=
bool operator!=(const SimpleResourceGraph &rhs) const
Definition: simpleresourcegraph.cpp:314
Nepomuk2::SimpleResourceGraph::operator=
SimpleResourceGraph & operator=(const SimpleResourceGraph &other)
Definition: simpleresourcegraph.cpp:81
datamanagement.h
simpleresourcegraph.h
Nepomuk2::SimpleResourceGraph::set
void set(const QUrl &uri, const QUrl &property, const QVariant &value)
Definition: simpleresourcegraph.cpp:117
Nepomuk2::SimpleResourceGraph::allResourceUris
QList< QUrl > allResourceUris() const
Get a list of the URIs of all resources in this graph.
Definition: simpleresourcegraph.cpp:197
Nepomuk2::SimpleResource::uri
QUrl uri() const
Definition: simpleresource.cpp:90
Nepomuk2::StoreResourcesJob
Definition: storeresourcesjob.h:34
Nepomuk2::SimpleResourceGraph::contains
bool contains(const SimpleResource &res) const
Definition: simpleresourcegraph.cpp:161
Nepomuk2::NoStoreResourcesFlags
No flags - default behaviour.
Definition: datamanagement.h:364
Nepomuk2::SimpleResourceGraph::insert
void insert(const SimpleResource &res)
Adds a resource to the graph.
Definition: simpleresourcegraph.cpp:87
Nepomuk2::SimpleResourceGraph::add
void add(const QUrl &uri, const QUrl &property, const QVariant &value)
Definition: simpleresourcegraph.cpp:109
Nepomuk2::SimpleResourceGraph::operator+=
SimpleResourceGraph & operator+=(const SimpleResourceGraph &graph)
Definition: simpleresourcegraph.cpp:229
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:48:09 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Nepomuk-Core

Skip menu "Nepomuk-Core"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal