[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