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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 3 00:48:55 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-05-03 00:48:54 -0400 (Thu, 03 May 2007)
New Revision: 11621

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/DecisionTableXLSWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/AssetAttachmentFileWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/decision_table.png
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/spreadsheet_small.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DecisionTableXLSHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/resources/SampleDecisionTable.xls
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Driver.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Policy.java
   labs/jbossrules/trunk/drools-jbrms/src/test/resources/SampleDecisionTable_WithError.xls
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ContentHandlerTest.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.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/EditorLauncher.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.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/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TestEnvironmentSessionHelper.java
   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/builder/ContentPackageAssemblerTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java
Log:
JBRULES-772 Decision Tables

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -31,14 +31,16 @@
     public static String BUSINESS_RULE = "brxml";
 
     
-    /** use a DSL, not sure about this one - can use text or constrained editor */
+    /** use a DSL, free text editor */
     public static String DSL_TEMPLATE_RULE   = "brule";
 
-
     
+    /** Use a decision table.*/
+    public static String DECISION_SPREADSHEET_XLS = "xls";
+    
     /**
      * The following group the 
      */
-    public static String[] BUSINESS_RULE_FORMATS = new String[] {AssetFormats.BUSINESS_RULE, AssetFormats.DSL_TEMPLATE_RULE};
+    public static String[] BUSINESS_RULE_FORMATS = new String[] {AssetFormats.BUSINESS_RULE, AssetFormats.DSL_TEMPLATE_RULE, AssetFormats.DECISION_SPREADSHEET_XLS};
     public static String[] TECHNICAL_RULE_FORMATS = new String[] {AssetFormats.DRL};
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/DecisionTableXLSWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/DecisionTableXLSWidget.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/DecisionTableXLSWidget.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -0,0 +1,33 @@
+package org.drools.brms.client.decisiontable;
+
+import org.drools.brms.client.packages.AssetAttachmentFileWidget;
+import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.client.ruleeditor.RuleViewer;
+
+import com.google.gwt.user.client.ui.HTML;
+
+/**
+ * This widget deals with XLS files in "classic" decision tables.
+ * 
+ * @author Michael Neale
+ */
+public class DecisionTableXLSWidget extends AssetAttachmentFileWidget {
+
+    public DecisionTableXLSWidget(
+                                  RuleAsset asset, RuleViewer viewer) {
+        super( asset,
+               viewer );
+        super.addDescription(new HTML("<small><i>This is a decision table in a spreadsheet (XLS). Typically they contain many rules in one sheet.</i></small>"));
+    }
+
+    public String getIcon() {
+        return "images/decision_table.png";
+    }
+    
+    public String getOverallStyleName() {
+        return "decision-Table-upload";
+    }
+    
+
+
+}


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/AssetAttachmentFileWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/AssetAttachmentFileWidget.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/AssetAttachmentFileWidget.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -0,0 +1,158 @@
+package org.drools.brms.client.packages;
+
+import org.drools.brms.client.common.ErrorPopup;
+import org.drools.brms.client.common.FormStyleLayout;
+import org.drools.brms.client.common.HTMLFileManagerFields;
+import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.client.ruleeditor.RuleViewer;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.Window;
+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.FileUpload;
+import com.google.gwt.user.client.ui.FormHandler;
+import com.google.gwt.user.client.ui.FormPanel;
+import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
+import com.google.gwt.user.client.ui.FormSubmitEvent;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Hyperlink;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This wraps a file uploader utility for model packages.
+ * Model packages are jar files. 
+ * 
+ * @author Michael Neale
+ * @author Fernando Meyer
+ */
+
+public abstract class AssetAttachmentFileWidget extends Composite {
+
+
+    private FormPanel form;
+    private Button ok;
+    private HorizontalPanel busy;
+    private RuleViewer viewer;
+    private FormStyleLayout layout;
+    
+
+    public AssetAttachmentFileWidget(final RuleAsset asset, final RuleViewer viewer) {
+        this.viewer = viewer;
+        initWidgets(asset.uuid, asset.metaData.name);
+        initAssetHandlers();
+    }
+    
+    protected void initWidgets(final String uuid, String formName) {
+        form = new FormPanel();
+        form.setAction( GWT.getModuleBaseURL() + "asset" );
+        form.setEncoding( FormPanel.ENCODING_MULTIPART );
+        form.setMethod( FormPanel.METHOD_POST );
+        
+        FileUpload up = new FileUpload();
+        up.setName( HTMLFileManagerFields.UPLOAD_FIELD_NAME_ATTACH );        
+        HorizontalPanel fields = new HorizontalPanel();
+        fields.add( getHiddenField(HTMLFileManagerFields.FORM_FIELD_UUID, uuid) );
+  
+        ok = new Button("Upload");
+                
+        fields.add( up );
+        fields.add( ok );
+        
+        form.add( fields );
+        
+        layout = new FormStyleLayout(getIcon(), 
+                                                     formName);
+
+        
+        layout.addAttribute( "Upload new version:", form );
+        
+        Button dl = new Button("Download");
+        dl.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                Window.open( GWT.getModuleBaseURL() + "asset?" +  HTMLFileManagerFields.FORM_FIELD_UUID + "=" + uuid, 
+                             "downloading...", "" );
+            }            
+        });
+        layout.addAttribute( "Download current version:", dl );
+        
+        busy = new HorizontalPanel();
+        busy.setVisible( false );
+        busy.add( new Label("Uploading file...") );
+        busy.add( new Image("images/spinner.gif") );
+        
+        layout.addRow( busy );
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showUploadingBusy();
+                submitUpload();
+            }            
+        });
+                
+        initWidget( layout );
+        layout.setWidth( "100%" );
+        this.setStyleName( getOverallStyleName() );        
+    }
+    
+    /**
+     * @return The path to the icon to use.
+     */
+    public abstract String getIcon();
+
+    /**
+     * return the overall style name to use.
+     */
+    public abstract String getOverallStyleName();
+
+    void initAssetHandlers( ) {
+        form.addFormHandler( new FormHandler() {
+
+            public void onSubmit(FormSubmitEvent ev) {                
+            }
+
+            public void onSubmitComplete(FormSubmitCompleteEvent ev) {  
+                    if (ev.getResults().indexOf( "OK" ) > -1) {                        
+                        viewer.refreshDataAndView();
+                    } else {
+                        ErrorPopup.showMessage( "Unable to upload the file." );
+                    }
+            }
+            
+        });        
+    }
+
+    protected void submitUpload() {
+        DeferredCommand.add( new Command() {
+            public void execute() {
+                form.submit();
+            }            
+        });
+    }
+
+    protected void showUploadingBusy() {
+        this.ok.setVisible( false );
+        this.form.setVisible( false );
+        this.busy.setVisible( true );
+    }
+
+    private TextBox getHiddenField(String name, String value) {
+        TextBox t = new TextBox();
+        t.setName( name );
+        t.setText( value );
+        t.setVisible( false );
+        return t;
+    }
+
+    public void addDescription(Widget d) {
+        this.layout.addRow( d );
+        
+    }
+    
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -32,9 +32,27 @@
  * @author Fernando Meyer
  */
 
-public class ModelAttachmentFileWidget extends Composite {
+public class ModelAttachmentFileWidget extends AssetAttachmentFileWidget {
 
+    
+    public ModelAttachmentFileWidget(RuleAsset asset, RuleViewer viewer) {
+        super( asset, viewer );
+    }
 
+
+    public String getIcon() {
+        return "images/model_large.png";
+    }
+    
+    public String getOverallStyleName() {
+        return "editable-Surface";
+    }
+    
+}
+
+/*Composite {
+
+
     private FormPanel form;
     private Button ok;
     private HorizontalPanel busy;
@@ -137,3 +155,5 @@
     }
     
 }
+
+*/
\ No newline at end of file

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-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -6,7 +6,6 @@
 import org.drools.brms.client.common.ImageButton;
 import org.drools.brms.client.common.RulePackageSelector;
 import org.drools.brms.client.common.StatusChangePopup;
-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;
@@ -126,14 +125,10 @@
         Button archive = new Button("Archive");
         archive.addClickListener(new ClickListener() {
             public void onClick(Widget w) {
-                YesNoDialog diag = new YesNoDialog("Are you sure about archive this Item?", new Command() {
-                    public void execute() {
-                        metaData.checkinComment = "Archived Item on " + new java.util.Date().toString();
-                        archiveAction.execute();
-                    }                        
-                });
-                diag.setPopupPosition(Window.getClientWidth() / 2, Window.getClientHeight() / 2);
-                diag.show();
+                if (Window.confirm( "Are you sure you want to archive this item?" )) {
+                    metaData.checkinComment = "Archived Item on " + new java.util.Date().toString();
+                    archiveAction.execute();
+                }
             }
         });
         saveControls.add(archive);        
@@ -141,16 +136,11 @@
         if (this.metaData.versionNumber == 0) {  
         Button delete = new Button( "Delete" );
             delete.addClickListener( new ClickListener() {
+                
                 public void onClick(Widget w) {
-                    YesNoDialog diag = new YesNoDialog( "Are you sure about delete this unversioned Item?",
-                                                        new Command() {
-                                                            public void execute() {
-                                                                deleteAction.execute();
-                                                            }
-                                                        } );
-                    diag.setPopupPosition( Window.getClientWidth() / 2,
-                                           Window.getClientHeight() / 2 );
-                    diag.show();
+                    if (Window.confirm( "Are you sure you want to permanently delete this (unversioned) item?" ) ) {
+                        deleteAction.execute();
+                    }
                 }
             } );
             saveControls.add( delete );        

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -5,6 +5,7 @@
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.common.GenericCallback;
 import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.decisiontable.DecisionTableXLSWidget;
 import org.drools.brms.client.modeldriven.ui.RuleModeller;
 import org.drools.brms.client.packages.ModelAttachmentFileWidget;
 import org.drools.brms.client.packages.SuggestionCompletionCache;
@@ -41,8 +42,9 @@
             return new DSLRuleEditor( asset );
         } else if ( asset.metaData.format.equals( AssetFormats.MODEL ) ) {
             return new ModelAttachmentFileWidget( asset, viewer );
+        } else if (asset.metaData.format.equals( AssetFormats.DECISION_SPREADSHEET_XLS )){
+            return new DecisionTableXLSWidget( asset, viewer );
         } else {
-
             return new DefaultRuleContentWidget( asset );
         }
 
@@ -118,7 +120,10 @@
             icon = "function_assets.gif";
         } else if ( asset.metaData.format.equals( AssetFormats.MODEL ) ) {
             icon = "model_asset.gif";
+        } else if (asset.metaData.format.equals( AssetFormats.DECISION_SPREADSHEET_XLS )) {
+            icon = "spreadsheet_small.gif";
         }
+        
         tab.add( view,
                  "<img src='images/" + icon + "'>" + displayName,
                  true );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -131,6 +131,7 @@
         box.addItem( "Business rule", AssetFormats.BUSINESS_RULE );
         box.addItem( "DRL rule (technical rule)", AssetFormats.DRL );        
         box.addItem( "Business rule using a DSL template", AssetFormats.DSL_TEMPLATE_RULE );
+        box.addItem( "Decision table (spreadsheet)", AssetFormats.DECISION_SPREADSHEET_XLS );
         
         box.setSelectedIndex( 0 );
         

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -89,6 +89,7 @@
         table.setWidget( 0, 1, quick);
         
         formatter.setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
+        formatter.setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
         formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );        
         formatter.setRowSpan( 0, 1, 3 );
         formatter.setWidth( 0, 0, "30%" );

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-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2007-05-03 04:48:54 UTC (rev 11621)
@@ -315,6 +315,11 @@
 //  padding: 4px;
 }
 
+.decision-Table-upload {
+  background-color: white;
+  border: 1px solid #aaaa99;
+}
+
 .package-Editor {
   background-color: #f7f2d0;
   border: 1px solid #aaaa99;

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


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

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


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -157,6 +157,9 @@
             asset.updateContent( "[when]Condition sentence template {var}=" +
                     "rule language mapping {var}\n" +
                     "[then]Action sentence template=rule language mapping");
+        } else if (format.equals( AssetFormats.DECISION_SPREADSHEET_XLS )) {
+            asset.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/SampleDecisionTable.xls" ) );
+            asset.updateBinaryContentAttachmentFileName( "SampleDecisionTable.xls" );
         }
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -27,6 +27,7 @@
             put(AssetFormats.DSL, new DSLDefinitionContentHandler());
             put(AssetFormats.FUNCTION, new FunctionContentHandler());
             put(AssetFormats.MODEL, new ModelContentHandler());
+            put(AssetFormats.DECISION_SPREADSHEET_XLS, new DecisionTableXLSHandler());
             
         }};        
     }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DecisionTableXLSHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DecisionTableXLSHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DecisionTableXLSHandler.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -0,0 +1,50 @@
+package org.drools.brms.server.contenthandler;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.server.builder.BRMSPackageBuilder;
+import org.drools.brms.server.builder.ContentPackageAssembler.ErrorLogger;
+import org.drools.compiler.DroolsParserException;
+import org.drools.decisiontable.InputType;
+import org.drools.decisiontable.SpreadsheetCompiler;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+
+import com.google.gwt.user.client.rpc.SerializableException;
+
+/**
+ * This is for handling XLS content (classic decision tables).
+ * 
+ * @author Michael Neale
+ */
+public class DecisionTableXLSHandler extends ContentHandler implements IRuleAsset {
+
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+        //do nothing, as we have an attachment
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+        //do nothing, as we have an attachment
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder, AssetItem asset, StringBuffer buf) {
+        SpreadsheetCompiler comp = new SpreadsheetCompiler();
+        String drl = comp.compile( asset.getBinaryContentAttachment(), InputType.XLS );
+        buf.append( drl );
+    }
+
+    public void compile(BRMSPackageBuilder builder, AssetItem asset, ErrorLogger logger) throws DroolsParserException,
+                                                                                        IOException {
+        SpreadsheetCompiler comp = new SpreadsheetCompiler();
+        String drl = comp.compile( asset.getBinaryContentAttachment(), InputType.XLS );
+        builder.addPackageFromDrl( new StringReader(drl) );
+        
+    }
+
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TestEnvironmentSessionHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TestEnvironmentSessionHelper.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TestEnvironmentSessionHelper.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -1,5 +1,7 @@
 package org.drools.brms.server.util;
 
+import java.io.File;
+
 import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -9,6 +11,7 @@
 
 import org.drools.repository.JCRRepositoryConfigurator;
 import org.drools.repository.JackrabbitRepositoryConfigurator;
+import org.drools.repository.RepositorySessionUtil;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryAdministrator;
 
@@ -29,6 +32,14 @@
     
     public static synchronized Session getSession(boolean erase) throws Exception {
         if (repository == null) {
+            
+            if (erase) {
+                File repoDir = new File("repository");
+                System.out.println("DELETE test repo dir: " + repoDir.getAbsolutePath());
+                RepositorySessionUtil.deleteDir( repoDir );
+                System.out.println("TEST repo dir deleted.");
+            }
+            
             JCRRepositoryConfigurator config = new JackrabbitRepositoryConfigurator();
             repository = config.getJCRRepository(null);;
         

Added: labs/jbossrules/trunk/drools-jbrms/src/main/resources/SampleDecisionTable.xls
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/resources/SampleDecisionTable.xls
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Driver.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Driver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Driver.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -0,0 +1,41 @@
+package org.acme.insurance;
+
+/**
+ * This represents obviously a driver who is applying for an insurance Policy.
+ * @author Michael Neale
+ *
+ */
+public class Driver {
+
+	private String name = "Mr Joe Blogs";
+	private Integer age = new Integer(30);
+	private Integer priorClaims = new Integer(0);	
+	private String  locationRiskProfile = "LOW";
+	
+	public Integer getAge() {
+		return age;
+	}
+	public void setAge(Integer age) {
+		this.age = age;
+	}
+	public String getLocationRiskProfile() {
+		return locationRiskProfile;
+	}
+	public void setLocationRiskProfile(String locationRiskProfile) {
+		this.locationRiskProfile = locationRiskProfile;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Integer getPriorClaims() {
+		return priorClaims;
+	}
+	public void setPriorClaims(Integer priorClaims) {
+		this.priorClaims = priorClaims;
+	}
+	
+	
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Driver.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Policy.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Policy.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Policy.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -0,0 +1,49 @@
+package org.acme.insurance;
+
+/**
+ * This represents a policy that a driver is applying for. 
+ * 
+ * Obviously in the real world, there are actuaries to mess things up, but lets just pretend there is
+ * some simple base price and discount that we can calculate with relatively simple rules !
+ * 
+ * @author Michael Neale
+ */
+public class Policy {
+
+	private String type = "COMPREHENSIVE";
+	private boolean approved = false;
+	private int discountPercent = 0;
+	private int basePrice;
+	
+	public boolean isApproved() {
+		return approved;
+	}
+	public void setApproved(boolean approved) {
+		this.approved = approved;
+	}
+	public int getDiscountPercent() {
+		return discountPercent;
+	}
+	public void setDiscountPercent(int discountPercent) {
+		this.discountPercent = discountPercent;
+	}
+	
+	public String getType() {
+		return type;
+	}
+	
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public void applyDiscount(int discount) {
+		discountPercent += discount;
+	}
+	public int getBasePrice() {
+		return basePrice;
+	}
+	public void setBasePrice(int basePrice) {
+		this.basePrice = basePrice;
+	}
+	
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/acme/insurance/Policy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Deleted: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ContentHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ContentHandlerTest.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ContentHandlerTest.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -1,17 +0,0 @@
-package org.drools.brms.server;
-
-import org.drools.brms.client.common.AssetFormats;
-import org.drools.brms.server.contenthandler.BRXMLContentHandler;
-import org.drools.brms.server.contenthandler.ContentHandler;
-import org.drools.brms.server.contenthandler.DSLRuleContentHandler;
-import org.drools.brms.server.contenthandler.PlainTextContentHandler;
-
-import junit.framework.TestCase;
-
-public class ContentHandlerTest extends TestCase {
-
-    
-    public void testContentHandlerCreate() {
-
-    }
-}

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-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -150,6 +150,15 @@
         //          impl.createNewRule( "somerule_" + i, "description", 
         //                              "testAddRule", "another", "drl" );
         //      }
+        
+        result = impl.createNewRule( "testDTSample",
+                                     "a description",
+                                     "testAddRule",
+                                     "another",
+                                     AssetFormats.DECISION_SPREADSHEET_XLS );  
+        AssetItem dtItem = impl.repository.loadAssetByUUID( result );
+        assertNotNull(dtItem.getBinaryContentAsBytes());
+        assertTrue(dtItem.getBinaryContentAttachmentFileName().endsWith( ".xls" ));
     }
 
     public void testAttemptDupeRule() throws Exception {

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -1,18 +1,28 @@
 package org.drools.brms.server.builder;
 
+import java.io.InputStream;
+
 import junit.framework.TestCase;
 
+import org.acme.insurance.Driver;
+import org.acme.insurance.Policy;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.server.util.TestEnvironmentSessionHelper;
 import org.drools.repository.AssetItem;
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
 import org.drools.rule.Package;
+import org.drools.util.BinaryRuleBaseLoader;
 
+/**
+ * This will unit test package assembly into a binary.
+ * @author Michael Neale
+ */
 public class ContentPackageAssemblerTest extends TestCase {
-
     
-    
     /**
      * Test package configuration errors, 
      * including header, functions, DSL files.
@@ -298,7 +308,68 @@
         
     }
     
+    public void testXLSDecisionTable() throws Exception {
+
+        RulesRepository repo = getRepo();
+        
+        //first, setup the package correctly:
+        PackageItem pkg = repo.createPackage( "testXLSDecisionTable", "" );
+
+        pkg.updateHeader( "import org.acme.insurance.Policy\n import org.acme.insurance.Driver" );
+        repo.save();
+        
+        InputStream xls = this.getClass().getResourceAsStream( "/SampleDecisionTable.xls" );
+        assertNotNull(xls);
+        
+        AssetItem asset = pkg.addAsset( "MyDT", "" );
+        asset.updateFormat( AssetFormats.DECISION_SPREADSHEET_XLS );
+        asset.updateBinaryContentAttachment( xls );
+        asset.checkin( "" );
+        
+        ContentPackageAssembler asm = new ContentPackageAssembler(pkg);
+        if (asm.hasErrors()) {
+            System.err.println(asm.getErrors().get( 0 ).errorReport);
+            System.err.println(asm.getDRL());
+        }
+        assertFalse(asm.hasErrors());
+        
+        String drl = asm.getDRL();
+        
+        assertContains( "policy: Policy", drl );
+        
+        
+        Package bin = asm.getBinaryPackage();
+        
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        rb.addPackage( bin );
+        
+        WorkingMemory wm = rb.newStatefulSession();
+        
+        //now create some test data
+        Driver driver = new Driver();
+        Policy policy = new Policy();
+        
+        wm.assertObject(driver);
+        wm.assertObject(policy);
+        
+        wm.fireAllRules();
+        
+        assertEquals(120, policy.getBasePrice());
+        
+        asset.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/SampleDecisionTable_WithError.xls" ) );
+        asset.checkin( "" );
+        asm = new ContentPackageAssembler(pkg);
+        assertTrue(asm.hasErrors());
+        assertEquals(asset.getName(), asm.getErrors().get( 0 ).itemInError.getName());
+        asm = new ContentPackageAssembler(pkg, false);
+        assertFalse(asm.hasErrors());
+        drl = asm.getDRL();
+        assertNotNull(drl);
+        assertContains( "Driverx", drl);
+        
+    }
     
+    
     private void assertContains(String sub, String text) {
         if (text.indexOf( sub ) == -1) {
             fail("the text: '" + sub +"' was not found.");

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java	2007-05-03 04:33:33 UTC (rev 11620)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java	2007-05-03 04:48:54 UTC (rev 11621)
@@ -11,7 +11,9 @@
         assertTrue(ContentHandler.getHandler( AssetFormats.DSL ) instanceof DSLDefinitionContentHandler);
         assertTrue(ContentHandler.getHandler( AssetFormats.DSL_TEMPLATE_RULE ) instanceof DSLRuleContentHandler);
         assertTrue(ContentHandler.getHandler( AssetFormats.BUSINESS_RULE ) instanceof BRXMLContentHandler);
+        assertTrue(ContentHandler.getHandler( AssetFormats.DECISION_SPREADSHEET_XLS ) instanceof DecisionTableXLSHandler);
         
+        
         try {
             ContentHandler.getHandler( "XXX" );
             fail("should have thrown an exception");
@@ -24,6 +26,7 @@
         assertTrue(ContentHandler.getHandler( AssetFormats.DRL ).isRuleAsset());
         assertTrue(ContentHandler.getHandler( AssetFormats.DSL_TEMPLATE_RULE ).isRuleAsset());
         assertTrue(ContentHandler.getHandler( AssetFormats.BUSINESS_RULE ).isRuleAsset());
+        assertTrue(ContentHandler.getHandler( AssetFormats.DECISION_SPREADSHEET_XLS ).isRuleAsset());
         
         assertFalse(ContentHandler.getHandler( AssetFormats.DSL ).isRuleAsset());
         assertFalse(ContentHandler.getHandler( AssetFormats.MODEL ).isRuleAsset());

Added: labs/jbossrules/trunk/drools-jbrms/src/test/resources/SampleDecisionTable_WithError.xls
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/resources/SampleDecisionTable_WithError.xls
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream




More information about the jboss-svn-commits mailing list