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/07/21 15:38:08 UTC
[12/16] git commit: MARMOTTA-508: moved initialization to a
ContainerRequestFilter
MARMOTTA-508: moved initialization to a ContainerRequestFilter
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/5d0993b6
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/5d0993b6
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/5d0993b6
Branch: refs/heads/ldp
Commit: 5d0993b66ac29be167c8763f035acd7f35c9640a
Parents: a8781fa
Author: Sergio Fernández <wi...@apache.org>
Authored: Tue Jul 15 11:52:43 2014 +0200
Committer: Sergio Fernández <wi...@apache.org>
Committed: Tue Jul 15 11:52:43 2014 +0200
----------------------------------------------------------------------
.../marmotta/platform/ldp/api/LdpService.java | 17 ++++++-
.../platform/ldp/services/LdpServiceImpl.java | 43 ++++++++++++++++
.../platform/ldp/webservices/LdpPreProcess.java | 53 ++++++++++++++++++++
.../platform/ldp/webservices/LdpWebService.java | 36 ++++---------
4 files changed, 121 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/5d0993b6/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/api/LdpService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/api/LdpService.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/api/LdpService.java
index e148f0f..46fd6ff 100644
--- a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/api/LdpService.java
+++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/api/LdpService.java
@@ -33,6 +33,8 @@ import org.openrdf.rio.RDFParseException;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Link;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -46,6 +48,8 @@ import java.util.*;
*/
public interface LdpService {
+ public static final Set<URI> SERVER_MANAGED_PROPERTIES = new HashSet<>(Arrays.asList(LDP.contains));
+
public static enum InteractionModel {
LDPR(LDP.Resource),
LDPC(LDP.Container);
@@ -79,7 +83,18 @@ public interface LdpService {
}
- public static final Set<URI> SERVER_MANAGED_PROPERTIES = new HashSet<>(Arrays.asList(LDP.contains));
+ /**
+ * Initializes the root LDP Container
+ *
+ * @param connection repository connection
+ * @param root root container
+ * @throws RepositoryException
+ */
+ void init(RepositoryConnection connection, URI root) throws RepositoryException;
+
+ String getResourceUri(UriInfo uriInfo);
+
+ UriBuilder getResourceUriBuilder(UriInfo uriInfo);
boolean exists(RepositoryConnection connection, String resource) throws RepositoryException;
http://git-wip-us.apache.org/repos/asf/marmotta/blob/5d0993b6/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java
index 75053b1..5e88356 100644
--- a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java
+++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java
@@ -35,9 +35,11 @@ import org.apache.marmotta.platform.ldp.patch.model.PatchLine;
import org.apache.marmotta.platform.ldp.patch.parser.ParseException;
import org.apache.marmotta.platform.ldp.patch.parser.RdfPatchParserImpl;
import org.apache.marmotta.platform.ldp.util.LdpUtils;
+import org.apache.marmotta.platform.ldp.webservices.LdpWebService;
import org.openrdf.model.*;
import org.openrdf.model.impl.ValueFactoryImpl;
import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.model.vocabulary.RDFS;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.RepositoryResult;
@@ -51,6 +53,8 @@ import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Link;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -83,6 +87,45 @@ public class LdpServiceImpl implements LdpService {
ldpInteractionModelProperty = ValueFactoryImpl.getInstance().createURI(LDP.NAMESPACE, "interactionModel");
}
+ @Override
+ public void init(RepositoryConnection connection, URI root) throws RepositoryException {
+ if (!exists(connection, root)) {
+ connection.add(root, RDF.TYPE, LDP.Resource, ldpContext);
+ connection.add(root, RDF.TYPE, LDP.RDFSource, ldpContext);
+ connection.add(root, RDF.TYPE, LDP.Container, ldpContext);
+ connection.add(root, RDF.TYPE, LDP.BasicContainer, ldpContext);
+
+ final ValueFactory valueFactory = connection.getValueFactory();
+ connection.add(root, RDFS.LABEL, valueFactory.createLiteral("Marmotta's LDP Root Container"), ldpContext);
+ final Literal now = valueFactory.createLiteral(new Date());
+ connection.add(root, DCTERMS.created, now, ldpContext);
+ connection.add(root, DCTERMS.modified, now, ldpContext);
+ }
+ }
+
+ @Override
+ public String getResourceUri(UriInfo uriInfo) {
+ final UriBuilder uriBuilder = getResourceUriBuilder(uriInfo);
+ uriBuilder.path(uriInfo.getPathParameters().getFirst("local"));
+ // uriBuilder.path(uriInfo.getPath().replaceFirst("/$", ""));
+ String uri = uriBuilder.build().toString();
+ log.debug("Request URI: {}", uri);
+ return uri;
+ }
+
+ @Override
+ public UriBuilder getResourceUriBuilder(UriInfo uriInfo) {
+ final UriBuilder uriBuilder;
+ if (configurationService.getBooleanConfiguration("ldp.force_baseuri", false)) {
+ log.trace("UriBuilder is forced to configured baseuri <{}>", configurationService.getBaseUri());
+ uriBuilder = UriBuilder.fromUri(java.net.URI.create(configurationService.getBaseUri()));
+ } else {
+ uriBuilder = uriInfo.getBaseUriBuilder();
+ }
+ uriBuilder.path(LdpWebService.PATH);
+ return uriBuilder;
+ }
+
private URI buildURI(String resource) {
return ValueFactoryImpl.getInstance().createURI(resource);
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/5d0993b6/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpPreProcess.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpPreProcess.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpPreProcess.java
new file mode 100644
index 0000000..342b9b7
--- /dev/null
+++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpPreProcess.java
@@ -0,0 +1,53 @@
+package org.apache.marmotta.platform.ldp.webservices;
+
+import org.apache.marmotta.platform.core.api.triplestore.SesameService;
+import org.apache.marmotta.platform.ldp.api.LdpService;
+import org.openrdf.model.URI;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.PreMatching;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+import java.io.IOException;
+
+/**
+ * Pre-process interceptor for LDP
+ *
+ * @author Sergio Fernández
+ */
+@PreMatching
+@ApplicationScoped
+public class LdpPreProcess implements ContainerRequestFilter {
+
+ @Inject
+ private LdpService ldpService;
+
+ @Inject
+ private SesameService sesameService;
+
+ @Override
+ public void filter(ContainerRequestContext context) throws IOException {
+ UriInfo uriInfo = context.getUriInfo();
+ UriBuilder resourceUriBuilder = ldpService.getResourceUriBuilder(uriInfo);
+ //TODO avoid the expensive operations once it's initialized
+ try {
+ final RepositoryConnection conn = sesameService.getConnection();
+ try {
+ conn.begin();
+ URI root = conn.getValueFactory().createURI(resourceUriBuilder.build().toString());
+ ldpService.init(conn, root);
+ conn.commit();
+ } finally {
+ conn.close();
+ }
+ } catch (RepositoryException e) {
+ e.printStackTrace();
+ throw new IOException(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/5d0993b6/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 f4afbf9..02cd5a8 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
@@ -52,7 +52,6 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.URISyntaxException;
import java.util.List;
-import java.util.Set;
import java.util.UUID;
/**
@@ -67,7 +66,7 @@ import java.util.UUID;
@Path(LdpWebService.PATH + "{local:.*}")
public class LdpWebService {
- public static final String PATH = "/ldp"; //FIXME: imho this should be root '/' (jakob)
+ public static final String PATH = "/ldp"; //TODO: at some point this will be root ('/') in marmotta
public static final String LDP_SERVER_CONSTRAINTS = "https://wiki.apache.org/marmotta/LDPImplementationReport/2014-03-11";
private Logger log = org.slf4j.LoggerFactory.getLogger(this.getClass());
@@ -86,20 +85,20 @@ public class LdpWebService {
@PostConstruct
protected void initialize() {
- // TODO: basic initialisation
+ // TODO: basic initialization
log.info("Starting up LDP WebService Endpoint");
}
@GET
public Response GET(@Context final UriInfo uriInfo, @Context Request r, @HeaderParam(HttpHeaders.ACCEPT) MediaType type) throws RepositoryException {
- final String resource = getResourceUri(uriInfo);
+ final String resource = ldpService.getResourceUri(uriInfo);
log.debug("GET to LDPR <{}>", resource);
return buildGetResponse(resource, r, type).build();
}
@HEAD
public Response HEAD(@Context final UriInfo uriInfo, @Context Request r, @HeaderParam(HttpHeaders.ACCEPT) MediaType type) throws RepositoryException {
- final String resource = getResourceUri(uriInfo);
+ final String resource = ldpService.getResourceUri(uriInfo);
log.debug("HEAD to LDPR <{}>", resource);
return buildGetResponse(resource, r, type).entity(null).build();
}
@@ -209,7 +208,7 @@ public class LdpWebService {
InputStream postBody, @HeaderParam(HttpHeaders.CONTENT_TYPE) MediaType type)
throws RepositoryException {
- final String container = getResourceUri(uriInfo);
+ final String container = ldpService.getResourceUri(uriInfo);
log.debug("POST to LDPC <{}>", container);
final RepositoryConnection conn = sesameService.getConnection();
@@ -304,7 +303,7 @@ public class LdpWebService {
@HeaderParam(HttpHeaders.IF_MATCH) EntityTag eTag,
@HeaderParam(HttpHeaders.CONTENT_TYPE) MediaType type, InputStream postBody)
throws RepositoryException, IOException, InvalidModificationException, RDFParseException, IncompatibleResourceTypeException, URISyntaxException {
- final String resource = getResourceUri(uriInfo);
+ final String resource = ldpService.getResourceUri(uriInfo);
log.error("PUT to <{}>", resource);
final RepositoryConnection conn = sesameService.getConnection();
@@ -369,7 +368,7 @@ public class LdpWebService {
*/
@DELETE
public Response DELETE(@Context UriInfo uriInfo) throws RepositoryException {
- final String resource = getResourceUri(uriInfo);
+ final String resource = ldpService.getResourceUri(uriInfo);
log.debug("DELETE to <{}>", resource);
final RepositoryConnection con = sesameService.getConnection();
@@ -400,7 +399,7 @@ public class LdpWebService {
public Response PATCH(@Context UriInfo uriInfo,
@HeaderParam(HttpHeaders.IF_MATCH) EntityTag eTag,
@HeaderParam(HttpHeaders.CONTENT_TYPE) MediaType type, InputStream postBody) throws RepositoryException {
- final String resource = getResourceUri(uriInfo);
+ final String resource = ldpService.getResourceUri(uriInfo);
log.debug("PATCH to <{}>", resource);
final RepositoryConnection con = sesameService.getConnection();
@@ -461,7 +460,7 @@ public class LdpWebService {
*/
@OPTIONS
public Response OPTIONS(@Context final UriInfo uriInfo) throws RepositoryException {
- final String resource = getResourceUri(uriInfo);
+ final String resource = ldpService.getResourceUri(uriInfo);
log.debug("OPTIONS to <{}>", resource);
final RepositoryConnection con = sesameService.getConnection();
@@ -580,21 +579,4 @@ public class LdpWebService {
return createResponse(connection, status.getStatusCode(), resource);
}
- protected String getResourceUri(UriInfo uriInfo) {
- final UriBuilder uriBuilder;
- if (configurationService.getBooleanConfiguration("ldp.force_baseuri", false)) {
- log.trace("UriBuilder is forced to configured baseuri <{}>", configurationService.getBaseUri());
- uriBuilder = UriBuilder.fromUri(java.net.URI.create(configurationService.getBaseUri()));
- } else {
- uriBuilder = uriInfo.getBaseUriBuilder();
- }
- uriBuilder.path(PATH);
- uriBuilder.path(uriInfo.getPathParameters().getFirst("local"));
-// uriBuilder.path(uriInfo.getPath().replaceFirst("/$", ""));
-
- String uri = uriBuilder.build().toString();
- log.debug("RequestUri: {}", uri);
- return uri;
- }
-
}