[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