You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ja...@apache.org on 2014/02/11 17:00:58 UTC

[3/3] git commit: MARMOTTA-440: Some stubs for LDP webservices.

MARMOTTA-440: Some stubs for LDP webservices.


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/310d7923
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/310d7923
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/310d7923

Branch: refs/heads/ldp
Commit: 310d7923ea235f31c6d720bc20dceb3c674c2ee8
Parents: 2540d0a
Author: Jakob Frank <ja...@apache.org>
Authored: Tue Feb 11 16:59:35 2014 +0100
Committer: Jakob Frank <ja...@apache.org>
Committed: Tue Feb 11 16:59:35 2014 +0100

----------------------------------------------------------------------
 .../platform/ldp/webservices/LdpWebService.java | 88 +++++++++++++++++---
 .../ldp/webservices/LdpWebServiceTest.java      |  8 ++
 2 files changed, 84 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/310d7923/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java
index 03f9cc9..bc1d584 100644
--- a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java
+++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java
@@ -21,26 +21,33 @@ import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import javax.ws.rs.*;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.core.*;
 
 import org.apache.marmotta.platform.core.api.config.ConfigurationService;
+import org.apache.marmotta.platform.core.api.triplestore.SesameService;
+import org.openrdf.model.URI;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.rio.*;
 import org.slf4j.Logger;
 
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.UUID;
+
 /**
  * Linked Data Platform web services
- * 
+ *
  * @see <a href="http://www.w3.org/TR/ldp/">http://www.w3.org/TR/ldp/</a>
- * 
+ *
  * @author Sergio Fernández
  * @author Jakob Frank
  */
 @ApplicationScoped
 /* FIXME: imho this should be root '/' (jakob) */
-@Path("/" + LdpWebService.PATH)
+@Path(LdpWebService.PATH + "{local:.*}")
 public class LdpWebService {
-	
+
     public static final String PATH = "ldp";
 
     @Inject
@@ -49,24 +56,64 @@ public class LdpWebService {
     @Inject
     private ConfigurationService configurationService;
 
+    @Inject
+    private SesameService sesameService;
+
     @PostConstruct
     protected void initialize() {
         // TODO: basic initialisation
     }
 
     @GET
-    public Response GET(@Context UriInfo uriInfo) {
-        log.error("Request: {}", uriInfo.getRequestUri());
-        return Response.status(Response.Status.NOT_IMPLEMENTED).build();
+    public Response GET(@Context UriInfo uriInfo, @Context Request request, @PathParam("local") String localPart) {
+        /* Both methods result in the absolute path, but which one is preferable? */
+        log.trace("RequestUri: {}", uriInfo.getRequestUri());
+        log.trace("BaseUri+LocalPart: {}ldp{}", uriInfo.getBaseUri(), localPart);
+
+        // TODO: Proper content negotiation
+        final RDFFormat format = RDFFormat.TURTLE;
+        final String subject = uriInfo.getRequestUri().toString();
+
+        // Deliver all triples with <subject> as subject.
+
+        // use #createResponse to add global Headers.
+        return createResponse(Response.Status.NOT_IMPLEMENTED, uriInfo).build();
     }
 
     @POST
-    public Response POST() {
+    public Response POST(@Context UriInfo uriInfo, @Context Request request) {
+        /*
+         * TODO: POST implementation
+         * a POST to an existing resource converts this resource into an LDP-C
+         */
+        // Honor client wishes from Slug-header (Sec. 6.4.11)
+        //    http://www.ietf.org/rfc/rfc5023.txt
+        final String localName = UUID.randomUUID().toString();
+
+        final String container = uriInfo.getRequestUri().toString();
+        final String newResource = uriInfo.getRequestUriBuilder().path(localName).build().toString();
+
+        // Add container triples (Sec. 6.4.3)
+
+        // use #createResponse to add global Headers.
+        // return createResponse(Response.Status.CREATED, uriInfo).location(java.net.URI.create(newResource)).build();
+
         return Response.status(Response.Status.NOT_IMPLEMENTED).build();
     }
 
     @PUT
-    public Response PUT() {
+    public Response PUT(@Context UriInfo uriInfo, @Context Request request) {
+        /*
+         * TODO: PUT implementation
+         *
+         * check for If-Match header (ETag) -> 428 Precondition Required (Sec. 5.5.3)
+         * check ETag -> 412 Precondition Failed (Sec. 5.5.3)
+         * request.evaluatePreconditions(eTag)
+         *
+         * clients should not be allowed to update LDPC-membership triples -> 409 Conflict (Sec. 6.5.1)
+         *
+         * if the target resource exists, replace ALL data of the target.
+         */
         return Response.status(Response.Status.NOT_IMPLEMENTED).build();
     }
 
@@ -89,4 +136,21 @@ public class LdpWebService {
     public Response OPTIONS() {
         return Response.status(Response.Status.NOT_IMPLEMENTED).build();
     }
+
+    protected Response.ResponseBuilder createResponse(int status, UriInfo uriInfo) {
+        final String targetURI = uriInfo.getRequestUri().toString();
+        final Response.ResponseBuilder rb = Response.status(status);
+
+        /* TODO: Add "global" Headers for LDP
+         * - ETag (Sec. 5.2.7)
+         * - Link rel='type' (Sec. 5.2.8 and 6.2.8)
+         * - Link rel='describedby' (Sec. 5.2.11)
+         */
+
+        return rb;
+    }
+
+    protected Response.ResponseBuilder createResponse(Response.Status status, UriInfo uriInfo) {
+        return createResponse(status.getStatusCode(), uriInfo);
+    }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/310d7923/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java b/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
index dfc454e..947d594 100644
--- a/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
+++ b/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URISyntaxException;
 
+import org.junit.Assert;
 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.user.UserService;
@@ -58,6 +59,13 @@ public class LdpWebServiceTest {
 
     }
 
+    @Test
+    public void test() {
+	// Nothing is implemented so far...
+        Assert.assertEquals(501, RestAssured.get("/ldp").statusCode());
+        Assert.assertEquals(501, RestAssured.get("/ldp/foo/bar/and/some/more").statusCode());
+    }
+
     @AfterClass
     public static void tearDown() {
         marmotta.shutdown();