[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