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