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().