[jboss-svn-commits] JBL Code SVN: r23488 - in labs/jbossrules/trunk/drools-atom/src: test/java/org/drools/atom and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 17 04:21:09 EDT 2008
Author: jervisliu
Date: 2008-10-17 04:21:09 -0400 (Fri, 17 Oct 2008)
New Revision: 23488
Modified:
labs/jbossrules/trunk/drools-atom/src/main/java/org/drools/atom/AtomRulesRepository.java
labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java
Log:
create package through atomPub.
Modified: labs/jbossrules/trunk/drools-atom/src/main/java/org/drools/atom/AtomRulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-atom/src/main/java/org/drools/atom/AtomRulesRepository.java 2008-10-17 07:40:29 UTC (rev 23487)
+++ labs/jbossrules/trunk/drools-atom/src/main/java/org/drools/atom/AtomRulesRepository.java 2008-10-17 08:21:09 UTC (rev 23488)
@@ -26,6 +26,59 @@
import org.drools.repository.RulesRepositoryException;
+/**
+ * AtomRulesRepository provides AtomPub interface on top of RulesRepository.
+ *
+ * A HTTP GET request to URL http://host:portnumber/repository/packages
+ * returns a list of packages in the repository in Atom feed format. An example looks like below:
+
+<feed xml:base="http://localhost:9080/repository/packages">
+ <title type="text">Packages</title>
+
+ <entry xml:base="http://localhost:9080/repository/packages">
+ <title type="text">defaultPackage</title>
+ <link href="http://localhost:9080/repository/packages/defaultPackage"/>
+ </entry>
+
+ <entry xml:base="http://localhost:9080/repository/packages">
+ <title type="text">testPackage1</title>
+ <link href="http://localhost:9080/repository/packages/testPackage1"/>
+ </entry>
+</feed>
+
+ * A HTTP GET request to URL http://host:portnumber/repository/packages/testPackage1
+ * returns testPackag1 in the repository in Atom entry format. An example looks like below:
+
+<entry xml:base="http://localhost:9080/repository/packages/testPackage1">
+ <title type="text">testPackage1</title>
+ <id>5632cf6c-0ef5-4ccc-b7e5-293285c4ce19</id>
+ <link href="http://localhost:9080/repository/packages/testPackage1"/>
+ <updated>2008-10-17T08:12:42.046Z</updated>
+ <content type="text">description=desc1, archived=false</content>
+</entry>
+
+
+ * A HTTP POST request to URL http://host:portnumber/repository/packages with the data:
+
+<entry xml:base="http://localhost:9080/repository/packages/testPackage1">
+ <title type="text">testPackage1</title>
+</entry>
+
+ * adds a package named testPackage1
+ *
+ *
+ * A HTTP PUT request to URL http://host:portnumber/repository/packages with the data:
+
+<entry xml:base="http://localhost:9080/repository/packages/testPackage1">
+ <title type="text">testPackage1</title>
+ <content type="text">description=desc1, archived=false</content>
+</entry>
+
+ * updates the package instance whose name is testPackage1
+ *
+ * @author Jervis Lliu
+ */
+
@Path("/repository/")
public class AtomRulesRepository {
public RulesRepository repository;
@@ -84,12 +137,15 @@
}
@POST
- @Path("/packages/feed")
+ @Path("/packages")
@ConsumeMime("application/atom+xml")
public Response addPackageAsEntry(Entry e, @Context UriInfo uParam) {
+ System.out.println("----invoking addPackageAsEntry with package name: " + e.getTitle());
+
try {
String packageName = e.getTitle();
-
+
+ //TODO: Which atom field to use for description?
PackageItem packageItem = repository.createPackage(packageName, "desc");
URI uri =
Modified: labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java 2008-10-17 07:40:29 UTC (rev 23487)
+++ labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java 2008-10-17 08:21:09 UTC (rev 23488)
@@ -2,17 +2,25 @@
package org.drools.atom;
import java.io.InputStream;
+import java.io.StringWriter;
+import java.net.URI;
import java.util.List;
+import javax.ws.rs.core.UriInfo;
+
import org.apache.abdera.Abdera;
+import org.apache.abdera.factory.Factory;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.testutil.common.AbstractClientServerTestBase;
+import org.drools.repository.PackageItem;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -89,6 +97,32 @@
}
}
+ @Test
+ public void testAddPackage() throws Exception {
+ String endpointAddress =
+ "http://localhost:9080/repository/packages";
+
+ Entry e = createPackageItemEntry("testPackage2");
+ StringWriter w = new StringWriter();
+ e.writeTo(w);
+
+ PostMethod post = new PostMethod(endpointAddress);
+ post.setRequestEntity(
+ new StringRequestEntity(w.toString(), "application/atom+xml", null));
+ HttpClient httpclient = new HttpClient();
+
+ String location = null;
+ try {
+ int result = httpclient.executeMethod(post);
+ assertEquals(201, result);
+ location = post.getResponseHeader("Location").getValue();
+ Document<Entry> entryDoc = abdera.getParser().parse(post.getResponseBodyAsStream());
+ assertEquals(entryDoc.getRoot().toString(), e.toString());
+ } finally {
+ post.releaseConnection();
+ }
+ }
+
private String getStringFromInputStream(InputStream in) throws Exception {
CachedOutputStream bos = new CachedOutputStream();
IOUtils.copy(in, bos);
@@ -96,4 +130,13 @@
bos.close();
return bos.getOut().toString();
}
+
+ private Entry createPackageItemEntry(String packageName) {
+ Factory factory = Abdera.getNewFactory();
+ Entry e = factory.getAbdera().newEntry();
+
+ e.setTitle(packageName);
+
+ return e;
+ }
}
More information about the jboss-svn-commits
mailing list