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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Feb 11 22:37:48 EST 2007


Author: michael.neale at jboss.com
Date: 2007-02-11 22:37:48 -0500 (Sun, 11 Feb 2007)
New Revision: 9443

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_action.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_pattern.gif
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/FormStylePopup.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/NewRuleWizard.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/AssetContentFormatHandler.java
Log:
JBRULES-665

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-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -3,6 +3,13 @@
 /**
  * Keeps track of the different rule formats we support.
  * Each format type corresponds to the dublin core "format" attribute.
+ * 
+ * This is used both by the UI, to determine what are valid formats, and also on the server.
+ * If you are adding new types they need to be registered here.
+ * 
+ * If an asset type is unknown, then it will be opened with the default editor.
+ * 
+ * 
  * @author Michael Neale
  *
  */
@@ -11,6 +18,7 @@
     /** For functions */
     public static final String FUNCTION = "function";
 
+    /** For "model" assets */
     public static final String MODEL = "model";
 
     /** Vanilla DRL "file" */

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java	2007-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -29,6 +29,10 @@
     public void addAttribute(String label, Widget wid) {
         form.addAttribute( label, wid );
     }
+    
+    public void addRow(Widget wid) {
+        form.addRow( wid );
+    }
 
     public void show() {        
         Image close = new Image("images/close.gif");

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -0,0 +1,18 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * Used to transfer the payload for a simple DSL based rule.
+ * 
+ * @author Michael Neale
+ */
+public class DSLRuleData
+    implements
+    IsSerializable {
+
+    public String[] lhsSuggestions;
+    public String[] rhsSuggestions;    
+    public RuleContentText text;
+    
+}


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -0,0 +1,150 @@
+package org.drools.brms.client.ruleeditor;
+
+import org.drools.brms.client.rpc.RuleContentText;
+
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.DockPanel;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.KeyboardListener;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextArea;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.DockPanel.DockLayoutConstant;
+
+
+/**
+ * This is a textual rule editor, which provides DSL content assistance.
+ * This is similar (but simpler) to the IDE based one.
+ * @author michael neale
+ */
+public class DSLRuleEditor extends Composite {
+    
+    private TextArea text;
+    final private RuleContentText data;
+    
+
+    
+    public DSLRuleEditor(RuleContentText tex, final String[] dslConditions, final String[] dslActions) {
+        
+        this.data = tex;
+        text = new TextArea();
+        text.setWidth("100%");
+        text.setHeight("100%");
+        text.setVisibleLines(10);
+        text.setText(tex.content);
+        
+        text.setStyleName( "dsl-text-Editor" );
+        
+        FlexTable layout = new FlexTable();
+        layout.setWidget( 0, 0, text );
+        
+        text.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                data.content = text.getText();
+            }
+        });
+
+
+        
+        VerticalPanel vert = new VerticalPanel();
+        
+        Image lhsOptions = new Image("images/new_dsl_pattern.gif");
+        final String msg = "Add a new condition";
+        lhsOptions.setTitle( msg );
+        lhsOptions.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showOptions( dslConditions, w, msg );
+            }
+        });        
+        
+        Image rhsOptions = new Image("images/new_dsl_action.gif");   
+        final String msg2 =  "Add an action";
+        rhsOptions.setTitle( msg2 );
+        rhsOptions.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showOptions( dslActions, w, msg2 );
+            }
+        });   
+        
+        vert.add( lhsOptions );    
+        vert.add( rhsOptions );
+        layout.setWidget( 0, 1, vert );
+        
+        layout.getCellFormatter().setWidth( 0, 0, "95%" );
+        layout.getCellFormatter().setWidth( 0, 1, "5%" );
+        
+        layout.setWidth( "100%" );
+        layout.setHeight( "100%" );
+        
+        initWidget( layout );
+    }
+    
+    private void showOptions(final String[] items,
+                             Widget w, String message) {
+        PickList pick = new PickList(message, items, this);
+        pick.setPopupPosition( w.getAbsoluteLeft() - 250, w.getAbsoluteTop() );
+        pick.show();
+    }    
+    
+    private void insertText(String ins) {
+        int i = text.getCursorPos();
+        String left = text.getText().substring( 0, i );
+        String right = text.getText().substring( i, text.getText().length() );
+        text.setText( left + ins + right );
+    }    
+
+    /**
+     * The popup content assistance. Can be dragged around.
+     */
+    static class PickList extends DialogBox {
+
+        public PickList(String message, String[] items, final DSLRuleEditor self) {            
+            setStyleName( "ks-popups-Popup" );
+
+            final ListBox list = new ListBox();
+            for ( int i = 0; i < items.length; i++ ) {
+                list.addItem( items[i] );
+            }
+            
+            
+            setText( message );
+            
+            VerticalPanel vert = new VerticalPanel();
+            list.setVisibleItemCount( 6 );
+            vert.add( list );
+            
+            DockPanel buttons = new DockPanel();
+            
+            
+            Button ok = new Button("OK");
+            ok.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {
+                    self.insertText( list.getItemText( list.getSelectedIndex() ) );
+                    hide();
+                }
+            }  );
+            buttons.add( ok, DockPanel.WEST );
+            
+            
+            
+            Button close = new Button("close");
+            close.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {
+                    hide();
+                }
+            } );
+            buttons.add( close, DockPanel.EAST );
+            buttons.setWidth( "100%" );
+            vert.add( buttons );
+            
+            setWidget( vert );
+        }
+    }
+
+}


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

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-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -4,6 +4,7 @@
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
 import org.drools.brms.client.modeldriven.ui.RuleModeller;
+import org.drools.brms.client.rpc.DSLRuleData;
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleModelData;
 
@@ -11,7 +12,14 @@
 
 /**
  * This launches the appropriate editor for the asset type.
+ * This uses the format attribute to determine the appropriate editor, and
+ * ALSO to unpackage the content payload from the generic asset RPC object.
  * 
+ * NOTE: when adding new editors for asset types, this will also need to be enhanced to load 
+ * it up/unpackage it correctly for the editor.
+ * The editors will make changes to the rpc objects in place, and when checking in the whole RPC 
+ * objects will be sent back to the server.
+ * 
  * @author Michael Neale
  */
 public class EditorLauncher {
@@ -23,6 +31,9 @@
         //depending on the format, load the appropriate editor
         if ( asset.metaData.format.equals( AssetFormats.BUSINESS_RULE ) ) {
             return new RuleModeller( getSuggestionCompletionEngine(asset), getRuleModel(asset) );
+        } else if (asset.metaData.format.equals( AssetFormats.DSL_TEMPLATE_RULE )){
+            DSLRuleData data = (DSLRuleData) asset.content;            
+            return new DSLRuleEditor( data.text, data.lhsSuggestions, data.rhsSuggestions );
         } else {
             return new DefaultRuleContentWidget( asset );
         }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewRuleWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewRuleWizard.java	2007-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewRuleWizard.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -119,6 +119,7 @@
         box.addItem( "Business rule", AssetFormats.BUSINESS_RULE );
         box.addItem( "DRL file", AssetFormats.DRL );        
         box.addItem( "Technical rule", AssetFormats.TECHNICAL_RULE );
+        box.addItem( "Business rule using a DSL template", AssetFormats.DSL_TEMPLATE_RULE );
         
         box.setSelectedIndex( 0 );
         

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-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2007-02-12 03:37:48 UTC (rev 9443)
@@ -410,6 +410,13 @@
   height: 100%
 }
 
+.dsl-text-Editor {
+  font-family: Arial, sans-serif;
+  font-size: smaller;
+  border: 1px solid #B8B8B8;
+  padding: 0px;	
+}
+
 .dt-field-TextBox {
   border: none;
   padding: 0px;	

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


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

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


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java	2007-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java	2007-02-12 03:37:48 UTC (rev 9443)
@@ -9,6 +9,7 @@
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 import org.drools.brms.client.modeldriven.brxml.DSLSentenceFragment;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.brms.client.rpc.DSLRuleData;
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleContentText;
 import org.drools.brms.client.rpc.RuleModelData;
@@ -27,6 +28,8 @@
  * It uses the content attribute of asset nodes (drools:content) based
  * on the (drools:format) format key.
  * 
+ * NOTE: when enhancing this, don't forget to do the retrieve AND the store !
+ * 
  * @see AssetFormats
  * 
  * @author Michael Neale
@@ -41,11 +44,7 @@
      */
     public void retrieveAssetContent(RuleAsset asset,
                                      AssetItem item) throws SerializableException {
-        if (item.getFormat().equals( AssetFormats.DSL_TEMPLATE_RULE)) {
-            //ok here is where we do DSLs...
-            throw new SerializableException("Can't load DSL rules just yet.");
-
-        } else if (item.getFormat().equals( AssetFormats.BUSINESS_RULE )) {             
+        if (item.getFormat().equals( AssetFormats.BUSINESS_RULE )) {             
             RuleModel model = BRLPersistence.getInstance().toModel( item.getContent() );
 
             RuleModelData data = new RuleModelData();
@@ -55,6 +54,15 @@
             data.completionEngine = getDummySuggestionEngine();
             
             asset.content = data;
+        } else if (item.getFormat().equals( AssetFormats.DSL_TEMPLATE_RULE )) {
+            RuleContentText text = new RuleContentText();
+            text.content = item.getContent();
+            
+            //TODO: make this read in the DSL files in the current package.
+            DSLRuleData data = getDummyDSLSuggestions();
+            data.text = text;
+            
+            asset.content = data;            
         } else {
             //default to text, goode olde texte, just like mum used to make.
             RuleContentText text = new RuleContentText();
@@ -67,6 +75,13 @@
         
     }
     
+    private DSLRuleData getDummyDSLSuggestions() {
+        DSLRuleData data = new DSLRuleData();
+        data.lhsSuggestions = new String[] {"The persons name is {name}", "- age is less than {age}"};
+        data.rhsSuggestions = new String[] {"Reject claim", "Send notification to [{email}]"};                                                   
+        return data;
+    }
+
     private SuggestionCompletionEngine getDummySuggestionEngine() {
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
         
@@ -118,6 +133,9 @@
         } else if (asset.content instanceof RuleModelData) {
             RuleModelData data = (RuleModelData) asset.content;
             repoAsset.updateContent( BRLPersistence.getInstance().toXML( data.model ) );
+        } else if (asset.content instanceof DSLRuleData) {
+            DSLRuleData data = (DSLRuleData) asset.content;
+            repoAsset.updateContent( data.text.content );
         } else {
             throw new SerializableException("Not able to handle that type of content just yet...");
         }




More information about the jboss-svn-commits mailing list