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/02/11 09:08:44 UTC
[2/3] git commit: MARMOTTA-24: removed the ldp experiments from core
MARMOTTA-24: removed the ldp experiments from core
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/1e3bf9b2
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/1e3bf9b2
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/1e3bf9b2
Branch: refs/heads/ldp
Commit: 1e3bf9b2300dba6e499e167ade9ce32301c09191
Parents: bc9ebf2
Author: Sergio Fernández <wi...@apache.org>
Authored: Tue Feb 11 08:58:35 2014 +0100
Committer: Sergio Fernández <wi...@apache.org>
Committed: Tue Feb 11 08:58:35 2014 +0100
----------------------------------------------------------------------
.../core/api/triplestore/LdpService.java | 86 -----
.../services/triplestore/LdpServiceImpl.java | 357 -------------------
.../webservices/triplestore/LdpWebService.java | 144 --------
.../src/main/resources/kiwi-module.properties | 3 +-
4 files changed, 1 insertion(+), 589 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/1e3bf9b2/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/triplestore/LdpService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/triplestore/LdpService.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/triplestore/LdpService.java
deleted file mode 100644
index 8644867..0000000
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/triplestore/LdpService.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.marmotta.platform.core.api.triplestore;
-
-import java.net.URISyntaxException;
-import java.util.List;
-
-import org.openrdf.model.URI;
-import org.openrdf.repository.RepositoryException;
-
-/**
- * Interface for supporting LDP (WIP)
- *
- * @see http://www.w3.org/TR/ldp/
- * @author Sergio Fernández
- *
- */
-public interface LdpService {
-
- static final String DEFAULT_PREFIX = "container";
-
- /**
- * Get the base context URI
- *
- * @return base context
- */
- String getBaseContainer();
-
- /**
- * Lists the current container
- *
- * @return list of containers
- */
- List<URI> list();
-
- /**
- * Return the URI for this LDPR
- *
- * @param container plain text URI
- * @return container's URI, null if does not exit
- */
- URI get(String resource);
-
- /**
- * Creates a new LDPR
- *
- * @param container plain text URI
- * @return URI of the new container if success
- * @throws URISyntaxException
- */
- boolean create(String resource) throws URISyntaxException;
-
- /**
- * Creates a new LDPR defining a title for it
- *
- * @param container plain text URI
- * @return URI of the new container if success
- * @throws URISyntaxException
- */
- boolean create(String resource, String title) throws URISyntaxException;
-
- /**
- * Delete this LDPR
- *
- * @param resource uri
- * @return
- * @throws RepositoryException
- */
- boolean delete(String resource) throws RepositoryException;
-
-}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/1e3bf9b2/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/LdpServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/LdpServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/LdpServiceImpl.java
deleted file mode 100644
index e4821f4..0000000
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/LdpServiceImpl.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.marmotta.platform.core.services.triplestore;
-import static org.apache.marmotta.commons.sesame.repository.ExceptionUtils.handleRepositoryException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-
-import org.apache.marmotta.platform.core.api.config.ConfigurationService;
-import org.apache.marmotta.platform.core.api.prefix.PrefixService;
-import org.apache.marmotta.platform.core.api.triplestore.ContextService;
-import org.apache.marmotta.platform.core.api.triplestore.LdpService;
-import org.apache.marmotta.platform.core.api.triplestore.SesameService;
-
-import org.openrdf.model.Resource;
-import org.openrdf.model.URI;
-import org.openrdf.model.ValueFactory;
-import org.openrdf.model.vocabulary.RDF;
-import org.openrdf.model.vocabulary.RDFS;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.slf4j.Logger;
-
-import org.apache.marmotta.commons.sesame.repository.ResourceUtils;
-
-/**
- * (Experimental) Implementation for supporting LDP (WIP)
- *
- * @author Sergio Fernández
- *
- */
-@ApplicationScoped
-public class LdpServiceImpl implements LdpService {
-
- private URI context;
-
- @Inject
- private Logger log;
-
- @Inject
- private ConfigurationService configurationService;
-
- @Inject
- private SesameService sesameService;
-
- @Inject
- private ContextService contextService;
-
- @Inject
- private PrefixService prefixService;
-
- @PostConstruct
- public void initialize() {
- String uri = getBaseContainer();
- try {
- this.context = contextService.createContext(uri, "ldp (experimental context)");
- createContainer(uri, "ldp base container");
- } catch (URISyntaxException e) {
- log.error("Root LDP Container {} cannot be created: {}", uri, e.getMessage());
- }
- }
-
- @Override
- public String getBaseContainer() {
- return configurationService.getBaseContext() + ConfigurationService.LDP_PATH;
- }
-
- @Override
- public List<URI> list() {
- List<URI> containers = new ArrayList<URI>();
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- checkConnectionNamespace(conn);
- conn.begin();
- Iterable<Resource> results = ResourceUtils.listResources(conn, conn.getValueFactory().createURI(prefixService.getNamespace("ldp"), "Container"));
- for (Resource result : results) {
- if(result instanceof URI) {
- containers.add((URI)result);
- }
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException e) {
- handleRepositoryException(e, LdpServiceImpl.class);
- }
- return containers;
- }
-
- @Override
- public URI get(String uri) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- checkConnectionNamespace(conn);
- conn.begin();
- return (ResourceUtils.existsResource(conn, uri) ? ResourceUtils.getUriResource(conn, uri) : null);
- } finally {
- conn.commit();
- conn.close();
- }
- } catch(RepositoryException ex) {
- handleRepositoryException(ex, LdpServiceImpl.class);
- }
- return null;
- }
-
- @Override
- public boolean create(String uri) throws URISyntaxException {
- return create(uri, null);
- }
-
- @Override
- public boolean create(String uri, String title) throws URISyntaxException {
- URI parent = getParentContainer(uri);
- if (parent != null) {
- return createResource(uri, parent);
- } else {
- throw new URISyntaxException(uri, "Non suitable parent container found");
- }
- }
-
- private boolean createResource(String uri, URI container) {
- //TODO: refactor this code, already implemented at the ResourceWebService,
- //by moving all business logic to a service
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- checkConnectionNamespace(conn);
- conn.begin();
- ValueFactory factory = conn.getValueFactory();
- URI resource = ResourceUtils.getUriResource(conn, uri);
- //TODO: chek if already exists
- conn.add(resource, RDF.TYPE, factory.createURI(prefixService.getNamespace("ldp"), "Resource"), container);
- conn.add(resource, factory.createURI(prefixService.getNamespace("dct"), "created"), factory.createLiteral(new Date()), container);
- conn.add(container, RDFS.MEMBER, resource, container);
- return true; //FIXME: 201 vs 200
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- return false;
- }
- }
-
- private boolean createContainer(String container, String title) throws URISyntaxException {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- checkConnectionNamespace(conn);
- conn.begin();
- ValueFactory factory = conn.getValueFactory();
- URI uri = ResourceUtils.getUriResource(conn, container);
- conn.add(uri, RDF.TYPE, factory.createURI(prefixService.getNamespace("ldp"), "Container"), context);
- conn.add(uri, RDFS.LABEL, factory.createLiteral(title), context);
- conn.add(uri, factory.createURI(prefixService.getNamespace("dct"), "created"), factory.createLiteral(new Date()), context);
- log.info("Created new container <{}>", uri.stringValue());
- return true;
- } finally {
- conn.commit();
- conn.close();
- }
- } catch(RepositoryException ex) {
- handleRepositoryException(ex, LdpServiceImpl.class);
- }
- return false;
- }
-
-// @Override
-// public boolean addMember(String container, String member) {
-// //TODO: check parent relationship
-// try {
-// RepositoryConnection conn = sesameService.getConnection();
-// try {
-// checkConnectionNamespace(conn);
-// URI parent = ResourceUtils.getUriResource(conn, container);
-// URI uri = ResourceUtils.getUriResource(conn, member);
-// URI context = parent; //TODO: for the moment, every container is also a context (named graph) for us
-// conn.add(parent, RDFS.MEMBER, uri, context);
-// log.info("Created new container <{}>", uri.stringValue());
-// } finally {
-// conn.commit();
-// conn.close();path
-// }
-// return true;
-// } catch(RepositoryException ex) {
-// handleRepositoryException(ex, LdpServiceImpl.class);
-// return false;
-// }
-// }
-
- @Override
- public boolean delete(String uri) throws RepositoryException {
- if (isContainer(uri)) {
- return deleteContainer(uri);
- } else {
- return deleteResource(uri);
- }
- }
-
- /**
- * Resource deletion
- *
- * @todo refactor this code, already implemented at the ResourceWebService, by moving all business logic to a service
- *
- * @param uri
- * @return
- * @throws RepositoryException
- */
- private boolean deleteResource(String uri) throws RepositoryException {
- //TODO: refactor this code, already implemented at the ResourceWebService,
- //by moving all business logic to a service
- RepositoryConnection conn = sesameService.getConnection();
- URI parent;
- try {
- parent = getParentContainer(uri);
- } catch (URISyntaxException e) {
- parent = null;
- }
- try {
- conn.begin();
- URI resource = conn.getValueFactory().createURI(uri);
- conn.remove(resource, null, null, parent);
- return true;
- } finally {
- conn.commit();
- conn.close();
- }
- }
-
- /**
- * Container deleteion
- * (using a composition model)
- *
- * @param uri
- * @return
- * @throws RepositoryException
- */
- private boolean deleteContainer(String uri) throws RepositoryException {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- conn.begin();
- URI context = conn.getValueFactory().createURI(uri);
- conn.remove((Resource)null, null, null, context);
- return true;
- } finally {
- conn.commit();
- conn.close();
- }
- }
-
- /**
- * Check the connection's namespace, using the base context when needed
- *
- * @param conn
- * @throws RepositoryException
- */
- private void checkConnectionNamespace(RepositoryConnection conn)
- throws RepositoryException {
- if(conn.getNamespace(DEFAULT_PREFIX) == null) {
- conn.setNamespace(DEFAULT_PREFIX, getBaseContainer());
- }
- }
-
- /**
- * Check whenever this URI represents a PDPC
- *
- * @param uri
- * @return
- */
- private boolean isContainer(String uri) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- checkConnectionNamespace(conn);
- conn.begin();
- Iterable<Resource> results = ResourceUtils.listResources(conn, conn.getValueFactory().createURI(prefixService.getNamespace("ldp"), "Container"), conn.getValueFactory().createURI(uri));
- for (Resource result : results) {
- if(result instanceof URI) {
- if (uri.equals(result.stringValue())) {
- return true;
- }
- }
- }
- return false;
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException e) {
- handleRepositoryException(e, LdpServiceImpl.class);
- return false;
- }
- }
-
- /**
- * Get the parent container for a resource
- *
- * @param uri
- * @return
- * @throws URISyntaxException
- */
- private URI getParentContainer(String uri) throws URISyntaxException {
- String base = this.getBaseContainer();
- if (!uri.startsWith(base)) {
- throw new URISyntaxException(uri, "Invalid URI: base URI does not matches with " + base);
- }
- if (base.equals(uri)) {
- log.error("{} is already the base container", uri);
- return null;
- }
- String parent = uri.substring(0, uri.lastIndexOf('/'));
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- checkConnectionNamespace(conn);
- conn.begin();
- if (!ResourceUtils.existsResource(conn, parent)) {
- log.warn("Container {} does not exist, so creating it...", parent);
- createContainer(parent, parent);
- }
- return ResourceUtils.getUriResource(conn, parent);
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException e) {
- log.error("Error checking context {}: {}", parent, e.getMessage());
- return null;
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/1e3bf9b2/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/LdpWebService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/LdpWebService.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/LdpWebService.java
deleted file mode 100644
index d489512..0000000
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/LdpWebService.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.marmotta.platform.core.webservices.triplestore;
-
-import org.apache.marmotta.platform.core.api.config.ConfigurationService;
-import org.apache.marmotta.platform.core.api.triplestore.LdpService;
-import org.apache.marmotta.platform.core.util.WebServiceUtil;
-import org.openrdf.model.URI;
-import org.openrdf.repository.RepositoryException;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import java.io.UnsupportedEncodingException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static javax.ws.rs.core.Response.status;
-
-/**
- * LDP Web Service (isolated for the moment for experimenting with
- * the concepts, but at some point it should be merged back to
- * {@link org.apache.marmotta.platform.core.webservices.resource.ResourceWebService})
- *
- * @author Sergio Fernández
- *
- */
-@ApplicationScoped
-@Path("/" + ConfigurationService.LDP_PATH)
-public class LdpWebService {
-
- @Inject
- private ConfigurationService configurationService;
-
- @Inject
- private LdpService ldpService;
-
- private static final String UUID_PATTERN = "{uuid:[^#?]+}";
-
- /**
- * Produces a list of all containers available
- *
- * @return list of container
- */
- @GET
- @Produces("application/json")
- public Response list() {
- try {
- List<String> l = new ArrayList<String>();
- for(URI container : ldpService.list()) {
- l.add(container.stringValue());
- }
- return Response.ok().entity(l).build();
- } catch(Exception e) {
- return Response.serverError().entity(e.getMessage()).build();
- }
- }
-
- /**
- * Returns the content stored on this resource/container
- *
- * @param types, accepted formats
- * @param uuid, a unique container identifier
- * @return redirect response to the export service
- */
- @GET
- @Path(UUID_PATTERN)
- public Response get(@HeaderParam("Accept") String types, @PathParam("uuid") String uuid) throws UnsupportedEncodingException,
- URISyntaxException {
- String uri = buildUri(uuid);
- if (ldpService.get(uri) != null) {
- java.net.URI seeAlso = new java.net.URI(configurationService.getBaseUri() + ConfigurationService.RESOURCE_PATH + "?uri=" + uri);
- return Response.seeOther(seeAlso).header("Accept", types).build();
- } else {
- return Response.status(Status.NOT_FOUND).entity("Container not found").header("Accept", types).build();
- }
- }
-
- @POST
- @Path(UUID_PATTERN)
- public Response create(@HeaderParam("Accept") String types, @PathParam("uuid") String uuid, @QueryParam("title") String title) throws UnsupportedEncodingException,
- URISyntaxException {
- String uri = buildUri(uuid);
- if (ldpService.create(uri)) {
- Response response = status(Status.CREATED).entity("Container created").header("Accept", types).build();
- response.getMetadata().add("Location", uri);
- response.getMetadata().add("Vary", "Content-Type");
- return response;
- } else {
- return Response.status(Status.CONFLICT).entity("Container already exists").header("Accept", types).build();
- }
- }
-
- /**
- * Deletes this resource/container
- *
- * @param types formats accepted
- * @param uuid container identifier
- * @return response
- */
- @DELETE
- @Path(UUID_PATTERN)
- public Response delete(String types, @PathParam("uuid") String uuid) {
- String uri = buildUri(uuid);
- try {
- final boolean deleted = ldpService.delete(uri);
- if (deleted) {
- return Response.ok().build();
- } else {
- return Response.status(Response.Status.NOT_FOUND).build();
- }
- } catch (RepositoryException ex) {
- return Response.serverError().entity(ex.getMessage()).build();
- }
- }
-
- private String buildBaseUri() {
- String root = configurationService.getBaseUri();
- return root.substring(0, root.length() - 1) + WebServiceUtil.getResourcePath(this) + "/";
- }
-
- private String buildUri(String uuid) {
- return buildBaseUri() + uuid;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/1e3bf9b2/platform/marmotta-core/src/main/resources/kiwi-module.properties
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/resources/kiwi-module.properties b/platform/marmotta-core/src/main/resources/kiwi-module.properties
index 7fe8273..5e758f2 100644
--- a/platform/marmotta-core/src/main/resources/kiwi-module.properties
+++ b/platform/marmotta-core/src/main/resources/kiwi-module.properties
@@ -71,8 +71,7 @@ webservices=org.apache.marmotta.platform.core.webservices.config.ConfigurationWe
org.apache.marmotta.platform.core.webservices.resource.MetaWebService,\
org.apache.marmotta.platform.core.webservices.resource.ContentWebService,\
org.apache.marmotta.platform.core.webservices.resource.InspectionWebService,\
- org.apache.marmotta.platform.core.webservices.triplestore.LdpWebService,\
org.apache.marmotta.platform.core.webservices.triplestore.ContextWebService,\
org.apache.marmotta.platform.core.webservices.prefix.PrefixWebService,\
org.apache.marmotta.platform.core.webservices.logging.LoggingWebService
-
\ No newline at end of file
+