[jboss-svn-commits] JBL Code SVN: r23516 - 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
Mon Oct 20 03:57:53 EDT 2008


Author: jervisliu
Date: 2008-10-20 03:57:53 -0400 (Mon, 20 Oct 2008)
New Revision: 23516

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:
CRUD operations for atom/AtomRulesRepository. 

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-20 07:06:38 UTC (rev 23515)
+++ labs/jbossrules/trunk/drools-atom/src/main/java/org/drools/atom/AtomRulesRepository.java	2008-10-20 07:57:53 UTC (rev 23516)
@@ -5,8 +5,10 @@
 import java.net.URI;
 
 import javax.ws.rs.ConsumeMime;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.ProduceMime;
@@ -74,8 +76,16 @@
   <content type="text">description=desc1, archived=false</content>
 </entry>     
 
- * updates the package instance whose name is testPackage1
+ * A HTTP DELETE request to URL http://host:portnumber/repository/packages/testPackage1  
+ * delete the package testPackage1
  * 
+ * NOTE: Mapping between Atom Entry element and Drools PackageItem:
+ * 
+ * atom:title - PackageItem.name
+ * atom:id - PackageItem.UUID
+ * atom:updated - PackageItem.lastModified 
+ * atom:summary - PackageItem.description
+ * 
  * @author Jervis Lliu
  */
 
@@ -95,7 +105,7 @@
     
     @GET
     @Path("/packages")
-    @ProduceMime({"application/json", "application/atom+xml" })
+    @ProduceMime({"application/atom+xml" })
     public Feed getPackagesAsFeed(@Context UriInfo uParam) {
         System.out.println("----invoking getPackagesAsFeed");
 
@@ -122,7 +132,7 @@
     
     @GET
     @Path("/packages/{packageName}/")
-    @ProduceMime({"application/atom+xml", "application/json" })
+    @ProduceMime({"application/atom+xml"})
     public Entry getPackageAsEntry(@PathParam("packageName") String packageName, @Context UriInfo uParam) throws PackageNotFoundFault {
         System.out.println("----invoking getPackageAsEntry with name: " + packageName);
         
@@ -139,13 +149,13 @@
     @POST
     @Path("/packages")
     @ConsumeMime("application/atom+xml")
+    @ProduceMime({"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 = 
@@ -156,6 +166,51 @@
             return Response.serverError().build();
         }
     }
+    
+    
+    @PUT
+    @Path("/packages")
+    @ConsumeMime("application/atom+xml")
+    @ProduceMime({"application/atom+xml"})
+    public Response updatePackageAsEntry(Entry e, @Context UriInfo uParam) {
+        System.out.println("----invoking updatePackageAsEntry, package name is: " + e.getTitle());
+        try {      	
+        	PackageItem item = repository.loadPackage(e.getTitle());
+        	
+    		item.updateDescription(e.getSummary());
+    		//item.archiveItem(data.archived);
+    		//item.updateBinaryUpToDate(false);
+    		//this.ruleBaseCache.remove(data.uuid);
+    		item.checkin(e.getSummary());
+    		
+            URI uri = 
+            	uParam.getBaseUriBuilder().path("repository", "packages", 
+            			item.getName()).build();
+            return Response.ok(uri).entity(e).build();
+        } catch (Exception ex) {
+        	ex.printStackTrace();
+            return Response.serverError().build();
+        }
+    }    
+
+    @DELETE
+    @Path("/packages/{packageName}/")
+    public Response deletePackage(@PathParam("packageName") String packageName) {
+        System.out.println("----invoking deletePackage with packageName: " + packageName);
+        Response response;
+
+		try {
+			PackageItem item = repository.loadPackage(packageName);
+			item.remove();
+			repository.save();
+			
+			response = Response.ok().build();
+		} catch (RulesRepositoryException e) {
+			response = Response.notModified().build();
+		}
+
+        return response;
+    }
         
     private static Entry createPackageItemEntry(PackageItem pkg, UriInfo baseUri) {
         Factory factory = Abdera.getNewFactory();
@@ -182,16 +237,18 @@
         }
         e.setTitle(pkg.getName());
         e.setId(pkg.getUUID());
+        e.setSummary(pkg.getDescription());
+        
         URI uri = 
         	baseUri.getBaseUriBuilder().path("repository", "packages",  
         			pkg.getName()).build();
         e.addLink(uri.toString());
         e.setUpdated(pkg.getLastModified().getTime());
         
-        //What content to return?
+        //TODO: What content to return?
         e.setContentElement(factory.newContent());
         e.getContentElement().setContentType(Content.Type.TEXT);
-        e.getContentElement().setValue("description=" + pkg.getDescription() + ", archived=" +  pkg.isArchived());
+        e.getContentElement().setValue("archived=" +  pkg.isArchived());
         
         return e;
     }

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-20 07:06:38 UTC (rev 23515)
+++ labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java	2008-10-20 07:57:53 UTC (rev 23516)
@@ -1,9 +1,12 @@
 
 package org.drools.atom;
 
+import java.io.File;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
 import java.util.List;
 
 import javax.ws.rs.core.UriInfo;
@@ -14,8 +17,12 @@
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
 import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.FileRequestEntity;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.methods.RequestEntity;
 import org.apache.commons.httpclient.methods.StringRequestEntity;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.io.CachedOutputStream;
@@ -91,17 +98,18 @@
             String response = getStringFromInputStream(get.getResponseBodyAsStream());
             //System.out.print(response);
             assertTrue(response.indexOf("testPackage1") > 0);
-            assertTrue(response.indexOf("description=desc1, archived=false") > 0);
+            assertTrue(response.indexOf("desc1") > 0);
+            assertTrue(response.indexOf("archived=false") > 0);
         } finally {
             get.releaseConnection();
         }
     }  
     
     @Test
-    public void testAddPackage() throws Exception {
+    public void testAddAndDeletePackage() throws Exception {
+    	//Create a new package called testPackage2
         String endpointAddress =
-            "http://localhost:9080/repository/packages"; 
-        
+            "http://localhost:9080/repository/packages";         
         Entry e = createPackageItemEntry("testPackage2");
         StringWriter w = new StringWriter();
         e.writeTo(w);
@@ -121,8 +129,93 @@
         } finally {
             post.releaseConnection();
         } 
+        
+        //Verify the testPackage2 has been created:
+        String endpointAddress2 =
+            "http://localhost:9080/repository/packages/testPackage2"; 
+        GetMethod get2 = new GetMethod(endpointAddress2);
+        get2.setRequestHeader("Content-Type", "*/*");
+        HttpClient httpClient2 = new HttpClient();
+        try {
+            httpClient2.executeMethod(get2);           
+            String response = getStringFromInputStream(get2.getResponseBodyAsStream());
+            //System.out.print(response);
+            assertTrue(response.indexOf("testPackage2") > 0);
+        } finally {
+            get2.releaseConnection();
+        }
+        
+        //Delete the testPackage2
+        DeleteMethod delete = new DeleteMethod(endpointAddress2);
+        delete.setRequestHeader("Content-Type", "*/*");
+        HttpClient httpClient3 = new HttpClient();
+        try {
+            httpClient3.executeMethod(delete);           
+        } finally {
+        	delete.releaseConnection();
+        }
+        
+        //Verify the testPackage2 has been deleted:
+        GetMethod get4 = new GetMethod(endpointAddress2);
+        get4.setRequestHeader("Content-Type", "*/*");
+        HttpClient httpClient4 = new HttpClient();
+        try {
+            httpClient4.executeMethod(get4);           
+            String response = getStringFromInputStream(get4.getResponseBodyAsStream());
+            //System.out.print(response);
+            assertTrue(response.indexOf("org.drools.atom.PackageNotFoundFault") > 0);
+        } finally {
+            get4.releaseConnection();
+        }
     }  
     
+    @Test
+    public void testUpdatePakcage() throws Exception {
+    	//Update the testPackage1, set its description text from "desc1" to "desc2"
+        String endpointAddress = "http://localhost:9080/repository/packages";
+        File input = new File(getClass().getResource("resources/update_testPackage1.txt").toURI());
+        PutMethod put = new PutMethod(endpointAddress);
+        RequestEntity entity = new FileRequestEntity(input, "application/atom+xml; charset=ISO-8859-1");
+        put.setRequestEntity(entity);
+        HttpClient httpclient = new HttpClient();
+
+        try {
+            int result = httpclient.executeMethod(put);
+            assertEquals(200, result);
+        } finally {
+            // Release current connection to the connection pool once you are
+            // done
+            put.releaseConnection();
+        }
+
+        // Verify result
+        String endpointAddress1 = "http://localhost:9080/repository/packages/testPackage1";
+        URL url = new URL(endpointAddress1);
+        URLConnection connect = url.openConnection();
+        connect.addRequestProperty("Accept", "application/atom+xml");
+        InputStream in = connect.getInputStream();
+        assertNotNull(in);
+        String response = getStringFromInputStream(in);
+        assertTrue(response.indexOf("esc2") > 0);
+
+         // Roll back changes:
+        File input1 = new File(getClass().getResource("resources/expected_get_testPackage1.txt").toURI());
+        PutMethod put1 = new PutMethod(endpointAddress);
+        RequestEntity entity1 = new FileRequestEntity(input1, "application/atom+xml; charset=ISO-8859-1");
+        put1.setRequestEntity(entity1);
+        HttpClient httpclient1 = new HttpClient();
+
+        try {
+            int result = httpclient1.executeMethod(put1);
+            assertEquals(200, result);
+        } finally {
+            // Release current connection to the connection pool once you are
+            // done
+            put1.releaseConnection();
+        }
+    }  
+
+    
     private String getStringFromInputStream(InputStream in) throws Exception {        
         CachedOutputStream bos = new CachedOutputStream();
         IOUtils.copy(in, bos);




More information about the jboss-svn-commits mailing list