Updated Branches:
  refs/heads/develop 094984842 -> 8f17c4328

some fixes in the ContentWebService
- redirect for requests without mimetype


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

Branch: refs/heads/develop
Commit: 8f17c4328aef0c13f4c5e0be92231fcdf032c77c
Parents: 0949848
Author: Jakob Frank <[email protected]>
Authored: Wed Apr 3 15:40:00 2013 +0200
Committer: Jakob Frank <[email protected]>
Committed: Wed Apr 3 16:03:27 2013 +0200

----------------------------------------------------------------------
 .../webservices/resource/ContentWebService.java    |   75 ++++++++++++++-
 .../core/webservices/resource/MetaWebService.java  |   10 +-
 .../webservices/resource/ResourceWebService.java   |   11 +-
 .../resource/ResourceWebServiceHelper.java         |   16 +++-
 4 files changed, 95 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/8f17c432/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ContentWebService.java
----------------------------------------------------------------------
diff --git 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ContentWebService.java
 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ContentWebService.java
index 5c8a8bf..bbc13ce 100644
--- 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ContentWebService.java
+++ 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ContentWebService.java
@@ -20,6 +20,7 @@ package 
org.apache.marmotta.platform.core.webservices.resource;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.URISyntaxException;
 import java.net.URLDecoder;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -102,7 +103,7 @@ public class ContentWebService {
     @Path(ResourceWebService.MIME_PATTERN + ResourceWebService.UUID_PATTERN)
     public Response getContentLocal(@PathParam("uuid") String uuid, 
@PathParam("mimetype") String mimetype, @HeaderParam("Range") String range) 
throws UnsupportedEncodingException {
         String uri = configurationService.getBaseUri() + "resource/" + uuid;
-        return getContent(uri, mimetype, uuid, range);
+        return getContent(uri, mimetype, range);
     }
 
     /**
@@ -127,8 +128,71 @@ public class ContentWebService {
     @GET
     @Path(ResourceWebService.MIME_PATTERN)
     public Response getContentRemote(@QueryParam("uri") @NotNull String uri, 
@PathParam("mimetype") String mimetype, @HeaderParam("Range") String range) 
throws UnsupportedEncodingException {
-        return getContent(URLDecoder.decode(uri, "utf-8"), mimetype, null, 
range);
+        return getContent(URLDecoder.decode(uri, "utf-8"), mimetype, range);
     }
+    
+    /**
+     * Creates a redirect depending of the stored mimeType for the requested 
uri.
+     * @param uri the resource requested
+     * @return a redirect
+     * @throws UnsupportedEncodingException
+     * 
+     * @HTTP 3xx redirect to the requested content
+     * @HTTP 404 if the resource has no contetn
+     * @HTTP 500 Internal Error
+     */
+    @GET
+    public Response getContentRemote(@QueryParam("uri") @NotNull String uri) 
throws UnsupportedEncodingException {
+        try {
+            final RepositoryConnection conn = sesameService.getConnection();
+            try {
+                conn.begin();
+                URI resource = conn.getValueFactory().createURI(uri);
+                conn.commit();
+                final String mimeType = 
contentService.getContentType(resource);
+                if (mimeType != null) {
+                    return Response
+                            .status(configurationService.getIntConfiguration(
+                                    "linkeddata.redirect.status", 303))
+                            .header("Vary", "Accept")
+                            .header("Content-Type", mimeType + "; rel=content")
+                            .location(
+                                    new java.net.URI(ResourceWebServiceHelper
+                                            .buildResourceLink(resource,
+                                                    "content", mimeType,
+                                                    configurationService)))
+                            .build();
+
+                } else {
+                    return Response.status(Status.NOT_FOUND).entity("No 
content for <"+resource.stringValue()+">").build();
+                }
+            } finally {
+                conn.close();
+            }
+        } catch (RepositoryException ex) {
+            return Response.serverError().entity(ex.getMessage()).build();
+        } catch (URISyntaxException ex) {
+            return Response.serverError().entity(ex.getMessage()).build();
+        }
+    }
+    
+    /**
+     * Creates a redirect depending of the stored mimeType for the requested 
resource.
+     * @param uuid the local resource requested
+     * @return a redirect
+     * @throws UnsupportedEncodingException
+     * 
+     * @HTTP 3xx redirect to the requested content
+     * @HTTP 404 if the resource has no content
+     * @HTTP 500 Internal Error
+     */
+    @GET
+    @Path(ResourceWebService.UUID_PATTERN)
+    public Response getContentLocal(@PathParam("uuid") String uuid) throws 
UnsupportedEncodingException {
+        String uri = configurationService.getBaseUri() + 
ConfigurationService.RESOURCE_PATH + "/" + uuid;
+        return getContentRemote(uri);
+    }
+
 
     /**
      * Sets content to a given locale resource
@@ -227,7 +291,7 @@ public class ContentWebService {
         return deleteContentRemote(uri);
     }
 
-    private Response getContent(String uri, String mimetype, String uuid, 
String range) throws UnsupportedEncodingException {
+    private Response getContent(String uri, String mimetype, String range) 
throws UnsupportedEncodingException {
         try {
             // FIXME String appendix = uuid == null ? "?uri=" + 
URLEncoder.encode(uri, "utf-8") :
             // "/" + uuid;
@@ -236,6 +300,9 @@ public class ContentWebService {
                 conn.begin();
                 URI resource = conn.getValueFactory().createURI(uri);
                 conn.commit();
+                if (mimetype == null) {
+                    mimetype = contentService.getContentType(resource);
+                }
                 if (contentService.hasContent(resource, mimetype)) {
 
                     InputStream is = contentService.getContentStream(resource, 
mimetype);
@@ -279,7 +346,7 @@ public class ContentWebService {
                     }
 
                     // append data links
-                    String s = 
ResourceWebServiceHelper.buildMetaLinks(resource, uuid, 
kiWiIOService.getProducedTypes(), configurationService);
+                    String s = 
ResourceWebServiceHelper.buildMetaLinks(resource, 
kiWiIOService.getProducedTypes(), configurationService);
                     if (s != null) {
                         response.getMetadata().add("Links", s);
                     }

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/8f17c432/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/MetaWebService.java
----------------------------------------------------------------------
diff --git 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/MetaWebService.java
 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/MetaWebService.java
index e771d14..a09a9e2 100644
--- 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/MetaWebService.java
+++ 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/MetaWebService.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -44,7 +43,6 @@ import javax.ws.rs.core.StreamingOutput;
 import org.apache.marmotta.commons.collections.CollectionUtils;
 import org.apache.marmotta.commons.http.ETagGenerator;
 import org.apache.marmotta.commons.sesame.repository.ResourceUtils;
-import org.apache.marmotta.commons.util.DateUtils;
 import org.apache.marmotta.platform.core.api.config.ConfigurationService;
 import org.apache.marmotta.platform.core.api.content.ContentService;
 import org.apache.marmotta.platform.core.api.io.MarmottaIOService;
@@ -111,7 +109,7 @@ public class MetaWebService {
     @GET
     @Path(ResourceWebService.MIME_PATTERN)
     public Response getMetaRemote(@QueryParam("uri") @NotNull String uri, 
@PathParam("mimetype") String mimetype) throws UnsupportedEncodingException {
-        return getMeta(URLDecoder.decode(uri, "utf-8"), mimetype, null);
+        return getMeta(URLDecoder.decode(uri, "utf-8"), mimetype);
     }
 
     /**
@@ -136,7 +134,7 @@ public class MetaWebService {
     @Path(ResourceWebService.MIME_PATTERN + ResourceWebService.UUID_PATTERN)
     public Response getMetaLocal(@PathParam("uuid") String uuid, 
@PathParam("mimetype") String mimetype) throws UnsupportedEncodingException {
         String uri = configurationService.getBaseUri() + "resource/" + uuid;
-        return getMeta(uri, mimetype, uuid);
+        return getMeta(uri, mimetype);
     }
 
     /**
@@ -239,7 +237,7 @@ public class MetaWebService {
         return deleteMetaRemote(uri);
     }
 
-    private Response getMeta(String uri, String mimetype, String uuid) throws 
UnsupportedEncodingException {
+    private Response getMeta(String uri, String mimetype) throws 
UnsupportedEncodingException {
         try {
             RepositoryConnection conn = sesameService.getConnection();
             
@@ -313,7 +311,7 @@ public class MetaWebService {
                     List<String> links = new LinkedList<String>();
 
                     // build the link to the human readable content of this 
resource (if it exists)
-                    String contentLink = 
ResourceWebServiceHelper.buildContentLink(resource, uuid, 
contentService.getContentType(resource), configurationService);
+                    String contentLink = 
ResourceWebServiceHelper.buildContentLink(resource, 
contentService.getContentType(resource), configurationService);
                     if(!"".equals(contentLink)) {
                         links.add(contentLink);
                     }

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/8f17c432/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebService.java
----------------------------------------------------------------------
diff --git 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebService.java
 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebService.java
index 2987d56..415fd25 100644
--- 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebService.java
+++ 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebService.java
@@ -298,7 +298,7 @@ public class ResourceWebService {
     public Response getLocal(@PathParam("uuid") String uuid, 
@HeaderParam("Accept") String types) throws UnsupportedEncodingException {
         String uri = configurationService.getBaseUri() + "resource/" + uuid;
         try {
-            return get(uri, types, uuid);
+            return get(uri, types);
         } catch (URISyntaxException e) {
             return Response.serverError().entity(e.getMessage()).build();
         }
@@ -332,7 +332,7 @@ public class ResourceWebService {
                     types = format;
                 }
                 //TODO: add 'If-None-Match' support, sending a '304 Not 
Modified' when the ETag matches
-                return get(uri, types, null);
+                return get(uri, types);
             } else
                 return Response.status(400).entity("uri may not be 
null").build();
         } catch (URISyntaxException e) {
@@ -340,7 +340,7 @@ public class ResourceWebService {
         }
     }
 
-    private Response get(String uri, String types, String uuid) throws 
URISyntaxException, UnsupportedEncodingException {
+    private Response get(String uri, String types) throws URISyntaxException, 
UnsupportedEncodingException {
         try {
 
             RepositoryConnection conn = sesameService.getConnection();
@@ -379,7 +379,7 @@ public class ResourceWebService {
                 log.debug("identified best type: {}",bestType);
 
                 if(bestType != null) {
-                    Response response = buildGetResponse(resource, uuid, 
bestType);
+                    Response response = buildGetResponse(resource, bestType);
                     response.getMetadata().add("Last-Modified", 
KiWiSesameUtil.lastModified(resource, conn));
                     response.getMetadata().add("ETag", "W/\"" + 
ETagGenerator.getWeakETag(conn, resource) + "\"");
                     return response;
@@ -596,8 +596,7 @@ public class ResourceWebService {
         return deleteResourceRemote(uri);
     }
 
-    private Response buildGetResponse(URI resource, String uuid,
-            ContentType type) {
+    private Response buildGetResponse(URI resource, ContentType type) {
         try {
 
             return Response

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/8f17c432/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebServiceHelper.java
----------------------------------------------------------------------
diff --git 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebServiceHelper.java
 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebServiceHelper.java
index cf23571..88bbddd 100644
--- 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebServiceHelper.java
+++ 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/resource/ResourceWebServiceHelper.java
@@ -69,8 +69,15 @@ public class ResourceWebServiceHelper {
         }
     }
     
+    /**
+     * @deprecated Use {@link 
#buildContentLink(URI,String,ConfigurationService)} instead
+     */
     public static String buildContentLink(URI resource, String uuid, String 
mime, ConfigurationService configurationService) {
-        // test if there is content
+        return buildContentLink(resource, mime, configurationService);
+    }
+
+    public static String buildContentLink(URI resource, String mime, 
ConfigurationService configurationService) {
+        //TODO: test if there is content
         StringBuffer b = new StringBuffer();
         if (mime != null) {
             b.append("<");
@@ -85,7 +92,14 @@ public class ResourceWebServiceHelper {
         return b.toString();
     }     
     
+    /**
+     * @deprecated Use {@link 
#buildMetaLinks(URI,List<String>,ConfigurationService)} instead
+     */
     public static String buildMetaLinks(URI resource, String uuid, 
List<String> datamimes, ConfigurationService configurationService) {
+        return buildMetaLinks(resource, datamimes, configurationService);
+    }
+
+    public static String buildMetaLinks(URI resource, List<String> datamimes, 
ConfigurationService configurationService) {
         StringBuilder b = new StringBuilder();
         for (int i = 0; i < datamimes.size(); i++) {
             b.append("<");

Reply via email to