[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