You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2009/06/22 14:26:50 UTC

svn commit: r787218 - in /incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src: main/java/org/apache/chemistry/atompub/server/jaxrs/AbderaResource.java test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java

Author: fguillaume
Date: Mon Jun 22 12:26:49 2009
New Revision: 787218

URL: http://svn.apache.org/viewvc?rev=787218&view=rev
Log:
Added POST query processing to AtomPub server (abdera+jaxrs)

Modified:
    incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/jaxrs/AbderaResource.java
    incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java

Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/jaxrs/AbderaResource.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/jaxrs/AbderaResource.java?rev=787218&r1=787217&r2=787218&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/jaxrs/AbderaResource.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/jaxrs/AbderaResource.java Mon Jun 22 12:26:49 2009
@@ -20,6 +20,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -73,8 +74,10 @@
     }
 
     /**
-     * Gets a {@link ServletRequestContext} wrapping the httpRequest but
-     * pretending that this Resource's path is part of the servlet path.
+     * Gets a {@link ServletRequestContext} wrapping the httpRequest.
+     * <p>
+     * Wrapping is needed to fixup the servlet path to take include this
+     * Resource's path.
      *
      * @param segments the number of segments of the method invoking this, used
      *            to determine the Resource path
@@ -126,6 +129,12 @@
         return Response.ok(adapter.getEntry(requestContext)).build();
     }
 
+    protected Response getAbderaPostFeed(int skipSegments) {
+        RequestContext requestContext = getRequestContext(skipSegments);
+        CollectionAdapter adapter = getAbderaCollectionAdapter(requestContext);
+        return Response.ok(adapter.postEntry(requestContext)).build();
+    }
+
     @GET
     @Produces("application/atomsvc+xml")
     @Path("repository")
@@ -169,4 +178,12 @@
         return Response.ok(responseContext).type(contentType).build();
     }
 
+    @POST
+    @Consumes("application/cmisquery+xml")
+    @Produces("application/atom+xml;type=feed")
+    @Path("query")
+    public Response doPostQuery() {
+        return getAbderaPostFeed(1);
+    }
+
 }

Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java?rev=787218&r1=787217&r2=787218&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java Mon Jun 22 12:26:49 2009
@@ -24,8 +24,11 @@
 import org.apache.abdera.model.Element;
 import org.apache.abdera.model.Service;
 import org.apache.abdera.model.Workspace;
+import org.apache.abdera.protocol.EntityProvider;
 import org.apache.abdera.protocol.client.AbderaClient;
 import org.apache.abdera.protocol.client.ClientResponse;
+import org.apache.abdera.protocol.util.AbstractEntityProvider;
+import org.apache.abdera.writer.StreamWriter;
 import org.apache.chemistry.BaseType;
 import org.apache.chemistry.Connection;
 import org.apache.chemistry.ContentStream;
@@ -177,8 +180,50 @@
         assertEquals(HttpStatus.SC_OK, status);
         assertEquals("text/plain",
                 method.getResponseHeader("Content-Type").getValue());
+        assertEquals(String.valueOf(TEST_FILE_CONTENT.getBytes().length),
+                method.getResponseHeader("Content-Length").getValue());
         byte[] body = method.getResponseBody();
         assertEquals(TEST_FILE_CONTENT, new String(body, "UTF-8"));
         method.releaseConnection();
+
+        EntityProvider provider = new QueryEntityProvider("SELECT * FROM doc");
+        resp = client.post(base + "/query", provider);
+        assertEquals(200, resp.getStatus());
+        Element res = resp.getDocument().getRoot();
+        assertNotNull(res);
     }
+
+    public static class QueryEntityProvider extends AbstractEntityProvider {
+
+        public String statement;
+
+        public QueryEntityProvider(String statement) {
+            this.statement = statement;
+        }
+
+        @Override
+        public String getContentType() {
+            return "application/cmisquery+xml";
+        }
+
+        public boolean isRepeatable() {
+            return true;
+        }
+
+        public void writeTo(StreamWriter sw) {
+            sw.startDocument();
+            sw.startElement("query", CMIS.CMIS_NS, CMIS.CMIS_PREFIX);
+            sw.startElement("statement", CMIS.CMIS_NS, CMIS.CMIS_PREFIX).writeElementText(
+                    statement).endElement();
+            sw.startElement("searchAllVersions", CMIS.CMIS_NS, CMIS.CMIS_PREFIX).writeElementText(
+                    "false").endElement();
+            sw.startElement("pageSize", CMIS.CMIS_NS, CMIS.CMIS_PREFIX).writeElementText(
+                    0).endElement();
+            sw.startElement("skipCount", CMIS.CMIS_NS, CMIS.CMIS_PREFIX).writeElementText(
+                    0).endElement();
+            sw.endElement(); // query
+            sw.endDocument();
+        }
+    }
+
 }