[jboss-svn-commits] JBL Code SVN: r23528 - in labs/jbossrules/trunk/drools-atom/src: test/java/org/drools/atom and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 20 23:09:23 EDT 2008


Author: jervisliu
Date: 2008-10-20 23:09:23 -0400 (Mon, 20 Oct 2008)
New Revision: 23528

Added:
   labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/resources/expected_get_assets.txt
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/AtomRulesRepositoryServer.java
   labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java
Log:
Get assets through atomPub interface. 

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-21 00:30:54 UTC (rev 23527)
+++ labs/jbossrules/trunk/drools-atom/src/main/java/org/drools/atom/AtomRulesRepository.java	2008-10-21 03:09:23 UTC (rev 23528)
@@ -3,6 +3,7 @@
 
 
 import java.net.URI;
+import java.util.Iterator;
 
 import javax.ws.rs.ConsumeMime;
 import javax.ws.rs.DELETE;
@@ -22,6 +23,7 @@
 import org.apache.abdera.model.Content;
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
+import org.drools.repository.AssetItem;
 import org.drools.repository.PackageItem;
 import org.drools.repository.PackageIterator;
 import org.drools.repository.RulesRepository;
@@ -33,58 +35,80 @@
  * 
  * 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>
-
+ * 
+ * <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>
+ *
+ *
+ * You can navigate from packages to a specific package using the URL link returned.
  * 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"/>
-  <summary type="text">desc1</summary>
-  <updated>2008-10-17T08:12:42.046Z</updated>
-  <content type="text">archived=false</content>
-</entry>   
-
-
+ * 
+ * <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"/>
+ *   <summary type="text">desc1</summary>
+ *   <updated>2008-10-17T08:12:42.046Z</updated>
+ *   <content type="text">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
+ * 
+ * <entry xml:base="http://localhost:9080/repository/packages">
+ *   <title type="text">testPackage1</title>
+ * </entry>   
+ * 
+ * creates a package named testPackage1 in the repository
  *  
  *  
  * A HTTP PUT request to URL http://host:portnumber/repository/packages with the data:
+ * 
+ * <entry xml:base="http://localhost:9080/repository/packages">
+ *   <title type="text">testPackage1</title>
+ *   <summary type="text">desc2</summary>
+ *   <content type="text">archived=false</content>
+ * </entry>     
+ * 
+ * updates testPackage1 in the repository
 
-<entry xml:base="http://localhost:9080/repository/packages/testPackage1">
-  <title type="text">testPackage1</title>
-  <summary type="text">desc2</summary>
-  <content type="text">archived=false</content>
-</entry>     
-
  * A HTTP DELETE request to URL http://host:portnumber/repository/packages/testPackage1  
- * delete the package testPackage1
+ * deletes the package testPackage1
  * 
- * NOTE: The mapping between Atom Entry element and Drools PackageItem:
  * 
- * atom:title - PackageItem.name
- * atom:id - PackageItem.UUID
+ * A HTTP GET request to URL http://host:portnumber/repository/packages/testPackage1/assets
+ * returns a list of assets under the testPackage1 in the repository in Atom feed format. 
+ * An example looks like below:
+ * 
+ * <feed xmlns="http://www.w3.org/2005/Atom" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:base="http://localhost:9080/repository/packages/testPackage1/assets">
+ *   <title type="text">Packages</title>
+ *   
+ *   <entry xml:base="http://localhost:9080/repository/packages/testPackage1/assets">
+ *     <title type="text">testAsset1</title>
+ *     <link href="http://localhost:9080/repository/packages/packageName/asset/testAsset1" />
+ *   </entry>
+ *   
+ *   <entry xml:base="http://localhost:9080/repository/packages/testPackage1/assets">
+ *     <title type="text">testAsset2</title>
+ *     <link href="http://localhost:9080/repository/packages/packageName/asset/testAsset2" />
+ *   </entry>
+ * </feed>
+ * 
+ * NOTE: The mapping between Atom Entry element and Drools PackageItem is as below:
+ * 
+ * atom:title   - PackageItem.name
+ * atom:id      - PackageItem.UUID
  * atom:updated - PackageItem.lastModified 
  * atom:summary - PackageItem.description
  * 
@@ -133,10 +157,33 @@
     }
     
     @GET
+    @Path("/packages/{packageName}/assets")
+    @ProduceMime({"application/atom+xml" })
+    public Feed getAssetsAsFeed(@Context UriInfo uParam, @PathParam("packageName") String packageName) {
+        System.out.println("----invoking getRulesAsFeed with packageName: " + packageName);
+
+        Factory factory = Abdera.getNewFactory();
+        Feed f = factory.newFeed();
+        f.setBaseUri(uParam.getAbsolutePath().toString());
+		
+        f.setTitle("Assets");
+        
+        PackageItem packageItem = repository.loadPackage(packageName);
+        for ( Iterator iter = packageItem.getAssets(); iter.hasNext(); ) {
+            AssetItem as = (AssetItem) iter.next();
+            Entry e = createAssetItemEntry(as, uParam, packageName);
+            
+            f.addEntry(e);
+        }
+
+        return f;
+    }
+    
+    @GET
     @Path("/packages/{packageName}/")
     @ProduceMime({"application/atom+xml"})
     public Entry getPackageAsEntry(@PathParam("packageName") String packageName, @Context UriInfo uParam) throws PackageNotFoundFault {
-        System.out.println("----invoking getPackageAsEntry with name: " + packageName);
+        System.out.println("----invoking getPackageAsEntry with packageName: " + packageName);
         
         try {
             PackageItem packageItem = repository.loadPackage(packageName);
@@ -164,12 +211,11 @@
             	uParam.getBaseUriBuilder().path("repository", "packages", 
                                                 packageItem.getName()).build();
             return Response.created(uri).entity(e).build();
-        } catch (Exception ex) {
+        } catch (RulesRepositoryException ex) {
             return Response.serverError().build();
         }
-    }
+    }    
     
-    
     @PUT
     @Path("/packages")
     @ConsumeMime("application/atom+xml")
@@ -189,7 +235,7 @@
             	uParam.getBaseUriBuilder().path("repository", "packages", 
             			item.getName()).build();
             return Response.ok(uri).entity(e).build();
-        } catch (Exception ex) {
+        } catch (RulesRepositoryException ex) {
         	ex.printStackTrace();
             return Response.serverError().build();
         }
@@ -229,7 +275,23 @@
 
         return e;
     }
+    
+    private static Entry createAssetItemEntry(AssetItem asset, UriInfo baseUri, String packageName) {
+        Factory factory = Abdera.getNewFactory();
+        
+        Entry e = factory.getAbdera().newEntry();
+        if (baseUri != null) {
+            e.setBaseUri(baseUri.getAbsolutePath().toString());
+        }
+        e.setTitle(asset.getName());
+        URI uri = 
+        	baseUri.getBaseUriBuilder().path("repository", "packages", "packageName", "asset",
+        			asset.getName()).build();
+        e.addLink(uri.toString());
 
+        return e;
+    }
+    
     private static Entry createDetailedPackageItemEntry(PackageItem pkg, UriInfo baseUri) {
         Factory factory = Abdera.getNewFactory();
         

Modified: labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/AtomRulesRepositoryServer.java
===================================================================
--- labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/AtomRulesRepositoryServer.java	2008-10-21 00:30:54 UTC (rev 23527)
+++ labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/AtomRulesRepositoryServer.java	2008-10-21 03:09:23 UTC (rev 23528)
@@ -9,11 +9,13 @@
 import org.apache.cxf.jaxrs.provider.AtomEntryProvider;
 import org.apache.cxf.jaxrs.provider.AtomFeedProvider;
 import org.apache.cxf.testutil.common.AbstractTestServerBase;
+import org.drools.repository.PackageItem;
 import org.drools.repository.RepositorySessionUtil;
 import org.drools.repository.RulesRepository;
+import org.drools.repository.RulesRepositoryAdministrator;
 
 public class AtomRulesRepositoryServer extends AbstractTestServerBase{
-
+	private RulesRepository repo;
     protected void run() {
         JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
         sf.setResourceClasses(AtomRulesRepository.class);
@@ -23,8 +25,14 @@
         sf.setProviders(providers);
 
         AtomRulesRepository atomRepo = new AtomRulesRepository();
-        RulesRepository repo = RepositorySessionUtil.getRepository();
-        repo.createPackage("testPackage1", "desc1");
+        repo = RepositorySessionUtil.getRepository();
+        PackageItem pkg = repo.createPackage("testPackage1", "desc1");
+        repo.loadCategory( "/" ).addCategory( "AtomRulesRepositoryTestCat", "X" );
+        pkg.addAsset( "testAsset1", "x", "/AtomRulesRepositoryTestCat", "drl");
+        pkg.addAsset( "testAsset2", "x", "/AtomRulesRepositoryTestCat", "drl");
+
+        repo.save();
+
         atomRepo.setRulesRepository(repo);
         // default lifecycle is per-request, change it to singleton
         sf.setResourceProvider(AtomRulesRepository.class,
@@ -33,7 +41,15 @@
 
         sf.create();
 	}
+    
+    public void tearDown() throws Exception {
+        super.tearDown();
 
+		RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(
+				repo.getSession());
+		admin.clearRulesRepository();
+    }  
+    
 	public static void main(String[] args) {
         try {
         	AtomRulesRepositoryServer s = new AtomRulesRepositoryServer();

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-21 00:30:54 UTC (rev 23527)
+++ labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/ClientServerAtomRulesRepositoryTest.java	2008-10-21 03:09:23 UTC (rev 23528)
@@ -60,7 +60,27 @@
             get.releaseConnection();
         }
     }        
+    
+    @Test
+    public void testGetAssets() throws Exception {
+        String endpointAddress =
+            "http://localhost:9080/repository/packages/testPackage1/assets"; 
+        GetMethod get = new GetMethod(endpointAddress);
+        get.setRequestHeader("Content-Type", "*/*");
+        //get.setRequestHeader("Accept", type);
+        HttpClient httpClient = new HttpClient();
+        try {
+            httpClient.executeMethod(get);           
+            String response = getStringFromInputStream(get.getResponseBodyAsStream());
+            String expected = getStringFromInputStream(
+                  getClass().getResourceAsStream("resources/expected_get_assets.txt"));            
 
+            assertEquals(response, expected);
+        } finally {
+            get.releaseConnection();
+        }
+    } 
+
     @Test
     public void testGetPackagesUsingAbdera() throws Exception {        
         String endpointAddress =
@@ -232,4 +252,5 @@
 
         return e;
     }
+
 }

Added: labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/resources/expected_get_assets.txt
===================================================================
--- labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/resources/expected_get_assets.txt	                        (rev 0)
+++ labs/jbossrules/trunk/drools-atom/src/test/java/org/drools/atom/resources/expected_get_assets.txt	2008-10-21 03:09:23 UTC (rev 23528)
@@ -0,0 +1 @@
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:base="http://localhost:9080/repository/packages/testPackage1/assets"><title type="text">Assets</title><entry xml:base="http://localhost:9080/repository/packages/testPackage1/assets"><title type="text">testAsset1</title><link href="http://localhost:9080/repository/packages/packageName/asset/testAsset1" /></entry><entry xml:base="http://localhost:9080/repository/packages/testPackage1/assets"><title type="text">testAsset2</title><link href="http://localhost:9080/repository/packages/packageName/asset/testAsset2" /></entry></feed>
\ No newline at end of file




More information about the jboss-svn-commits mailing list