MARMOTTA-631: fixed by forcing to have the default context always, plus added an alternative implementation we may want to switch to
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/503cbc8d Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/503cbc8d Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/503cbc8d Branch: refs/heads/develop Commit: 503cbc8daae89641b8f5d60c04274e1dcde012ec Parents: 8710b7e Author: Sergio Fernández <[email protected]> Authored: Thu Mar 3 11:36:04 2016 +0100 Committer: Sergio Fernández <[email protected]> Committed: Thu Mar 3 11:36:04 2016 +0100 ---------------------------------------------------------------------- .../triplestore/ContextServiceImpl.java | 82 +++++++++++++++++--- .../test/triplestore/ContextServiceTest.java | 2 +- 2 files changed, 74 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/503cbc8d/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/ContextServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/ContextServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/ContextServiceImpl.java index 59d9fc2..3b34f4e 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/ContextServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/ContextServiceImpl.java @@ -17,6 +17,8 @@ */ package org.apache.marmotta.platform.core.services.triplestore; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import org.apache.commons.lang3.StringUtils; import org.apache.marmotta.commons.http.UriUtil; import org.apache.marmotta.commons.sesame.repository.ResourceUtils; @@ -25,6 +27,7 @@ import org.apache.marmotta.platform.core.api.importer.ImportService; import org.apache.marmotta.platform.core.api.triplestore.ContextService; import org.apache.marmotta.platform.core.api.triplestore.SesameService; import org.apache.marmotta.platform.core.api.user.UserService; +import org.apache.marmotta.platform.core.exception.InvalidArgumentException; import org.apache.marmotta.platform.core.exception.io.MarmottaImportException; import org.apache.marmotta.platform.core.qualifiers.kspace.ActiveKnowledgeSpaces; import org.apache.marmotta.platform.core.qualifiers.kspace.DefaultKnowledgeSpace; @@ -32,9 +35,11 @@ import org.apache.marmotta.platform.core.qualifiers.kspace.InferredKnowledgeSpac import org.apache.marmotta.platform.core.qualifiers.kspace.SystemKnowledgeSpace; import org.openrdf.model.Resource; import org.openrdf.model.URI; +import org.openrdf.model.Value; import org.openrdf.model.ValueFactory; import org.openrdf.model.util.Literals; import org.openrdf.model.vocabulary.RDFS; +import org.openrdf.query.*; import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.RepositoryResult; @@ -48,6 +53,7 @@ import javax.inject.Named; import java.io.InputStream; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -108,7 +114,30 @@ public class ContextServiceImpl implements ContextService { @Override public List<URI> listContexts(boolean filter) { - List<URI> contexts = new ArrayList<URI>(); + //TODO: configuration + final Set<URI> contexts = listContextsSesame(); + //final Set<URI> contexts = listContextsSparql(); + + if (filter) { + Collections2.filter(contexts, new Predicate<URI>() { + @Override + public boolean apply(URI uri) { + return uri.stringValue().startsWith(configurationService.getBaseContext()); + } + }); + } + + return new ArrayList<>(contexts); + + } + + /** + * List context using the Sesame native API + * + * @return + */ + private Set<URI> listContextsSesame() { + Set<URI> contexts = new HashSet<>(); try { RepositoryConnection conn = sesameService.getConnection(); try { @@ -117,19 +146,54 @@ public class ContextServiceImpl implements ContextService { while(result.hasNext()) { Resource next = result.next(); if(next instanceof URI) { - URI uri = (URI)next; - if (filter) { - if (uri.stringValue().startsWith(configurationService.getBaseContext())) { - contexts.add(uri); - } - } else { - contexts.add(uri); - } + contexts.add((URI)next); } } result.close(); + conn.commit(); } finally { + conn.close(); + } + } catch (RepositoryException e) { + + } + + //MARMOTTA-631: default context should be always there + try { + contexts.add(getDefaultContext()); + } catch (URISyntaxException e) {} + + return contexts; + } + + /** + * Alternative implementation to list contexts using SPARQL + * + * @return + */ + private Set<URI> listContextsSparql() { + Set<URI> contexts = new HashSet<>(); + try { + RepositoryConnection conn = sesameService.getConnection(); + try { + conn.begin(); + final String query = "SELECT DISTINCT ?graph WHERE { GRAPH ?graph { ?s ?p ?o } }"; + final TupleQuery sparqlQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, query, configurationService.getBaseUri()); + final TupleQueryResult results = sparqlQuery.evaluate(); + try { + while (results.hasNext()) { + final Value next = results.next().getValue("graph"); + if(next instanceof URI) { + contexts.add((URI)next); + } + } + } finally { + results.close(); + } conn.commit(); + } catch (MalformedQueryException | QueryEvaluationException e) { + log.error("Error evaluating query: {}", e.getMessage()); + } finally { conn.close(); } } catch (RepositoryException e) { http://git-wip-us.apache.org/repos/asf/marmotta/blob/503cbc8d/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/triplestore/ContextServiceTest.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/triplestore/ContextServiceTest.java b/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/triplestore/ContextServiceTest.java index eec0d30..9599180 100644 --- a/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/triplestore/ContextServiceTest.java +++ b/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/triplestore/ContextServiceTest.java @@ -49,7 +49,7 @@ public class ContextServiceTest { @Test public void testEmpty() { final List<URI> contexts = contextService.listContexts(); - Assert.assertEquals(0, contexts.size()); + Assert.assertEquals(1, contexts.size()); } @Test
