[jboss-svn-commits] JBL Code SVN: r9003 - in labs/jbossrules/trunk/drools-jbrms: src/main/java/org/drools/brms/client/common and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 24 04:51:01 EST 2007


Author: michael.neale at jboss.com
Date: 2007-01-24 04:51:01 -0500 (Wed, 24 Jan 2007)
New Revision: 9003

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionBrowser.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/asset_version.png
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRXMLToDRLConverter.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/.classpath
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-560 Version Browser

Modified: labs/jbossrules/trunk/drools-jbrms/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/.classpath	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/.classpath	2007-01-24 09:51:01 UTC (rev 9003)
@@ -1,23 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/geronimo-spec/geronimo-spec-jta/1.0-M1/geronimo-spec-jta-1.0-M1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/tmatesoft/javasvn/1.1-beta5/javasvn-1.1-beta5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.0/slf4j-log4j12-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/drools/drools-repository/3.1.0-SNAPSHOT/drools-repository-3.1.0-SNAPSHOT.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/drools/drools-repository/3.1.0-SNAPSHOT/drools-repository-3.1.0-SNAPSHOT-tests.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.8/log4j-1.2.8.jar"/>
-  <classpathentry kind="var" path="M2_REPO/google/gwt-servlet/1.2.11/gwt-servlet-1.2.11.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jsr170/jcr/1.0/jcr-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/lucene/lucene/1.4.3/lucene-1.4.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.1/jackrabbit-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.1.3.1/derby-10.1.3.1.jar"/>
-</classpath>
\ No newline at end of file
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/geronimo-spec/geronimo-spec-jta/1.0-M1/geronimo-spec-jta-1.0-M1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/tmatesoft/javasvn/1.1-beta5/javasvn-1.1-beta5.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.0/slf4j-log4j12-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.8/log4j-1.2.8.jar"/>
+	<classpathentry kind="var" path="M2_REPO/google/gwt-servlet/1.2.11/gwt-servlet-1.2.11.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jsr170/jcr/1.0/jcr-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/lucene/lucene/1.4.3/lucene-1.4.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.1/jackrabbit-core-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.1.3.1/derby-10.1.3.1.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-repository"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -50,6 +50,13 @@
         
     }
     
+    /** Adds a widget that takes up a whole row. */
+    public void addRow(Widget w) {
+        layout.setWidget( numInLayout, 0, w);
+        formatter.setColSpan( numInLayout, 0, 2 );
+        numInLayout++;
+    }
+    
     /**
      * Adds a header at the top.
      */

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -0,0 +1,19 @@
+package org.drools.brms.client.common;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/**
+ * This is a generic call back that handles errors (very simply).
+ * 
+ * @author Michael Neale
+ */
+public abstract class GenericCallback
+    implements
+    AsyncCallback {
+
+    public void onFailure(Throwable t) {
+        ErrorPopup.showMessage( t.getMessage() );
+    }
+
+    public abstract void onSuccess(Object data);
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -21,7 +21,7 @@
     public Date lastModifiedDate;
     public String lastContributor = "";
     public String versionNumber;
-    public String   lastCheckinComment = "";
+
     public Date createdDate;
     
     public String packageName = "";

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -52,10 +52,23 @@
     
     
     /**
+     * This will load the history of the given asset, in a summary format suitable
+     * for display in a table.
+     */
+    public TableDataResult loadAssetHistory(String uuid) throws SerializableException;
+    
+    /**
      * This checks in a new version of an asset. 
      * @return the UUID of the asset you are checking in, 
      * null if there was some problem (and an exception was not thrown).
      */
     public String checkinVersion(RuleAsset asset) throws SerializableException;
     
+    
+    /**
+     * This will restore the specified version in the repository, saving, and creating
+     * a new version (with all the restored content).
+     */
+    public void restoreVersion(String versionUUID, String assetUUID, String comment);
+    
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -23,6 +23,8 @@
     public void createNewRule(java.lang.String p0, java.lang.String p1, java.lang.String p2, java.lang.String p3, java.lang.String p4, AsyncCallback cb);
     public void listRulePackages(AsyncCallback cb);
     public void loadRuleAsset(java.lang.String p0, AsyncCallback cb);
+    public void loadAssetHistory(java.lang.String p0, AsyncCallback cb);
     public void checkinVersion(org.drools.brms.client.rpc.RuleAsset p0, AsyncCallback cb);
+    public void restoreVersion(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
     
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -4,13 +4,12 @@
 
 /**
  * This contains the results returned to populate a table/grid.
+ * This will be enhanced to provide pagination data shortly.
  * @author Michael Neale
  */
 public class TableDataResult
     implements
     IsSerializable {
-
-    public int numberOfRows;
     
     public TableDataRow[] data;
     

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -71,7 +71,6 @@
                                           AsyncCallback callback)  {
         log("loading rule list", "for cat path: " + categoryPath);
         TableDataResult result = new TableDataResult();
-        result.numberOfRows = 42;
         
         result.data = new TableDataRow[42];
         
@@ -330,6 +329,23 @@
         
         
     }
+
+
+
+    public void loadAssetHistory(String p0,
+                                 AsyncCallback cb) {
+        cb.onSuccess( null );
+    }
+
+
+
+    public void restoreVersion(String p0,
+                               String p1,
+                               String p2,
+                               AsyncCallback cb) {
+        cb.onSuccess( null );
+        
+    }
     
     
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -32,15 +32,12 @@
     
     private MetaData      metaData;
     private Command checkin;
-    /**
-     * TODO: 
-     *  * need to somehow refresh on checkin? (or just close?)
-     * 
-     */
+
+    
     public ActionToolbar(final MetaData meta, 
-                         final Command checkin,
-                         final ClickListener changeState, 
-                         final Command minimiseMaximise) {
+                         final Command checkin, 
+                         final Command minimiseMaximise, 
+                         boolean readOnly) {
 
         this.metaData = meta;
         this.checkin = checkin;
@@ -50,6 +47,21 @@
         HorizontalPanel saveControls = new HorizontalPanel();
         HTML state = new HTML("<b>Status: <i>[" + status + "]</i></b>");
         saveControls.add( state );
+        
+        if (!readOnly) {
+        controls( minimiseMaximise,
+                  formatter,
+                  saveControls );
+
+        }
+        
+        initWidget( layout );
+        setWidth( "100%" );
+    }
+
+    private void controls(final Command minimiseMaximise,
+                          FlexCellFormatter formatter,
+                          HorizontalPanel saveControls) {
         Image editState = new Image("images/edit.gif");
         editState.setTitle( "Change state (NOT IMPLEMENTED YET)." );
         saveControls.add( editState );
@@ -100,48 +112,55 @@
         
         layout.setWidget( 0, 1, windowControls );
         formatter.setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_MIDDLE );
-
-        
-        
-        initWidget( layout );
-        setWidth( "100%" );
     }
     
     /**
      * Called when user wants to checkin.
      */
     protected void doCheckinConfirm() {
-        final FormStylePopup pop = new FormStylePopup("images/checkin.gif", "Check in changes.");
-        final TextArea comment = new TextArea();
-        comment.setWidth( "100%" );
-        Button save = new Button("Save");
-        pop.addAttribute( "Comment", comment );
-        pop.addAttribute( "", save);
         
-        bindCommentField( comment );
-        
-        
-        save.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
+        final CheckinPopup pop = new CheckinPopup(200, getAbsoluteTop(), "Check in changes.");
+        pop.setCommand( new Command() {
+
+            public void execute() {
+                metaData.checkinComment = pop.getCheckinComment();
+                checkin.execute();
                 
-                checkin.execute();
-                pop.hide();
             }
+
         });
+        pop.show();
+//        final FormStylePopup pop = new FormStylePopup("images/checkin.gif", "Check in changes.");
+//        final TextArea comment = new TextArea();
+//        comment.setWidth( "100%" );
+//        Button save = new Button("Save");
+//        pop.addAttribute( "Comment", comment );
+//        pop.addAttribute( "", save);
+//        
+//        bindCommentField( comment );
+//        
+//        
+//        save.addClickListener( new ClickListener() {
+//            public void onClick(Widget w) {
+//                
+//                checkin.execute();
+//                pop.hide();
+//            }
+//        });
+//        
+//        pop.setStyleName( "ks-popups-Popup" );
+//        pop.setPopupPosition( 200, getAbsoluteTop() );
+//        pop.show();        
         
-        pop.setStyleName( "ks-popups-Popup" );
-        pop.setPopupPosition( 200, getAbsoluteTop() );
-        pop.show();        
-        
     }
 
-    private void bindCommentField(final TextArea comment) {
-        comment.addChangeListener( new ChangeListener() {
-            public void onChange(Widget w) {
-                metaData.checkinComment = comment.getText();
-            }
-        });
-    }
+//    private void bindCommentField(final TextArea comment) {
+//        comment.addChangeListener( new ChangeListener() {
+//            public void onChange(Widget w) {
+//                metaData.checkinComment = comment.getText();
+//            }
+//        });
+//    }
 
     /**
      * Called when user wants to close, but there is "dirtyness".

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -39,7 +39,8 @@
 
         box = new ListBox();
         
-        box.setVisibleItemCount( 4 );
+        
+        box.setVisibleItemCount( 3 );
         box.setWidth( "100%" );
         box.setMultipleSelect( false );
         loadData( box );        
@@ -136,6 +137,13 @@
     public void addToCategory(String selectedPath) {
 
         
+        //ignore already selected ones.
+        for ( int i = 0; i < data.categories.length; i++ ) {
+            if (data.categories[i].equals( selectedPath )) {
+                return;
+            }
+        }
+        
         String[] newList = new String[data.categories.length + 1];
         for ( int i = 0; i < data.categories.length; i++ ) {
                 newList[i] = data.categories[i];

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -1,5 +1,8 @@
 package org.drools.brms.client.ruleeditor;
 
+import org.drools.brms.client.common.FormStylePopup;
+
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlexTable;
@@ -18,41 +21,43 @@
  * @author Michael Neale
  *
  */
-public class CheckinPopup extends PopupPanel {
+public class CheckinPopup {
 
-    final private FlexTable layout = new FlexTable();
-    final private TextArea comment = new TextArea();
-    final private ClickListener okClick;    
     
-    public CheckinPopup(ClickListener click) {
-        super(true);        
-        this.okClick = click;
-        
-        this.setStyleName( "ks-popups-Popup" );
-        
-        FlexCellFormatter formatter = layout.getFlexCellFormatter();
-        
-        layout.setWidget( 0, 0, new Image() );
-        layout.setWidget( 1, 0, new Label("Comment:") );
-        formatter.setHorizontalAlignment( 1, 0, HasHorizontalAlignment.ALIGN_RIGHT );
-        
-        layout.setWidget( 1, 1, comment );
-        formatter.setHorizontalAlignment( 1, 1, HasHorizontalAlignment.ALIGN_LEFT );
+    private TextArea comment;
+    private Button save;
+    private FormStylePopup pop;
+
+    
+    public CheckinPopup(int left, int top, String message) {
+        pop = new FormStylePopup("images/checkin.gif", message);
+        comment = new TextArea();
         comment.setWidth( "100%" );
-        comment.setHeight( "100%" );
-        comment.setStyleName( "rule-viewer-Documentation" );        
+        save = new Button("Save");
+        pop.addAttribute( "Comment", comment );
+        pop.addAttribute( "", save);
+                
         
-        Button ok = new Button();
-        ok.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                okClick.onClick( w );
-            }            
+        pop.setStyleName( "ks-popups-Popup" );
+        pop.setPopupPosition( left, top );
+    
+    }
+    
+    public void setCommand(final Command checkin) {
+        save.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {                
+                checkin.execute();
+                pop.hide();
+            }
         });
-        
-        layout.setWidget( 2, 0,  ok);
-        formatter.setHorizontalAlignment( 2, 0, HasHorizontalAlignment.ALIGN_LEFT );
-        
-        add( layout );
     }
+
+    public void show() {
+        pop.show();
+    }
     
+    public String getCheckinComment() {
+        return comment.getText();
+    }
+    
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -5,6 +5,7 @@
 import org.drools.brms.client.common.FormStyleLayout;
 import org.drools.brms.client.rpc.MetaData;
 
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Label;
@@ -21,11 +22,20 @@
 
     private MetaData data;
     private boolean readOnly;
+    private String uuid;
+    private Command refreshView;
 	
-	public MetaDataWidget(MetaData d, boolean readOnly) {
-        super("images/meta_data.gif", d.name);
+	public MetaDataWidget(MetaData d, boolean readOnly, String uuid, Command refreshView) {
+        
+        if (!readOnly) {
+            addHeader( "images/meta_data.gif", d.name );
+        } else {
+            addHeader( "images/asset_version.png", d.name );
+        }
+        this.uuid = uuid;
         this.data = d;
         this.readOnly = readOnly;
+        this.refreshView = refreshView;
         loadData(d);
 	}
 
@@ -33,7 +43,21 @@
     private void loadData(MetaData d) {
         this.data = d;
         addAttribute("Categories:", categories());
+           
         
+        addAttribute("Last modified on:", readOnlyDate(data.lastModifiedDate));
+        addAttribute("Last modified by:", readOnlyText(data.lastContributor));
+        addAttribute("Checkin note:", readOnlyText( data.checkinComment ));
+        addAttribute("Created by:", readOnlyText(data.creator));
+        addAttribute("Version number:", getVersionNumberLabel());
+        addAttribute("Package:", readOnlyText(data.packageName));
+        if (!readOnly) {
+            addAttribute("Created on:", readOnlyDate( data.createdDate ));
+        }
+
+        
+        addRow(new HTML("<hr/>"));
+        
         addAttribute("Subject:", editableText(new FieldBinding() {
             public String getValue() {
                 return data.subject;
@@ -42,17 +66,8 @@
             public void setValue(String val) {
                 data.subject = val;                
             }            
-        }, "A short description of the subject matter."));            
+        }, "A short description of the subject matter."));         
         
-        addAttribute("Last modified on:", readOnlyDate(data.lastModifiedDate));
-        addAttribute("Last modified by:", readOnlyText(data.lastContributor));
-        addAttribute("Checkin note:", readOnlyText( data.lastCheckinComment ));
-        addAttribute("Created by:", readOnlyText(data.creator));
-        addAttribute("Created on:", readOnlyDate( data.createdDate ));
-        addAttribute("Version number:", getVersionNumberLabel());
-        addAttribute("Package:", readOnlyText(data.packageName));
-        
-            
         addAttribute("Type:", editableText(new FieldBinding() {
             public String getValue() {
                 return data.type;
@@ -85,6 +100,10 @@
             }
             
         }, "A short description or code indicating the source of the rule."));
+        
+        if (!readOnly) {
+            addRow( new VersionBrowser(this.uuid, this.data, refreshView) );
+        }
     }
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -26,14 +26,21 @@
     protected RuleAsset       asset;
 
     private final FlexTable layout;
+    private boolean readOnly;
 
+    public RuleViewer(RuleAsset asset) {
+        this(asset, false);
+    }
+    
     /**
      * @param UUID The resource to open.
      * @param format The type of resource (may determine what editor is used).
      * @param name The name to be displayed.
+     * @param historicalReadOnly true if this is a read only view for historical purposes.
      */
-    public RuleViewer(RuleAsset asset) {
+    public RuleViewer(RuleAsset asset, boolean historicalReadOnly) {
         this.asset = asset;
+        this.readOnly = historicalReadOnly;
         layout = new FlexTable();
         
         doWidgets();
@@ -52,10 +59,16 @@
         this.layout.clear();
         
         final MetaDataWidget metaWidget = new MetaDataWidget( this.asset.metaData,
-                                                              false );
+                                                              readOnly, this.asset.uuid, new Command() {
 
+                                                                public void execute() {
+                                                                    refreshDataAndView();
+                                                                }
+            
+        });
 
 
+
         //now the main layout table
         FlexCellFormatter formatter = layout.getFlexCellFormatter();
         layout.setWidget( 0,
@@ -75,13 +88,13 @@
                                                        public void execute() {
                                                            doCheckin();
                                                        }
-                                                   },                                                   
-                                                   null,
+                                                   },
                                                    new Command() {
                                                        public void execute() {
                                                            toggleMetaDataWidget();
                                                        }
-                                                   });
+                                                   },
+                                                   readOnly);
         toolbar.setCloseCommand( new Command() {
             public void execute() {
                 closeCommand.execute();
@@ -130,22 +143,32 @@
                     return;
                 }
                 
-                RepositoryServiceFactory.getService().loadRuleAsset( uuid, new AsyncCallback() {
-                    public void onFailure(Throwable t) {
-                        ErrorPopup.showMessage( t.getMessage() );
-                    }
-                    public void onSuccess(Object a) {
-                        asset = (RuleAsset) a;
-                        doWidgets();
-                        LoadingPopup.close();
-                    }
-                });
+                refreshDataAndView( );
                 
             }
+
+
             
         });
     }
 
+
+    /**
+     * This will reload the contents from the database, and refresh the widgets.
+     */
+    public void refreshDataAndView() {
+        
+        RepositoryServiceFactory.getService().loadRuleAsset( asset.uuid, new AsyncCallback() {
+            public void onFailure(Throwable t) {
+                ErrorPopup.showMessage( t.getMessage() );
+            }
+            public void onSuccess(Object a) {
+                asset = (RuleAsset) a;
+                doWidgets();
+                LoadingPopup.close();
+            }
+        });
+    }
     
     /**
      * Calling this will toggle the visibility of the meta-data widget (effectively zooming

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionBrowser.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionBrowser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionBrowser.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -0,0 +1,189 @@
+package org.drools.brms.client.ruleeditor;
+
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.rpc.MetaData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.client.rpc.TableDataRow;
+import org.drools.brms.client.table.SortableTable;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This widget shows a list of versions. 
+ * 
+ * @author Michael Neale
+ */
+public class VersionBrowser extends Composite {
+
+    private Image refresh;
+    private FlexTable layout;
+    private String uuid;
+    private MetaData metaData;
+    private Command refreshCommand;
+
+    public VersionBrowser(String uuid, MetaData data, Command ref) {
+        
+        this.uuid = uuid;
+        this.metaData = data;
+        this.refreshCommand = ref;
+        
+        this.uuid = uuid;
+        HorizontalPanel wrapper = new HorizontalPanel();
+        
+        layout = new FlexTable();
+        layout.setWidget( 0, 0, new Label("Version history") );
+        FlexCellFormatter formatter = layout.getFlexCellFormatter();
+        formatter.setHorizontalAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT);
+        
+        refresh = new Image("images/refresh.gif");
+        
+        refresh.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                clickLoadHistory();                
+            }            
+        });
+        
+        layout.setWidget( 0, 1, refresh );
+        formatter.setHorizontalAlignment( 0, 1, HasHorizontalAlignment.ALIGN_RIGHT);
+
+        
+        wrapper.setStyleName( "version-browser-Border" );
+        
+        wrapper.add( layout );
+        
+        layout.setWidth( "100%" );
+        wrapper.setWidth( "100%" );
+        
+        initWidget( wrapper );
+    }
+
+    protected void clickLoadHistory() {
+        showBusyIcon();
+        DeferredCommand.add( new Command() {
+            public void execute() {
+                loadHistoryData();                
+            }            
+        });
+        
+    }
+
+    private void showBusyIcon() {
+        refresh.setUrl( "images/searching.gif" );
+    }
+
+    /**
+     * Actually load the history data, as demanded.
+     */
+    protected void loadHistoryData() {
+        
+        RepositoryServiceFactory.getService().loadAssetHistory( this.uuid, new GenericCallback() {
+
+            public void onSuccess(Object data) {
+                if (data == null) {
+                    layout.setWidget( 1, 0, new Label("No history.") );
+                    showStaticIcon();
+                    return;
+                }
+                TableDataResult table = (TableDataResult) data;                
+                TableDataRow[] rows = table.data;
+                
+                String[] header = new String[] {"Version number", "Comment", "Date Modified", "Status"};
+                
+                final SortableTable tableWidget = populateTableData( rows,
+                                                               header );
+                
+                tableWidget.setWidth( "100%" );
+                
+                layout.setWidget( 1, 0, tableWidget );
+                FlexCellFormatter formatter = layout.getFlexCellFormatter();
+                
+                formatter.setColSpan( 1, 0, 2 );
+                
+                Button open = new Button("View selected version");
+                
+                open.addClickListener( new ClickListener() {
+                    public void onClick(Widget w) {
+                        showVersion(tableWidget.getSelectedKey());                        
+                    }
+
+                });
+                
+                layout.setWidget( 2, 1, open );
+                formatter.setColSpan( 2, 1, 3 );
+                formatter.setHorizontalAlignment( 2, 1, HasHorizontalAlignment.ALIGN_CENTER );
+                
+                showStaticIcon();
+
+            }
+
+
+        });
+        
+        
+    }
+    
+    /**
+     * This should popup a view of the chosen historical version.
+     * @param selectedUUID
+     */
+    private void showVersion(String selectedUUID) {
+        
+        VersionViewer viewer = new VersionViewer(this.metaData, selectedUUID, uuid, refreshCommand);
+        viewer.setPopupPosition( 100, 100 );
+        
+        
+        viewer.show();
+        
+    }                    
+
+
+
+
+    /**
+     * This will return a sortable table ready to go.
+     * @param rows The data.
+     * @param header Headers.
+     * @return
+     */
+    private SortableTable populateTableData(TableDataRow[] rows,
+                                            String[] header) {
+        SortableTable tableWidget = new SortableTable(rows.length + 1, rows[0].values.length + 1);
+        
+        tableWidget.setColumnHeader( "", 0 );
+        
+        for ( int i = 0; i < header.length; i++ ) {
+            tableWidget.setColumnHeader( header[i], i + 1 );
+        }
+        
+        
+        tableWidget.setHiddenColumn( 0 );
+        for ( int i = 0; i < rows.length; i++ ) {
+            String[] cols = rows[i].values;
+            
+            tableWidget.setValue( i + 1, 0, rows[i].id );
+            for ( int j = 0; j < cols.length; j++ ) {
+                tableWidget.setValue( i + 1, j + 1, cols[j] );
+            }
+        }
+        return tableWidget;
+    }
+
+    
+    private void showStaticIcon() {
+        refresh.setUrl( "images/refresh.gif" );
+    }
+
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionBrowser.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionViewer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionViewer.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -0,0 +1,116 @@
+package org.drools.brms.client.ruleeditor;
+
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.common.WarningPopup;
+import org.drools.brms.client.common.YesNoDialog;
+import org.drools.brms.client.rpc.MetaData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.RuleAsset;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This shows a historical read only view of an asset, as a popup.
+ * Why a popup? well, people can drag it around how they want.
+ * 
+ * @author Michael Neale
+ */
+public class VersionViewer extends DialogBox {
+
+    private String versionUUID;
+    private String headUUID;
+    private Command refresh;
+
+    public VersionViewer(final MetaData head, String versionUUID, String headUUID, Command refresh) {
+        super(false);
+        
+        this.versionUUID = versionUUID;
+        this.headUUID = headUUID;
+        this.refresh = refresh;
+        
+        setStyleName( "version-Popup" );        
+        
+        LoadingPopup.showMessage( "Loading version" );
+        
+        RepositoryServiceFactory.getService().loadRuleAsset( versionUUID, new GenericCallback() {
+
+            public void onSuccess(Object data) {
+                                
+                RuleAsset asset = (RuleAsset) data;
+                asset.metaData.name = head.name;
+
+                
+                setText( "Version number [" + asset.metaData.versionNumber + "] of ["
+                         + asset.metaData.name + "]");
+                
+                FlexTable layout = new FlexTable();
+                FlexCellFormatter formatter = layout.getFlexCellFormatter();
+                
+                Button restore = new Button("Restore this version");
+                restore.addClickListener( new ClickListener() {
+                    public void onClick(Widget w) {
+                        restore(w);
+                    }
+
+                });
+                layout.setWidget( 0, 0, restore );
+                formatter.setHorizontalAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT );
+                
+                Button close = new Button("Close");
+                close.addClickListener( new ClickListener() {
+                    public void onClick(Widget w) {
+                        hide();                        
+                    }                    
+                });
+                
+                layout.setWidget( 0, 1, close );
+                
+                formatter.setHorizontalAlignment( 0, 1, HasHorizontalAlignment.ALIGN_RIGHT );
+                
+                RuleViewer viewer = new RuleViewer(asset, true);
+                
+                
+                viewer.setWidth( "100%" );
+                layout.setWidget( 1, 0, viewer );
+                formatter.setColSpan( 1, 1, 2 );
+                layout.setWidth( "100%" );
+                
+                setWidget(layout);
+            }
+            
+        });
+        
+        
+    }
+
+
+    private void restore(Widget w) {
+        
+        final CheckinPopup pop = new CheckinPopup(w.getAbsoluteLeft() + 10, 
+                                                  w.getAbsoluteTop() + 10,
+                                                  "Restore this version?");
+        pop.setCommand( new Command() {
+            public void execute() {
+                RepositoryServiceFactory.getService().restoreVersion( versionUUID, headUUID, pop.getCheckinComment(), new GenericCallback() {
+                    public void onSuccess(Object data) {
+                        hide();
+                        refresh.execute();                        
+                    }
+                });                
+            }            
+        });
+        pop.show();
+    }                    
+
+
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/VersionViewer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -119,8 +119,8 @@
                             1,
                             "" );
         } else {
-            int maxRows = data.numberOfRows;
-            if (data.numberOfRows < FILLER_ROWS) {
+            int maxRows = data.data.length;
+            if (maxRows < FILLER_ROWS) {
                 maxRows = FILLER_ROWS;
             }
             table = new SortableTable( maxRows,
@@ -150,7 +150,7 @@
             
             HorizontalPanel panel = new HorizontalPanel();
             panel.add( refreshIcon );
-            panel.add( new Label( "  " + data.numberOfRows + " items." ));
+            panel.add( new Label( "  " + data.data.length + " items." ));
             
             outer.setWidget( 0,
                              0,
@@ -159,13 +159,13 @@
 
         //setup the "key" column
         table.setHiddenColumn( 0 );
-        table.addColumnHeader( "",
+        table.setColumnHeader( "",
                                0 );
         table.setWidth( "100%" );
 
         //add the headers
         for ( int i = 0; i < this.tableConfig.headers.length; i++ ) {
-            table.addColumnHeader( this.tableConfig.headers[i],
+            table.setColumnHeader( this.tableConfig.headers[i],
                                    i + 1 );
         }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -62,8 +62,7 @@
 	/** 
      * Adds a header, which will be at the zero index in the table.
 	 */
-	public void addColumnHeader(String name, int index){
-               
+	public void setColumnHeader(String name, int index){               
 		tableHeader.add(index, name);
 		this.renderTableHeader(name, index);
 	}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2007-01-24 09:51:01 UTC (rev 9003)
@@ -139,8 +139,18 @@
 	font-size: smaller;
 }
 
+.version-Popup {
+	background-color: white;
+	border: 1px solid #B8B8B8;
+}
 
+.version-Popup .Caption {
+  background-color: #B8B8B8;
+  font-color: white;
+  font-weight: bold;
+}
 
+
 .gwt-TabBar {
   background-color: #B8B8B8;
   font-size: smaller;
@@ -327,6 +337,10 @@
   background-color: #FDFCDC;
 }
 
+.version-browser-Border {
+  border: 1px solid #B8B8B8;
+}
+
 .dt-editor-Grid {
   background-color: #FDFCDC;
   border: 1px solid #B8B8B8;  

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/asset_version.png
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/asset_version.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -1,5 +1,6 @@
 package org.drools.brms.server;
 
+import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -10,6 +11,7 @@
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.servlet.http.HttpSession;
 
 import org.drools.brms.client.rpc.MetaData;
@@ -17,6 +19,7 @@
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.TableConfig;
 import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.client.rpc.TableDataRow;
 import org.drools.brms.server.util.MetaDataMapper;
 import org.drools.brms.server.util.TableDisplayHandler;
 import org.drools.repository.AssetItem;
@@ -41,6 +44,7 @@
     RepositoryService {
 
     private static final long serialVersionUID = 3150768417428383474L;
+    private static final DateFormat dateFormatter = DateFormat.getInstance();
     
     /**
      * The shared repository instance. This could be bound to JNDI eventually.
@@ -204,7 +208,7 @@
         RulesRepository repo = getRulesRepository();
         AssetItem item = repo.loadAssetByUUID( uuid );
         RuleAsset asset = new RuleAsset();
-        asset.uuid = item.getUUID();
+        asset.uuid = uuid;
 
         
         //load standard meta data
@@ -282,9 +286,48 @@
         handler.storeAssetContent( asset, repoAsset );
         
         repoAsset.checkin( meta.checkinComment );
+                
         
         return repoAsset.getUUID();
     }
+
+    public TableDataResult loadAssetHistory(String uuid) throws SerializableException {
+        
+        List result = new ArrayList();
+        
+        RulesRepository repo = getRulesRepository();
+        
+        AssetItem item = repo.loadAssetByUUID( uuid );
+        Iterator versions = item.getPredecessorVersionsIterator();
+        while(versions.hasNext()) {
+            
+            TableDataRow row = new TableDataRow();
+            AssetItem historical = (AssetItem) versions.next();
+                row.id = historical.getVersionSnapshotUUID();
+                row.values = new String[4];
+                row.values[0] = historical.getVersionNumber();
+                row.values[1] = historical.getCheckinComment();                
+                row.values[2] = dateFormatter.format( historical.getLastModified().getTime() );
+                row.values[3] = historical.getStateDescription();
+                result.add( row );
+        }
+        
+        if (result.size() == 0) return null;
+        TableDataResult table = new TableDataResult();
+        table.data = (TableDataRow[]) result.toArray(new TableDataRow[result.size()]);
+        
+        return table;
+    }
+
+    public void restoreVersion(String versionUUID,
+                                 String assetUUID,
+                                 String comment) {
+        RulesRepository repo = getRulesRepository();        
+        repo.restoreHistoricalAsset( repo.loadAssetByUUID( versionUUID ), 
+                                     repo.loadAssetByUUID( assetUUID ), 
+                                     comment );
+        
+    }
     
 
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRXMLToDRLConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRXMLToDRLConverter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRXMLToDRLConverter.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -0,0 +1,105 @@
+package org.drools.brms.server.util;
+
+import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
+import org.drools.brms.client.modeldriven.brxml.DSLSentence;
+import org.drools.brms.client.modeldriven.brxml.FactPattern;
+import org.drools.brms.client.modeldriven.brxml.IPattern;
+import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
+import org.drools.brms.client.modeldriven.brxml.RuleModel;
+
+/** 
+ * This class will convert BRXML to DRL.
+ * It will work off the RuleModel object graph, primarily.
+ * 
+ * @author Michael Neale
+ * @written-when-jetlagged-in-hong-kong-oh-how-I-hate-jetlag
+ */
+public class BRXMLToDRLConverter {
+    
+    public String toDRL(RuleModel model,
+                        String ruleName) {
+        StringBuffer buf = new StringBuffer();
+        buf.append( "rule \"" + ruleName + "\"" );
+        
+        render( model.attributes, buf );
+        buf.append( "\n\twhen" );
+        render( model.lhs, buf );
+        
+        return buf.toString();
+    }
+
+    private void render(IPattern[] lhs, StringBuffer buf) {
+        for ( int i = 0; i < lhs.length; i++ ) {
+            IPattern cond = lhs[i];
+            if (cond instanceof DSLSentence) {
+                render((DSLSentence) cond, buf);
+            } else if (cond instanceof FactPattern) {
+                render((FactPattern) cond, buf);
+            } else if (cond instanceof CompositeFactPattern) {
+                render((CompositeFactPattern) cond, buf);
+            }
+        }
+        
+    }
+
+    private void render(CompositeFactPattern pattern,
+                        StringBuffer buf) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    private void render(FactPattern pattern,
+                        StringBuffer buf) {
+        buf.append( "\n\t\t" );
+        
+        if (!nil(pattern.boundName)) {
+            buf.append( pattern.boundName );
+            buf.append( " : " );
+        }
+        
+        buf.append( pattern.factType );
+        buf.append( '(' );
+        
+        
+    }
+
+    private boolean nil(String s) {
+        if (s== null) return false;
+        if (s.equals( "" )) {
+            return false;
+        }
+        return true;
+    }
+
+    private void render(DSLSentence sentence,
+                        StringBuffer buf) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    private void render(RuleAttribute[] attributes, StringBuffer buf) {
+        
+        for ( int i = 0; i < attributes.length; i++ ) {
+            buf.append( "\n\t" );
+            RuleAttribute at = attributes[i];
+            String name = at.attributeName;
+            buf.append( name );
+            buf.append( ' ' );
+            
+            if (name.equals( "agenda-group" ) 
+                    || name.equals( "activation-group" )
+                    || name.equals( "date-effective" )
+                    || name.equals( "date-expires" )) {
+                    buf.append( '"' );
+                    buf.append( at.value );
+                    buf.append( '"' );
+            } else if (name.equals( "no-loop" )) {
+                buf.append( "true" );
+            } else {
+                buf.append( at.value );
+            }
+        }
+        
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRXMLToDRLConverter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -50,7 +50,6 @@
         }
         TableDataResult result = new TableDataResult();
         result.data = (TableDataRow[]) data.toArray( new TableDataRow[data.size()] );
-        result.numberOfRows = data.size();
         return result;        
     }
     

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-01-24 09:41:16 UTC (rev 9002)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-01-24 09:51:01 UTC (rev 9003)
@@ -110,7 +110,6 @@
       impl.createNewRule( "testRuleTableLoad2", "ya", "testRuleTableLoad", "testRuleTableLoad", "rule" );
 
       TableDataResult result = impl.loadRuleListForCategories( "testRuleTableLoad" );
-      assertEquals(2, result.numberOfRows);
       assertEquals(2, result.data.length);
       
       String key = result.data[0].id;
@@ -173,10 +172,51 @@
       asset = impl.loadRuleAsset( uuid );
       
       assertEquals("whee", asset.metaData.state);
+      assertEquals("changed state", asset.metaData.checkinComment);
       
       
   }
   
+  public void testLoadAssetHistoryAndRestore() throws Exception {
+      MockJBRMSServiceServlet impl = new MockJBRMSServiceServlet();
+      impl.repo.createPackage( "testLoadAssetHistory", "desc" );
+      impl.createCategory( "", "testLoadAssetHistory", "this is a cat" );
+      
+      
+      String uuid = impl.createNewRule( "testLoadAssetHistory", "description", "testLoadAssetHistory", "testLoadAssetHistory", "txt" );
+      RuleAsset asset = impl.loadRuleAsset( uuid );
+      impl.checkinVersion( asset ); //1
+      impl.checkinVersion( asset ); //2
+      impl.checkinVersion( asset ); //HEAD   
+      
+      TableDataResult result = impl.loadAssetHistory( uuid );
+      assertNotNull(result);
+      TableDataRow[] rows = result.data;
+      assertEquals(2, rows.length);
+      assertFalse(rows[0].id.equals( uuid ));
+      assertFalse(rows[1].id.equals( uuid ));
+      
+      RuleAsset old = impl.loadRuleAsset( rows[0].id );
+      RuleAsset newer = impl.loadRuleAsset( rows[1].id );
+      assertFalse(old.metaData.versionNumber.equals( newer.metaData.versionNumber ));
+            
+      RuleAsset head = impl.loadRuleAsset( uuid );
+      
+      String oldVersion = old.metaData.versionNumber;
+      assertFalse(oldVersion.equals( head.metaData.versionNumber ));
+      
+      impl.restoreVersion( old.uuid, head.uuid, "this was cause of a mistake" );
+      
+      RuleAsset newHead = impl.loadRuleAsset( uuid );
+      
+      
+      assertEquals("this was cause of a mistake", newHead.metaData.checkinComment);
+      
+      
+  }
+  
+  
+  
   public void testCheckin() throws Exception {
           MockJBRMSServiceServlet serv = new MockJBRMSServiceServlet();
           




More information about the jboss-svn-commits mailing list