You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by wi...@apache.org on 2014/10/28 10:16:12 UTC
[2/4] git commit: MARMOTTA-556: fixed some important details
MARMOTTA-556: fixed some important details
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/f89825a8
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/f89825a8
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/f89825a8
Branch: refs/heads/MARMOTTA-556
Commit: f89825a8b6993389d8e927cd1d0844ef1a6b8a64
Parents: f935531
Author: Sergio Fernández <wi...@apache.org>
Authored: Tue Oct 28 09:05:10 2014 +0100
Committer: Sergio Fernández <wi...@apache.org>
Committed: Tue Oct 28 09:05:10 2014 +0100
----------------------------------------------------------------------
.../platform/ldf/services/LdfServiceImpl.java | 118 ++++++++++---------
.../ldf/webservices/LdfWebServiceTest.java | 19 +--
2 files changed, 71 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/f89825a8/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
index 09a4dc8..d6fac6c 100644
--- a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
+++ b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
@@ -114,70 +114,82 @@ public class LdfServiceImpl implements LdfService {
@Override
public Model getFragment(URI subject, URI predicate, Value object, Resource context, int page) throws RepositoryException, IllegalArgumentException {
final RepositoryConnection conn = sesameService.getConnection();
- conn.begin();
-
- //first get the triple fragment for ordering by a fixed criteria
- //TODO: do this effectively
- final RepositoryResult<Statement> results = conn.getStatements(subject, predicate, object, true, context);
- final List<Statement> statements = FluentIterable.from(ResultUtils.iterable(results)).toSortedList(new Comparator<Statement>() {
- @Override
- public int compare(Statement s1, Statement s2) {
- int subjectComparison = s1.getSubject().stringValue().compareTo(s2.getSubject().stringValue());
- int predicatedComparison = s1.getPredicate().stringValue().compareTo(s2.getPredicate().stringValue());
- if (subjectComparison != 0) {
- return subjectComparison;
- } else if (predicatedComparison != 0) {
- return predicatedComparison;
- } else if ((s1.getObject() instanceof Literal) && (s2.getObject() instanceof Resource)) {
- return 1;
- } else if ((s1.getObject() instanceof Resource) && (s2.getObject() instanceof Literal)) {
- return -1;
- } else {
- return s1.getObject().stringValue().compareTo(s2.getObject().stringValue());
+ final List<Statement> statements;
+ try {
+ conn.begin();
+
+ //first get the triple fragment for ordering by a fixed criteria
+ //TODO: do this effectively
+ final RepositoryResult<Statement> results = conn.getStatements(subject, predicate, object, true, context);
+ statements = FluentIterable.from(ResultUtils.iterable(results)).toSortedList(new Comparator<Statement>() {
+ @Override
+ public int compare(Statement s1, Statement s2) {
+ int subjectComparison = s1.getSubject().stringValue().compareTo(s2.getSubject().stringValue());
+ int predicatedComparison = s1.getPredicate().stringValue().compareTo(s2.getPredicate().stringValue());
+ if (subjectComparison != 0) {
+ return subjectComparison;
+ } else if (predicatedComparison != 0) {
+ return predicatedComparison;
+ } else if ((s1.getObject() instanceof Literal) && (s2.getObject() instanceof Resource)) {
+ return 1;
+ } else if ((s1.getObject() instanceof Resource) && (s2.getObject() instanceof Literal)) {
+ return -1;
+ } else {
+ return s1.getObject().stringValue().compareTo(s2.getObject().stringValue());
+ }
}
+ });
+ if (!results.isClosed()) {
+ //ResultUtils in theory closes the RepositoryResult connection...
+ results.close();
}
- });
- //ResultUtils takes care of closing the connection when consuming the RepositoryResult
- //then filter
- final int size = statements.size();
- final int offset = LdfService.PAGE_SIZE * (page - 1);
+ //then filter
+ final int size = statements.size();
+ final int offset = LdfService.PAGE_SIZE * (page - 1);
- if (offset > size) {
- throw new IllegalArgumentException("page " + page + " can't be generated, empty fragment");
- }
+ if (offset > size) {
+ throw new IllegalArgumentException("page " + page + " can't be generated, empty fragment");
+ }
- final Model model = new TreeModel();
- final ValueFactoryImpl vf = new ValueFactoryImpl();
+ final Model model = new TreeModel();
+ final ValueFactoryImpl vf = new ValueFactoryImpl();
- final int limit = LdfService.PAGE_SIZE < size - offset ? LdfService.PAGE_SIZE : size - offset;
- List<Statement> filteredStatements = statements.subList(offset, limit);
- if (filteredStatements.isEmpty()) {
- throw new IllegalArgumentException("empty fragment");
- }
+ final int limit = LdfService.PAGE_SIZE < size - offset ? LdfService.PAGE_SIZE : size - offset;
+ List<Statement> filteredStatements = statements.subList(offset, limit);
+ if (filteredStatements.isEmpty()) {
+ throw new IllegalArgumentException("empty fragment");
+ }
- //add the fragment
- model.addAll(filteredStatements);
+ //add the fragment
+ model.addAll(filteredStatements);
- //and add ldf metadata
- Resource dataset = context != null ? context : vf.createBNode();
- model.add(dataset, RDF.TYPE, VOID.Dataset);
- model.add(dataset, RDF.TYPE, HYDRA.Collection);
+ //and add ldf metadata
+ Resource dataset = context != null ? context : vf.createBNode();
+ model.add(dataset, RDF.TYPE, VOID.Dataset);
+ model.add(dataset, RDF.TYPE, HYDRA.Collection);
- Resource fragment = vf.createBNode(); //TODO
- model.add(dataset, VOID.subset, fragment);
- model.add(fragment, RDF.TYPE, HYDRA.Collection);
- if (offset != 0 && limit != size) {
- model.add(fragment, RDF.TYPE, HYDRA.PagedCollection);
- }
- model.add(fragment, VOID.triples, vf.createLiteral(Integer.toString(filteredStatements.size()), XSD.Integer));
- model.add(fragment, HYDRA.totalItems, vf.createLiteral(Integer.toString(filteredStatements.size()), XSD.Integer));
- model.add(fragment, HYDRA.itemsPerPage, vf.createLiteral(Integer.toString(LdfService.PAGE_SIZE), XSD.Integer));
- //TODO: HYDRA_FIRSTPAGE, HYDRA_PREVIOUSPAGE, HYDRA_NEXTPAGE
+ Resource fragment = vf.createBNode(); //TODO
+ model.add(dataset, VOID.subset, fragment);
+ model.add(fragment, RDF.TYPE, HYDRA.Collection);
+ if (offset != 0 && limit != size) {
+ model.add(fragment, RDF.TYPE, HYDRA.PagedCollection);
+ }
+ model.add(fragment, VOID.triples, vf.createLiteral(Integer.toString(filteredStatements.size()), XSD.Integer));
+ model.add(fragment, HYDRA.totalItems, vf.createLiteral(Integer.toString(filteredStatements.size()), XSD.Integer));
+ model.add(fragment, HYDRA.itemsPerPage, vf.createLiteral(Integer.toString(LdfService.PAGE_SIZE), XSD.Integer));
+ //TODO: HYDRA_FIRSTPAGE, HYDRA_PREVIOUSPAGE, HYDRA_NEXTPAGE
+
+ //TODO: hydra controls
- //TODO: hydra controls
+ return model;
- return model;
+ } finally {
+ conn.commit();
+ if(conn.isOpen()) {
+ conn.close();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/f89825a8/platform/marmotta-ldf/src/test/java/org/apache/marmotta/platform/ldf/webservices/LdfWebServiceTest.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldf/src/test/java/org/apache/marmotta/platform/ldf/webservices/LdfWebServiceTest.java b/platform/marmotta-ldf/src/test/java/org/apache/marmotta/platform/ldf/webservices/LdfWebServiceTest.java
index 05be6ed..d37d6e0 100644
--- a/platform/marmotta-ldf/src/test/java/org/apache/marmotta/platform/ldf/webservices/LdfWebServiceTest.java
+++ b/platform/marmotta-ldf/src/test/java/org/apache/marmotta/platform/ldf/webservices/LdfWebServiceTest.java
@@ -36,7 +36,7 @@ public class LdfWebServiceTest {
@BeforeClass
public static void setUp() {
- marmotta = new JettyMarmotta("/marmotta", LdfWebService.class, ContextWebService.class);
+ marmotta = new JettyMarmotta("/marmotta", LdfWebService.class);
RestAssured.baseURI = "http://localhost";
RestAssured.port = marmotta.getPort();
@@ -59,10 +59,6 @@ public class LdfWebServiceTest {
@Test
public void testFragment() throws IOException, InterruptedException, URISyntaxException, MarmottaImportException {
- final ImportService importService = marmotta.getService(ImportService.class);
- final ContextService contextService = marmotta.getService(ContextService.class);
- final ConfigurationService configurationService = marmotta.getService(ConfigurationService.class);
-
final String ctx = RandomStringUtils.random(8, true, false);
final String uri = "http://www.wikier.org/foaf#wikier";
@@ -73,14 +69,11 @@ public class LdfWebServiceTest {
get(LdfWebService.PATH + "/" + ctx);
// 2. import some data
- final InputStream is = this.getClass().getClassLoader().getResourceAsStream("/wikier.rdf");
- expect().
- statusCode(200).
- given().
- body(IOUtils.toString(is)).
- header("Content-Type", "application/rdf+xml").
- when().
- post(configurationService.getBaseContext() + ctx);
+ final ConfigurationService configurationService = marmotta.getService(ConfigurationService.class);
+ final ImportService importService = marmotta.getService(ImportService.class);
+ final InputStream is = this.getClass().getClassLoader().getResourceAsStream("wikier.rdf");
+ final ValueFactoryImpl vf = new ValueFactoryImpl();
+ importService.importData(is, "application/rdf+xml", null, vf.createURI(configurationService.getBaseContext() + ctx));
// 3. request a fragment
expect().