summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--offapi/UnoApi_offapi.mk1
-rw-r--r--offapi/com/sun/star/rdf/XNamedGraph2.idl134
-rw-r--r--sfx2/source/doc/DocumentMetadataAccess.cxx62
-rw-r--r--sw/source/core/edit/edfcol.cxx8
-rw-r--r--unoxml/source/rdf/librdf_repository.cxx273
5 files changed, 54 insertions, 424 deletions
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 8a567218dec1..c86e7d5a7800 100644
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -2981,7 +2981,6 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/rdf,\
XLiteral \
XMetadatable \
XNamedGraph \
- XNamedGraph2 \
XNode \
XQuerySelectResult \
XReifiedStatement \
diff --git a/offapi/com/sun/star/rdf/XNamedGraph2.idl b/offapi/com/sun/star/rdf/XNamedGraph2.idl
deleted file mode 100644
index e90254a577d3..000000000000
--- a/offapi/com/sun/star/rdf/XNamedGraph2.idl
+++ /dev/null
@@ -1,134 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef __com_sun_star_rdf_XNamedGraph_idl__
-#define __com_sun_star_rdf_XNamedGraph_idl__
-
-#include <com/sun/star/rdf/XNamedGraph.idl>
-
-
-
-module com { module sun { module star { module rdf {
-
-/** represents an RDF named graph that is stored in an RDF Repository.
-
- @since LibreOffice 6.4
- */
-interface XNamedGraph2 : XNamedGraph
-{
-
- /** gets objects for matching RDF statements from a graph.
-
- <p>this call caches its results (as opposed to getStatements in XNamedGraph
- which cannot because it returns a mutable object).
-
- <p>
- Note that the ODF elements that can have metadata attached all
- implement the interface XMetadatable, which inherits
- from XResource, meaning that you can simply pass them
- in as arguments here, and it will magically work.
- </p>
-
- <p>
- Any parameter may be `NULL`, which acts as a wildcard.
- For example, to get all statements about myURI:
- <code>getStatements2(myURI, null, null)</code>
- </p>
-
- @param Subject
- the subject of the RDF triple.
-
- @param Predicate
- the predicate of the RDF triple.
-
- @param Object
- the object of the RDF triple.
-
- @returns
- a sequence of XURIs for the objects in RDF statements
- in the graph that match
- the parameters, represented as an
- enumeration of Statement
-
- @throws com::sun::star::container::NoSuchElementException
- if this graph does not exist in the repository any more
-
- @throws RepositoryException
- if an error occurs when accessing the repository.
- */
- sequence<com::sun::star::rdf::XURI> getStatementsObjects(
- [in] XResource Subject,
- [in] XURI Predicate,
- [in] XNode Object)
- raises( com::sun::star::container::NoSuchElementException,
- RepositoryException );
-
- /** returns true if there are matching RDF statements from a graph.
-
- <p>this call caches its results (as opposed to getStatements in XNamedGraph
- which cannot because it returns a mutable object).
-
- <p>
- Note that the ODF elements that can have metadata attached all
- implement the interface XMetadatable, which inherits
- from XResource, meaning that you can simply pass them
- in as arguments here, and it will magically work.
- </p>
-
- <p>
- Any parameter may be `NULL`, which acts as a wildcard.
- For example, to get all statements about myURI:
- <code>getStatements2(myURI, null, null)</code>
- </p>
-
- @param Subject
- the subject of the RDF triple.
-
- @param Predicate
- the predicate of the RDF triple.
-
- @param Object
- the object of the RDF triple.
-
- @returns
- a sequence of XURIs for the objects in RDF statements
- in the graph that match
- the parameters, represented as an
- enumeration of Statement
-
- @throws com::sun::star::container::NoSuchElementException
- if this graph does not exist in the repository any more
-
- @throws RepositoryException
- if an error occurs when accessing the repository.
- */
- boolean hasStatements(
- [in] XResource Subject,
- [in] XURI Predicate,
- [in] XNode Object)
- raises( com::sun::star::container::NoSuchElementException,
- RepositoryException );
-};
-
-
-}; }; }; };
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/DocumentMetadataAccess.cxx b/sfx2/source/doc/DocumentMetadataAccess.cxx
index 83cd4ec3f6d4..14c5d98ca5d2 100644
--- a/sfx2/source/doc/DocumentMetadataAccess.cxx
+++ b/sfx2/source/doc/DocumentMetadataAccess.cxx
@@ -36,7 +36,6 @@
#include <com/sun/star/rdf/Literal.hpp>
#include <com/sun/star/rdf/URI.hpp>
#include <com/sun/star/rdf/Repository.hpp>
-#include <com/sun/star/rdf/XNamedGraph2.hpp>
#include <rtl/ustrbuf.hxx>
#include <rtl/uri.hxx>
@@ -221,7 +220,7 @@ struct DocumentMetadataAccess_Impl
const SfxObjectShell & m_rXmlIdRegistrySupplier;
uno::Reference<rdf::XURI> m_xBaseURI;
uno::Reference<rdf::XRepository> m_xRepository;
- uno::Reference<rdf::XNamedGraph2> m_xManifest;
+ uno::Reference<rdf::XNamedGraph> m_xManifest;
DocumentMetadataAccess_Impl(
uno::Reference<uno::XComponentContext> const& i_xContext,
SfxObjectShell const & i_rRegistrySupplier)
@@ -229,6 +228,7 @@ struct DocumentMetadataAccess_Impl
, m_rXmlIdRegistrySupplier(i_rRegistrySupplier)
, m_xBaseURI()
, m_xRepository()
+ , m_xManifest()
{
OSL_ENSURE(m_xContext.is(), "context null");
}
@@ -394,12 +394,26 @@ removeFile(struct DocumentMetadataAccess_Impl const & i_rImpl,
}
}
-static css::uno::Sequence< uno::Reference< rdf::XURI > >
+static ::std::vector< uno::Reference< rdf::XURI > >
getAllParts(struct DocumentMetadataAccess_Impl const & i_rImpl)
{
+ ::std::vector< uno::Reference< rdf::XURI > > ret;
try {
- return i_rImpl.m_xManifest->getStatementsObjects( i_rImpl.m_xBaseURI.get(),
- getURI<rdf::URIs::PKG_HASPART>(i_rImpl.m_xContext), nullptr);
+ const uno::Reference<container::XEnumeration> xEnum(
+ i_rImpl.m_xManifest->getStatements( i_rImpl.m_xBaseURI.get(),
+ getURI<rdf::URIs::PKG_HASPART>(i_rImpl.m_xContext), nullptr),
+ uno::UNO_SET_THROW);
+ while (xEnum->hasMoreElements()) {
+ rdf::Statement stmt;
+ if (!(xEnum->nextElement() >>= stmt)) {
+ throw uno::RuntimeException();
+ }
+ const uno::Reference<rdf::XURI> xPart(stmt.Object,
+ uno::UNO_QUERY);
+ if (!xPart.is()) continue;
+ ret.push_back(xPart);
+ }
+ return ret;
} catch (const uno::RuntimeException &) {
throw;
} catch (const uno::Exception &) {
@@ -440,14 +454,27 @@ getAllParts(struct DocumentMetadataAccess_Impl const& i_rImpl,
::std::vector<uno::Reference<rdf::XURI>> ret;
try
{
- css::uno::Sequence< uno::Reference< rdf::XURI > > parts1
- = i_rImpl.m_xManifest->getStatementsObjects(i_rImpl.m_xBaseURI.get(),
+ const uno::Reference<container::XEnumeration> xEnum(
+ i_rImpl.m_xManifest->getStatements(i_rImpl.m_xBaseURI.get(),
getURI<rdf::URIs::PKG_HASPART>(i_rImpl.m_xContext),
- nullptr);
- for (auto const & xPart : parts1)
+ nullptr),
+ uno::UNO_SET_THROW);
+ while (xEnum->hasMoreElements())
{
- if (i_rImpl.m_xManifest->hasStatements(
- xPart.get(), getURI<rdf::URIs::RDF_TYPE>(i_rImpl.m_xContext), i_xType.get()))
+ rdf::Statement stmt;
+ if (!(xEnum->nextElement() >>= stmt))
+ {
+ throw uno::RuntimeException();
+ }
+ const uno::Reference<rdf::XURI> xPart(stmt.Object, uno::UNO_QUERY);
+ if (!xPart.is())
+ continue;
+
+ const uno::Reference<container::XEnumeration> xEnum2(
+ i_rImpl.m_xManifest->getStatements(
+ xPart.get(), getURI<rdf::URIs::RDF_TYPE>(i_rImpl.m_xContext), i_xType.get()),
+ uno::UNO_SET_THROW);
+ if (xEnum2->hasMoreElements())
ret.emplace_back(xPart);
}
return ret;
@@ -746,11 +773,10 @@ retry:
}
// init manifest graph
- auto xManifestGraph = i_rImpl.m_xRepository->getGraph(xManifest);
- if (xManifestGraph.is())
- i_rImpl.m_xManifest.set(xManifestGraph, uno::UNO_QUERY_THROW);
- else
- i_rImpl.m_xManifest.set(i_rImpl.m_xRepository->createGraph(xManifest), uno::UNO_QUERY_THROW);
+ const uno::Reference<rdf::XNamedGraph> xManifestGraph(
+ i_rImpl.m_xRepository->getGraph(xManifest));
+ i_rImpl.m_xManifest.set(xManifestGraph.is() ? xManifestGraph :
+ i_rImpl.m_xRepository->createGraph(xManifest), uno::UNO_SET_THROW);
const uno::Reference<container::XEnumeration> xEnum(
i_rImpl.m_xManifest->getStatements(nullptr,
getURI<rdf::URIs::RDF_TYPE>(i_rImpl.m_xContext),
@@ -782,7 +808,7 @@ static void init(struct DocumentMetadataAccess_Impl & i_rImpl)
i_rImpl.m_xManifest.set(i_rImpl.m_xRepository->createGraph(
getURIForStream(i_rImpl, s_manifest)),
- uno::UNO_QUERY_THROW);
+ uno::UNO_SET_THROW);
// insert the document statement
i_rImpl.m_xManifest->addStatement(i_rImpl.m_xBaseURI.get(),
@@ -1108,7 +1134,7 @@ void SAL_CALL DocumentMetadataAccess::loadMetadataFromStorage(
std::vector< OUString > MfstMetadataFiles;
try {
- const css::uno::Sequence< uno::Reference< rdf::XURI > > parts(
+ const ::std::vector< uno::Reference< rdf::XURI > > parts(
getAllParts(*m_pImpl) );
const uno::Reference<rdf::XURI>& xContentFile(
getURI<rdf::URIs::ODF_CONTENTFILE>(m_pImpl->m_xContext));
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index a61964900a1d..4df464ee49ed 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -1157,14 +1157,12 @@ void SwEditShell::SetClassification(const OUString& rName, SfxClassificationPoli
}
}
-// We pass xParent and xNodeSubject even though they point to the same thing because the UNO_QUERY is
-// on a performance-sensitive path.
static void lcl_ApplyParagraphClassification(SwDoc* pDoc,
const uno::Reference<frame::XModel>& xModel,
const uno::Reference<text::XTextContent>& xParent,
- const css::uno::Reference<css::rdf::XResource>& xNodeSubject,
std::vector<svx::ClassificationResult> aResults)
{
+ css::uno::Reference<css::rdf::XResource> xNodeSubject(xParent, uno::UNO_QUERY);
if (!xNodeSubject.is())
return;
@@ -1281,7 +1279,7 @@ void SwEditShell::ApplyParagraphClassification(std::vector<svx::ClassificationRe
uno::Reference<frame::XModel> xModel = pDocShell->GetBaseModel();
uno::Reference<text::XTextContent> xParent = SwXParagraph::CreateXParagraph(*pNode->GetDoc(), pNode);
- lcl_ApplyParagraphClassification(GetDoc(), xModel, xParent, css::uno::Reference<css::rdf::XResource>(xParent, uno::UNO_QUERY), std::move(aResults));
+ lcl_ApplyParagraphClassification(GetDoc(), xModel, xParent, std::move(aResults));
}
static std::vector<svx::ClassificationResult> lcl_CollectParagraphClassification(const uno::Reference<frame::XModel>& xModel, const uno::Reference<text::XTextContent>& xParagraph)
@@ -1989,7 +1987,7 @@ void SwEditShell::RestoreMetadataFieldsAndValidateParagraphSignatures()
}
// Update classification based on results.
- lcl_ApplyParagraphClassification(GetDoc(), xModel, xParagraph, xSubject, aResults);
+ lcl_ApplyParagraphClassification(GetDoc(), xModel, xParagraph, aResults);
// Get Signatures
std::map<OUString, SignatureDescr> aSignatures;
diff --git a/unoxml/source/rdf/librdf_repository.cxx b/unoxml/source/rdf/librdf_repository.cxx
index 3b774b7526c9..c04e4a0155ce 100644
--- a/unoxml/source/rdf/librdf_repository.cxx
+++ b/unoxml/source/rdf/librdf_repository.cxx
@@ -51,11 +51,9 @@
#include <com/sun/star/rdf/BlankNode.hpp>
#include <com/sun/star/rdf/URI.hpp>
#include <com/sun/star/rdf/Literal.hpp>
-#include <com/sun/star/rdf/XNamedGraph2.hpp>
#include <rtl/ref.hxx>
#include <rtl/strbuf.hxx>
-#include <rtl/ustrbuf.hxx>
#include <rtl/ustring.hxx>
#include <osl/diagnose.h>
#include <cppuhelper/exc_hlp.hxx>
@@ -185,23 +183,23 @@ public:
struct Resource : public Node { };
struct URI : public Resource
{
- OString value;
+ OString const value;
explicit URI(OString const& i_rValue)
: value(i_rValue)
{ }
};
struct BlankNode : public Resource
{
- OString value;
+ OString const value;
explicit BlankNode(OString const& i_rValue)
: value(i_rValue)
{ }
};
struct Literal : public Node
{
- OString value;
- OString language;
- ::boost::optional<OString> type;
+ OString const value;
+ OString const language;
+ ::boost::optional<OString> const type;
Literal(OString const& i_rValue, OString const& i_rLanguage,
::boost::optional<OString> const& i_rType)
: value(i_rValue)
@@ -244,14 +242,8 @@ public:
Statement const& i_rStatement);
static std::shared_ptr<Resource> extractResource_NoLock(
const uno::Reference< rdf::XResource > & i_xResource);
- static void extractResourceToCacheKey(
- const uno::Reference< rdf::XResource > & i_xResource,
- OUStringBuffer& rBuf);
static std::shared_ptr<Node> extractNode_NoLock(
const uno::Reference< rdf::XNode > & i_xNode);
- static void extractNodeToCacheKey(
- const uno::Reference< rdf::XNode > & i_xNode,
- OUStringBuffer& rBuffer);
static Statement extractStatement_NoLock(
const uno::Reference< rdf::XResource > & i_xSubject,
const uno::Reference< rdf::XURI > & i_xPredicate,
@@ -377,14 +369,6 @@ public:
// throw (uno::RuntimeException, lang::IllegalArgumentException,
// container::NoSuchElementException, rdf::RepositoryException);
- // Optimised version that skips the enumeration object
- std::vector<uno::Reference<rdf::XURI>> getStatementsGraph_NoLock2(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject,
- const uno::Reference< rdf::XURI > & i_xName,
- bool i_Internal = false );
-
const librdf_TypeConverter& getTypeConverter() { return m_TypeConverter; };
private:
@@ -662,7 +646,7 @@ librdf_QuerySelectResult::getBindingNames()
*/
class librdf_NamedGraph:
public ::cppu::WeakImplHelper<
- rdf::XNamedGraph2>
+ rdf::XNamedGraph>
{
public:
librdf_NamedGraph(librdf_Repository * i_pRep,
@@ -694,38 +678,16 @@ public:
const uno::Reference< rdf::XResource > & i_xSubject,
const uno::Reference< rdf::XURI > & i_xPredicate,
const uno::Reference< rdf::XNode > & i_xObject) override;
- // css::rdf::XNamedGraph2
- virtual uno::Sequence<uno::Reference< rdf::XURI >> SAL_CALL getStatementsObjects(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject) override;
- virtual sal_Bool SAL_CALL hasStatements(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject) override;
private:
librdf_NamedGraph(librdf_NamedGraph const&) = delete;
librdf_NamedGraph& operator=(librdf_NamedGraph const&) = delete;
- static OUString createCacheKey(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject);
-
/// weak reference: this is needed to check if m_pRep is valid
uno::WeakReference< rdf::XRepository > const m_wRep;
librdf_Repository *const m_pRep;
uno::Reference< rdf::XURI > const m_xName;
-
- // Querying is rather slow, so cache the results.
- struct CacheValue
- {
- std::vector<uno::Reference<rdf::XURI>> maUris;
- bool mbHasNodes;
- };
- std::map<OUString, CacheValue> m_aStatementsCache;
};
@@ -767,7 +729,6 @@ void SAL_CALL librdf_NamedGraph::clear()
throw lang::WrappedTargetRuntimeException( ex.Message,
*this, anyEx );
}
- m_aStatementsCache.clear();
}
void SAL_CALL librdf_NamedGraph::addStatement(
@@ -782,7 +743,6 @@ void SAL_CALL librdf_NamedGraph::addStatement(
}
m_pRep->addStatementGraph_NoLock(
i_xSubject, i_xPredicate, i_xObject, m_xName);
- m_aStatementsCache.clear();
}
void SAL_CALL librdf_NamedGraph::removeStatements(
@@ -797,7 +757,6 @@ void SAL_CALL librdf_NamedGraph::removeStatements(
}
m_pRep->removeStatementsGraph_NoLock(
i_xSubject, i_xPredicate, i_xObject, m_xName);
- m_aStatementsCache.clear();
}
uno::Reference< container::XEnumeration > SAL_CALL
@@ -811,86 +770,10 @@ librdf_NamedGraph::getStatements(
throw rdf::RepositoryException(
"librdf_NamedGraph::getStatements: repository is gone", *this);
}
- auto ret = m_pRep->getStatementsGraph_NoLock(
- i_xSubject, i_xPredicate, i_xObject, m_xName);
- return ret;
-}
-
-OUString librdf_NamedGraph::createCacheKey(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject)
-{
- OUStringBuffer cacheKey(256);
- librdf_TypeConverter::extractResourceToCacheKey(i_xSubject, cacheKey);
- cacheKey.append("\t");
- librdf_TypeConverter::extractResourceToCacheKey(i_xPredicate, cacheKey);
- cacheKey.append("\t");
- librdf_TypeConverter::extractNodeToCacheKey(i_xObject, cacheKey);
- return cacheKey.makeStringAndClear();
-}
-
-uno::Sequence<uno::Reference<rdf::XURI>> SAL_CALL
-librdf_NamedGraph::getStatementsObjects(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject)
-{
- OUString cacheKey = createCacheKey(i_xSubject, i_xPredicate, i_xObject);
- auto it = m_aStatementsCache.find(cacheKey);
- if (it != m_aStatementsCache.end())
- return comphelper::containerToSequence(it->second.maUris);
-
- uno::Reference< rdf::XRepository > xRep( m_wRep );
- if (!xRep.is()) {
- throw rdf::RepositoryException(
- "librdf_NamedGraph::getStatements: repository is gone", *this);
- }
- std::vector<uno::Reference<rdf::XURI>> xEnum = m_pRep->getStatementsGraph_NoLock2(
+ return m_pRep->getStatementsGraph_NoLock(
i_xSubject, i_xPredicate, i_xObject, m_xName);
-
- std::vector<uno::Reference<rdf::XURI>> uris;
- bool bHasNodes = false;
- for (uno::Reference<rdf::XURI> const & rPart : xEnum)
- {
- bHasNodes = true;
- if (!rPart.is())
- continue;
- uris.push_back(rPart);
- }
- m_aStatementsCache.emplace(cacheKey, CacheValue{ uris, bHasNodes });
- return comphelper::containerToSequence(uris);
}
-sal_Bool SAL_CALL
-librdf_NamedGraph::hasStatements(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject)
-{
- OUString cacheKey = createCacheKey(i_xSubject, i_xPredicate, i_xObject);
- auto it = m_aStatementsCache.find(cacheKey);
- if (it != m_aStatementsCache.end())
- return it->second.mbHasNodes;
- uno::Reference< rdf::XRepository > xRep( m_wRep );
- if (!xRep.is()) {
- throw rdf::RepositoryException(
- "librdf_NamedGraph::getStatements: repository is gone", *this);
- }
- std::vector<uno::Reference<rdf::XURI>> xEnum = m_pRep->getStatementsGraph_NoLock2(
- i_xSubject, i_xPredicate, i_xObject, m_xName);
- std::vector<uno::Reference<rdf::XURI>> uris;
- bool bHasNodes = false;
- for (uno::Reference<rdf::XURI> const & rPart : xEnum)
- {
- bHasNodes = true;
- if (!rPart.is())
- continue;
- uris.push_back(rPart);
- }
- m_aStatementsCache.emplace(cacheKey, CacheValue{ uris, bHasNodes });
- return bHasNodes;
-}
std::shared_ptr<librdf_world> librdf_Repository::m_pWorld;
sal_uInt32 librdf_Repository::m_NumInstances = 0;
@@ -2038,108 +1921,6 @@ librdf_Repository::getStatementsGraph_NoLock(
return new librdf_GraphResult(this, m_aMutex, pStream, pContext);
}
-// Optimised version that skips the enumeration object
-std::vector<uno::Reference<rdf::XURI>>
-librdf_Repository::getStatementsGraph_NoLock2(
- const uno::Reference< rdf::XResource > & i_xSubject,
- const uno::Reference< rdf::XURI > & i_xPredicate,
- const uno::Reference< rdf::XNode > & i_xObject,
- const uno::Reference< rdf::XURI > & i_xGraphName,
- bool i_Internal)
-//throw (uno::RuntimeException, lang::IllegalArgumentException,
-// container::NoSuchElementException, rdf::RepositoryException)
-{
- std::vector<uno::Reference<rdf::XURI>> ret;
-
- // N.B.: if any of subject, predicate, object is an XMetadatable, and
- // has no metadata reference, then there cannot be any node in the graph
- // representing it; in order to prevent side effect
- // (ensureMetadataReference), check for this condition and return
- if (isMetadatableWithoutMetadata(i_xSubject) ||
- isMetadatableWithoutMetadata(i_xPredicate) ||
- isMetadatableWithoutMetadata(i_xObject))
- {
- return ret;
- }
-
- librdf_TypeConverter::Statement const stmt(
- librdf_TypeConverter::extractStatement_NoLock(
- i_xSubject, i_xPredicate, i_xObject));
- const OUString contextU( i_xGraphName->getStringValue() );
-
- ::osl::MutexGuard g(m_aMutex); // don't call i_x* with mutex locked
-
- if (!i_Internal && (m_NamedGraphs.find(contextU) == m_NamedGraphs.end())) {
- throw container::NoSuchElementException(
- "librdf_Repository::getStatements: "
- "no graph with given URI exists", *this);
- }
- const OString context(
- OUStringToOString(contextU, RTL_TEXTENCODING_UTF8) );
-
- const std::shared_ptr<librdf_node> pContext(
- librdf_new_node_from_uri_string(m_pWorld.get(),
- reinterpret_cast<const unsigned char*> (context.getStr())),
- safe_librdf_free_node);
- if (!pContext) {
- throw uno::RuntimeException(
- "librdf_Repository::getStatements: "
- "librdf_new_node_from_uri_string failed", *this);
- }
- const std::shared_ptr<librdf_statement> pStatement(
- librdf_TypeConverter::mkStatement_Lock(m_pWorld.get(), stmt),
- safe_librdf_free_statement);
- OSL_ENSURE(pStatement, "mkStatement failed");
-
- const std::shared_ptr<librdf_stream> pStream(
- librdf_model_find_statements_in_context(m_pModel.get(),
- pStatement.get(), pContext.get()),
- safe_librdf_free_stream);
- if (!pStream) {
- throw rdf::RepositoryException(
- "librdf_Repository::getStatements: "
- "librdf_model_find_statements_in_context failed", *this);
- }
-
- librdf_node *pCtxt1(
-#if LIBRDF_VERSION >= 10012
- librdf_stream_get_context2(pStream.get()) );
-#else
- static_cast<librdf_node *>(librdf_stream_get_context(pStream.get())) );
-#endif
- while (!librdf_stream_end(pStream.get()))
- {
- auto pCtxt = pCtxt1;
- librdf_statement *pStmt( librdf_stream_get_object(pStream.get()) );
- if (!pStmt) {
- rdf::QueryException e(
- "librdf_GraphResult::nextElement: "
- "librdf_stream_get_object failed", *this);
- throw lang::WrappedTargetException(
- "librdf_GraphResult::nextElement: "
- "librdf_stream_get_object failed", *this,
- uno::makeAny(e));
- }
- // NB: pCtxt may be null here if this is result of a graph query
- if (pCtxt && isInternalContext(pCtxt)) {
- pCtxt = nullptr; // XML ID context is implementation detail!
- }
-
- ret.push_back(
- css::uno::Reference<rdf::XURI>(
- getTypeConverter().convertToXNode(librdf_statement_get_object(pStmt)),
- uno::UNO_QUERY) );
-
- // NB: this will invalidate current item.
- librdf_stream_next(pStream.get());
- }
-
- return ret;
- // librdf_model_find_statements_in_context is buggy and does not put
- // the context into result statements; pass it to librdf_GraphResult here
- //return new librdf_GraphResult(this, m_aMutex, pStream, pContext);
-}
-
extern "C"
void librdf_raptor_init(void* /*user_data*/, raptor_world* pRaptorWorld)
{
@@ -2250,21 +2031,6 @@ librdf_TypeConverter::extractResource_NoLock(
}
}
-void
-librdf_TypeConverter::extractResourceToCacheKey(
- const uno::Reference< rdf::XResource > & i_xResource, OUStringBuffer& rBuffer)
-{
- if (!i_xResource.is()) {
- return;
- }
- uno::Reference< rdf::XBlankNode > xBlankNode(i_xResource, uno::UNO_QUERY);
- if (xBlankNode.is()) {
- rBuffer.append("BlankNode ").append(xBlankNode->getStringValue());
- } else { // assumption: everything else is URI
- rBuffer.append("URI ").append(i_xResource->getStringValue());
- }
-}
-
// create blank or URI node
librdf_node* librdf_TypeConverter::mkResource_Lock( librdf_world* i_pWorld,
Resource const*const i_pResource)
@@ -2332,31 +2098,6 @@ librdf_TypeConverter::extractNode_NoLock(
return std::shared_ptr<Node>(new Literal(val, lang, type));
}
-// extract blank or URI or literal node - call without Mutex locked
-void
-librdf_TypeConverter::extractNodeToCacheKey(
- const uno::Reference< rdf::XNode > & i_xNode,
- OUStringBuffer& rBuffer)
-{
- if (!i_xNode.is()) {
- return;
- }
- uno::Reference< rdf::XResource > xResource(i_xNode, uno::UNO_QUERY);
- if (xResource.is()) {
- return extractResourceToCacheKey(xResource, rBuffer);
- }
- uno::Reference< rdf::XLiteral> xLiteral(i_xNode, uno::UNO_QUERY);
- OSL_ENSURE(xLiteral.is(),
- "mkNode: someone invented a new rdf.XNode and did not tell me");
- if (!xLiteral.is()) {
- return;
- }
- rBuffer.append("Literal ").append(xLiteral->getValue()).append("\t").append(xLiteral->getLanguage());
- const uno::Reference< rdf::XURI > xType(xLiteral->getDatatype());
- if (xType.is())
- rBuffer.append(xType->getStringValue());
-}
-
// create blank or URI or literal node
librdf_node* librdf_TypeConverter::mkNode_Lock( librdf_world* i_pWorld,
Node const*const i_pNode)