[jboss-svn-commits] JBL Code SVN: r20836 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository/remoteapi and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jun 29 22:36:55 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-06-29 22:36:55 -0400 (Sun, 29 Jun 2008)
New Revision: 20836

Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java
Log:
JBRULES-1661 URL to get/list versions

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java	2008-06-28 09:55:40 UTC (rev 20835)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetHistoryIterator.java	2008-06-30 02:36:55 UTC (rev 20836)
@@ -10,13 +10,13 @@
 /**
  * A lazy iterator for walking back through history.
  * Wraps the version iterator from JCR and allows skipping.
- * 
+ *
  * @author Michael Neale
  *
  */
 public class AssetHistoryIterator
     implements
-    Iterator {
+    Iterator<AssetItem> {
 
     private Node head;
     private VersionIterator versionIterator;
@@ -24,37 +24,37 @@
 
     public AssetHistoryIterator(RulesRepository repo, Node head) {
         this.head = head;
-        this.repo = repo;      
+        this.repo = repo;
         try {
             this.versionIterator =  this.head.getVersionHistory().getAllVersions();
         } catch ( RepositoryException e ) {
             throw new RulesRepositoryException( e );
         }
     }
-    
-    public boolean hasNext() {        
+
+    public boolean hasNext() {
         return versionIterator.hasNext();
     }
 
-    public Object next() {
+    public AssetItem next() {
         return new AssetItem(this.repo, (Version) versionIterator.next());
-        
+
     }
 
     /**
      * You can't do this with this sort of iterator.
      * It makes no sense to remove a history item.
-     * Removing history is a administrative function only (and in 
+     * Removing history is a administrative function only (and in
      * any case, it may have to be archived for legal reasons).
-     * 
+     *
      * @throws UnsupportedOperationException when called.
      */
     public void remove() {
        throw new UnsupportedOperationException();
     }
-    
+
     /**
-     * Skip the specified number of items. As this is a lazy iterator this 
+     * Skip the specified number of items. As this is a lazy iterator this
      * means less work in pulling it from the database etc.
      */
     public void skip(int i) {

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2008-06-28 09:55:40 UTC (rev 20835)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/VersionableItem.java	2008-06-30 02:36:55 UTC (rev 20836)
@@ -353,8 +353,13 @@
      */
     public Calendar getLastModified() throws RulesRepositoryException {
         try {
-            Property lastModifiedProperty = getVersionContentNode().getProperty( LAST_MODIFIED_PROPERTY_NAME );
-            return lastModifiedProperty.getDate();
+        	Node n = getVersionContentNode();
+        	if (n.hasProperty(LAST_MODIFIED_PROPERTY_NAME)) {
+	            Property lastModifiedProperty = getVersionContentNode().getProperty( LAST_MODIFIED_PROPERTY_NAME );
+	            return lastModifiedProperty.getDate();
+        	} else {
+        		return null;
+        	}
         } catch ( Exception e ) {
             log.error( "Caught Exception",
                        e );

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java	2008-06-28 09:55:40 UTC (rev 20835)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java	2008-06-30 02:36:55 UTC (rev 20836)
@@ -12,6 +12,7 @@
 import java.util.Properties;
 import java.util.Set;
 
+import org.drools.repository.AssetHistoryIterator;
 import org.drools.repository.AssetItem;
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
@@ -19,6 +20,8 @@
 import org.drools.repository.remoteapi.Response.Binary;
 import org.drools.repository.remoteapi.Response.Text;
 
+import com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt.GetOpt;
+
 /**
  * This provides a simple REST style remote friendly API.
  *
@@ -88,25 +91,79 @@
 			r.data = pkg.getStringProperty( PackageItem.HEADER_PROPERTY_NAME );
 			return r;
 		} else {
-			String assetName = resourceFile.split("\\.")[0];
+			if (resourceFile.indexOf("?version=") > -1) {
+				String[] v = resourceFile.split("\\?version\\=");
+				String version = v[1];
+				String assetName = AssetItem.getAssetNameFromFileName(v[0])[0];
+				AssetItem asset = pkg.loadAsset(assetName);
+				if (version.equals("all")) {
+					AssetHistoryIterator it =  asset.getHistory();
+					StringBuilder buf = new StringBuilder();
+					while(it.hasNext()) {
+						AssetItem h = it.next();
+						String checkinComment = h.getCheckinComment();
+						//String lastMo ... hmm what is needed?
+						String lastMofiedBy = h.getLastContributor();
+						if (lastMofiedBy == null || lastMofiedBy.equals("")) {
+							lastMofiedBy = asset.getCreator();
+						}
+						SimpleDateFormat sdf = getISODateFormat();
+						Calendar lastModDate = h.getLastModified();
+						if (lastModDate == null ) {
+							lastModDate = asset.getCreatedDate();
+						}
+						String lastModifiedOn = sdf.format(lastModDate.getTime());
+						buf.append(h.getVersionNumber());
+						buf.append("=");
+						buf.append(lastModifiedOn + "," + lastMofiedBy + "," + checkinComment);
+						if (it.hasNext()) {
+							buf.append('\n');
+						}
 
-			AssetItem asset = pkg.loadAsset(assetName);
-			if (asset.isBinary()) {
-				Binary r = new Response.Binary();
-				r.lastModified = asset.getLastModified();
-				r.stream = asset.getBinaryContentAttachment();
-				return r;
+					}
+					Text r = new Text();
+					r.lastModified = asset.getLastModified();
+					r.data = buf.toString();
+					return r;
+				} else {
+					long versionNumber = Long.parseLong(version);
+					AssetHistoryIterator it =  asset.getHistory();
+					while (it.hasNext()) {
+						AssetItem h = it.next();
+						if (h.getVersionNumber() == versionNumber) {
+							return buildAssetContentResponse(pkg, h);
+						}
+					}
+					//hmm... we didn't find it
+					Text r = new Text();
+					r.lastModified = asset.getLastModified();
+					r.data = "Unknown version number : " + versionNumber;
+					return r;
+				}
 			} else {
-				Text r = new Response.Text();
-				r.lastModified = pkg.getLastModified();
-				r.data = asset.getContent();
-				return r;
+	 			String assetName = AssetItem.getAssetNameFromFileName(resourceFile)[0];
+				AssetItem asset = pkg.loadAsset(assetName);
+				return buildAssetContentResponse(pkg, asset);
 			}
 
 		}
 
 	}
 
+	private Response buildAssetContentResponse(PackageItem pkg, AssetItem asset) {
+		if (asset.isBinary()) {
+			Binary r = new Response.Binary();
+			r.lastModified = asset.getLastModified();
+			r.stream = asset.getBinaryContentAttachment();
+			return r;
+		} else {
+			Text r = new Response.Text();
+			r.lastModified = pkg.getLastModified();
+			r.data = asset.getContent();
+			return r;
+		}
+	}
+
 	private Response listPackage(String pkgName) throws UnsupportedEncodingException {
 		PackageItem pkg = repo.loadPackage(URLDecoder.decode(pkgName, "UTF-8"));
 		StringBuilder sb = new StringBuilder();
@@ -125,6 +182,9 @@
 		return r;
 	}
 
+	/**
+	 * This is the format used to sent dates as text, always.
+	 */
 	public static SimpleDateFormat getISODateFormat() {
 		return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
 	}

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java	2008-06-28 09:55:40 UTC (rev 20835)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java	2008-06-30 02:36:55 UTC (rev 20836)
@@ -126,6 +126,54 @@
 
 	}
 
+	public void testGetVersionHistory() throws Exception {
+		RulesRepository repo = RepositorySessionUtil.getRepository();
+		PackageItem pkg = repo.createPackage("testRestGetVersionHistory", "");
+		repo.save();
+
+
+		AssetItem asset1 = pkg.addAsset("asset1", "");
+		asset1.updateContent("this is content");
+		asset1.updateFormat("drl");
+		asset1.checkin("This is something");
+
+		assertEquals(1, asset1.getVersionNumber());
+
+		RestAPI api = new RestAPI(repo);
+		Response res = api.get("packages/testRestGetVersionHistory/asset1.drl?version=all");
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+		res.writeData(out);
+		String d = new String(out.toByteArray());
+		//System.err.println(d);
+		assertTrue(d.indexOf(",alan_parsons,This is something") > 0);
+
+
+		asset1.updateContent("new content");
+		asset1.checkin("This is another");
+
+		res = api.get("packages/testRestGetVersionHistory/asset1.drl?version=all");
+		out = new ByteArrayOutputStream();
+
+		res.writeData(out);
+		d = new String(out.toByteArray());
+		System.err.println(d);
+		assertTrue(d.indexOf(",alan_parsons,This is something") > 0);
+		assertTrue(d.indexOf(",alan_parsons,This is another") > 0);
+
+		res = api.get("packages/testRestGetVersionHistory/asset1.drl?version=1");
+		out = new ByteArrayOutputStream();
+
+		res.writeData(out);
+		d = new String(out.toByteArray());
+		assertEquals("this is content", d);
+
+
+
+
+
+	}
+
 	public void testPost() throws Exception {
 		RulesRepository repo = RepositorySessionUtil.getRepository();
 		PackageItem pkg = repo.createPackage("testRestPost", "");




More information about the jboss-svn-commits mailing list