MARMOTTA-544: added POST support, correctly implemented PUT semantics

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

Branch: refs/heads/develop
Commit: f20648f358d1b672131f394efb5ca968fd5a27ff
Parents: 3d822f6
Author: Sergio Fernández <[email protected]>
Authored: Mon Sep 22 08:46:27 2014 +0200
Committer: Sergio Fernández <[email protected]>
Committed: Mon Sep 22 08:46:27 2014 +0200

----------------------------------------------------------------------
 .../triplestore/ContextWebService.java          | 70 +++++++++++++++++---
 1 file changed, 62 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/f20648f3/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/ContextWebService.java
----------------------------------------------------------------------
diff --git 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/ContextWebService.java
 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/ContextWebService.java
index 84d0c97..c1a5afc 100644
--- 
a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/ContextWebService.java
+++ 
b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/webservices/triplestore/ContextWebService.java
@@ -116,7 +116,7 @@ public class ContextWebService {
      * @param context uri
      * @param accept Accept HTTP header
      * @param format format requested (overwrites accept header)
-     *               
+     *
      * @return response
      * @throws URISyntaxException
      * @see <a 
href="http://www.w3.org/TR/sparql11-http-rdf-update/#indirect-graph-identification";>Indirect
 Graph Identification</a>
@@ -129,10 +129,20 @@ public class ContextWebService {
             URI uri = buildExportUri(context, accept, format);
             return Response.seeOther(uri).build();        
         }
-    }    
-    
-    @PUT
-    public Response put(@QueryParam("graph") String context, 
@HeaderParam("Content-Type") String type, @Context HttpServletRequest request) 
throws IOException {
+    }
+
+    /**
+     * Merge of the enclosed RDF payload enclosed into the RDF graph content 
identified by the encoded URI.
+     *
+     * @param context context URI
+     * @param type Content-Type header
+     * @param request request
+     *
+     * @return response
+     * @throws IOException
+     */
+    @POST
+    public Response post(@QueryParam("graph") String context, 
@HeaderParam("Content-Type") String type, @Context HttpServletRequest request) 
throws IOException {
         if (StringUtils.isBlank(context)) {
             return Response.status(Status.NOT_ACCEPTABLE).entity("missing 
'graph' uri for indirect graph identification").build();
         } else {
@@ -142,12 +152,56 @@ public class ContextWebService {
             Set<String> acceptedFormats = contextService.getAcceptFormats();
             if (type == null || !acceptedFormats.contains(type)) {
                 return Response.status(412).entity("define a valid 
content-type (types: " + acceptedFormats + ")").build();
-            }   
+            }
             final boolean imported = contextService.importContent(context, 
request.getInputStream(), type);
             return imported ? Response.ok().build() : 
Response.status(Status.NOT_FOUND).build();
-        }        
+        }
     }
-    
+
+    /**
+     * Merge of the enclosed RDF payload enclosed into the RDF graph content 
identified by the request URI.
+     *
+     * @param uuid context local id
+     * @param type Content-Type header
+     * @param request request
+     *
+     * @return response
+     * @throws IOException
+     */
+    @POST
+    public Response postContext(@PathParam("uuid") String uuid, 
@HeaderParam("Content-Type") String type, @Context HttpServletRequest request) 
throws IOException {
+        return post(buildUri(uuid), type, request);
+    }
+
+    /**
+     * Store the enclosed RDF payload in the context identified by the encoded 
URI.
+     *
+     * @param context context uri
+     * @param type Content-Type of the payload
+     * @param request request object
+     *
+     * @return response
+     * @throws IOException
+     */
+    @PUT
+    public Response put(@QueryParam("graph") String context, 
@HeaderParam("Content-Type") String type, @Context HttpServletRequest request) 
throws IOException {
+        if (contextService.removeContext(context)) {
+            return post(context, type, request);
+        } else {
+            return 
Response.status(Status.INTERNAL_SERVER_ERROR).entity("Context was not dropped 
before").build();
+        }
+    }
+
+    /**
+     * Store the enclosed RDF payload in the context identified by the 
requested URI.
+     *
+     * @param uuid context local id
+     * @param type Content-Type of the payload
+     * @param request request object
+     *
+     * @return response
+     * @throws IOException
+     */
     @PUT
     public Response putContext(@PathParam("uuid") String uuid, 
@HeaderParam("Content-Type") String type, @Context HttpServletRequest request) 
throws IOException {
         return put(buildUri(uuid), type, request);     

Reply via email to