[jboss-svn-commits] JBL Code SVN: r7981 - in labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client: . modeldriven modeldriven/model modeldriven/ui modeldriven/ui/old

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 30 06:51:03 EST 2006


Author: michael.neale at jboss.com
Date: 2006-11-30 06:50:50 -0500 (Thu, 30 Nov 2006)
New Revision: 7981

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ConnectiveConstraint.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Constraint.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Exist.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IAction.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IPattern.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Not.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Or.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/ConstraintWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/FactTypeWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/PatternWidget.java
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java
Log:
new model driven rule builder, using a model, plus bindings

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -1,10 +1,12 @@
 package org.drools.brms.client;
 
-import java.util.HashMap;
-
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-import org.drools.brms.client.modeldriven.ui.PatternWidget;
-import org.drools.brms.client.modeldriven.ui.RuleScorecardWidget;
+import org.drools.brms.client.modeldriven.model.ConnectiveConstraint;
+import org.drools.brms.client.modeldriven.model.Constraint;
+import org.drools.brms.client.modeldriven.model.FactPattern;
+import org.drools.brms.client.modeldriven.model.IPattern;
+import org.drools.brms.client.modeldriven.model.RuleModel;
+import org.drools.brms.client.modeldriven.ui.RuleModeller;
 
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.VerticalPanel;
@@ -34,23 +36,71 @@
 
     public Packages() {
         VerticalPanel panel = new VerticalPanel();
+        
+        panel.add( new RuleModeller(getDummySuggestionEngine(), getDummyData() ) );
+        
+        panel.setSpacing( 8 );
+        initWidget( panel );
+    }
 
-        //TODO: this will really be loaded from the server, as will the current rule stuff
+
+    private SuggestionCompletionEngine getDummySuggestionEngine() {
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
         
         com.addFact( "Person", new String[] {"age", "name"}  );
         com.addFact("Vehicle", new String[] {"type", "make"} );
         com.addOperators( "Person", "name", new String[] {"==", "!="});
+        com.addOperators( "Person", "age", new String[] {"==", "!=", "<", ">", "<=", ">="});
         com.addOperators( "Vehicle", "age", new String[] {"==", "!=", "<", ">"});
+        com.addOperators( "Vehicle", "type", new String[] {"==", "!=", "<", ">"});
 
-        com.addConnectiveOperators( "Vehicle", "make", new String[] {"|="});  
+        com.addConnectiveOperators( "Person", "name", new String[] {"|=", "!="});
 
         
+        com.addConnectiveOperators( "Vehicle", "make", new String[] {"|="});
+        return com;
+    }
+
+
+    private RuleModel getDummyData() {
+        RuleModel model = new RuleModel();
         
-        panel.add( new RuleScorecardWidget(com ) );
+        model.lhs = new IPattern[2];
         
-        panel.setSpacing( 8 );
-        initWidget( panel );
+        FactPattern p1 = new FactPattern();
+        FactPattern p2 = new FactPattern();
+        
+        model.lhs[0] = p1;
+        model.lhs[1] = p2;
+        
+        p1.factType = "Person";
+        p1.constraints = new Constraint[2];
+        p1.constraints[0] = new Constraint();
+        p1.constraints[1] = new Constraint();
+        p1.constraints[0].fieldName = "age";
+        p1.constraints[0].operator = "<";
+        p1.constraints[0].value = "42";
+
+        p1.constraints[1].fieldName = "name";
+        p1.constraints[1].operator = "==";
+        p1.constraints[1].value = "Bob";
+        p1.constraints[1].fieldBinding = "n";
+        p1.constraints[1].connectives = new ConnectiveConstraint[2];
+        p1.constraints[1].connectives[0] = new ConnectiveConstraint("|=", "Michael");
+        p1.constraints[1].connectives[1] = new ConnectiveConstraint("|=", "Mark");
+
+        
+        p2.factType = "Vehicle";
+        p2.boundName = "car1";
+        p2.constraints = new Constraint[1];
+        p2.constraints[0] = new Constraint();
+        p2.constraints[0].fieldName = "type";
+        p2.constraints[0].operator = "!=";
+        
+        
+        
+        return model;
+        
     }
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -9,6 +9,7 @@
 
 /**
  * An suggestion completion processor. This should be usable in both GWT/Web and the IDE.
+ * The data for this can be loaded into this from simple string lists.
  *  
  * @author Michael Neale
  */

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,12 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class ActionAssertFact
+    implements
+    IAction {
+
+    public String factType;
+    
+    /** tuples of field = value */
+    public String[][] fieldValues; 
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,9 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class ActionRetractFact
+    implements
+    IAction {
+    
+    public String variableName;
+
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,10 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class ActionSetField implements IAction {
+
+    public String variable;
+    public String field;
+    public String value;
+    public boolean modify;
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ConnectiveConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ConnectiveConstraint.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ConnectiveConstraint.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,17 @@
+package org.drools.brms.client.modeldriven.model;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class ConnectiveConstraint
+    implements
+    IsSerializable {
+
+    public ConnectiveConstraint(String opr,
+                                String val) {
+        this.operator = opr;
+        this.value = val;
+    }
+    public String operator;
+    public String value;
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Constraint.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Constraint.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Constraint.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,13 @@
+package org.drools.brms.client.modeldriven.model;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class Constraint implements IsSerializable {
+    public String fieldBinding;
+    public String fieldName;
+    public String operator;
+    public String value;
+    
+    public ConnectiveConstraint[] connectives;
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Exist.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Exist.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Exist.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,9 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class Exist
+    implements
+    IPattern {
+
+    FactPattern[] factPattern;
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,10 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class FactPattern implements IPattern {
+
+    public Constraint[] constraints;
+    public String factType;
+    public String boundName;
+    
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IAction.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IAction.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IAction.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,7 @@
+package org.drools.brms.client.modeldriven.model;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public interface IAction extends IsSerializable {
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IPattern.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/IPattern.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,9 @@
+package org.drools.brms.client.modeldriven.model;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public interface IPattern
+    extends
+    IsSerializable {
+
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Not.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Not.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Not.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,9 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class Not
+    implements
+    IPattern {
+
+    FactPattern[] factPatterns;
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Or.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Or.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/Or.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,7 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class Or implements IPattern {
+    
+    FactPattern[] factPatterns;
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,9 @@
+package org.drools.brms.client.modeldriven.model;
+
+public class RuleModel {
+
+    public IPattern[] lhs;
+    public ActionSetField[] rhs;
+    
+    
+}

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -1,200 +0,0 @@
-package org.drools.brms.client.modeldriven.ui;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-
-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.FlexTable;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
-
-/**
- * This contains all the constraints that are placed on a fact class.
- * 
- * @author Michael Neale
- */
-public class ConstraintWidget extends Composite {
-
-    private FlexTable outer;
-    public FlexTable layout;
-    private List rowData = new ArrayList();
-    private final SuggestionCompletionEngine completions;
-    private String factType;
-    
-    
-    /**
-     * 
-     * @param factType The type of the fact (needed for lists)
-     * @param com The suggestion completion.
-     * @param constraints A list of ConstraintAtom's, which apply to the fact.
-     */
-    public ConstraintWidget(String factType, SuggestionCompletionEngine com, List constraints) {
-        this.completions = com;
-        this.factType = factType;
-        this.rowData = constraints;
-        outer = new FlexTable();
-        doTable();
-        
-        
-        
-        initWidget( outer );
-    }
-    
-    
-    
-    private void doTable() {
-        layout = new FlexTable();
-        outer.setWidget( 0, 0, layout);
-        
-        //firstly to add a row
-        Image add = new Image("images/new_item.gif");
-        add.setTitle( "Add a new constraint on this fact." );
-        add.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                rowData.add( new ConstraintAtom() );
-                doTable();                
-            }            
-        });
-        
-        int addRow = rowData.size() + 1;
-        layout.setWidget( addRow, 0, add );
-        FlexCellFormatter formatter = layout.getFlexCellFormatter();
-        formatter.setColSpan( addRow, 0, 5 );
-        formatter.setHorizontalAlignment( addRow, 0, HasHorizontalAlignment.ALIGN_CENTER );
-        
-        
-        //now to do the rows:
-        for ( int i = 0; i < rowData.size(); i++ ) {
-            ConstraintAtom row = (ConstraintAtom) rowData.get( i );
-            layout.setWidget( i, 0, doFieldDropDown(row, i));
-            layout.setWidget( i, 1, doOperatorDropDown(row) );
-            layout.setWidget( i, 2, doValueEditor(row) );
-            //TODO: add in connectives here...
-            
-            Image remove = new Image("images/clear_item.gif");
-            final int idx = i;
-            remove.addClickListener( new ClickListener() {
-
-                public void onClick(Widget w) {
-                    rowData.remove( idx );
-                    doTable();
-                }
-                
-            });
-            layout.setWidget( i, 4, remove );
-        }
-        
-        
-    }
-
-
-
-    private Widget doValueEditor(final ConstraintAtom row) {
-        final TextBox text = new TextBox();
-        text.setText( row.value );
-        text.addChangeListener( new ChangeListener() {
-            public void onChange(Widget w) {
-                row.value = text.getText();
-            }            
-        });
-        return text;
-    }
-
-
-
-    /**
-     * Builds the list of valid operators based on the field selected.
-     */
-    private ListBox doOperatorDropDown(final ConstraintAtom row) {
-        final ListBox box = new ListBox();
-        String[] oprs = completions.getOperatorCompletions( factType, row.field.field );
-        if (oprs != null) {
-            for ( int i = 0; i < oprs.length; i++ ) {
-                box.addItem( oprs[i] );
-                if (oprs[i].equals( row.operator )) {
-                    box.setSelectedIndex( i );
-                }
-
-            }
-            
-            box.addChangeListener( new ChangeListener() {
-                public void onChange(Widget w) {
-                    row.operator = box.getItemText( box.getSelectedIndex() );                
-                }            
-            });
-        
-        }
-        
-        if (row.operator == null) {
-            box.addItem( "..." );  
-            
-        }
-        
-        return box;
-    }
-
-
-
-    /** 
-     * Creates the field list drop down, and selects the item.
-     */
-    private ListBox doFieldDropDown(final ConstraintAtom row, final int rowNumberInLayout) {
-        
-        final ListBox box = new ListBox();
-        
-        String[] com = completions.getFieldCompletions( factType );
-        for ( int i = 0; i < com.length; i++ ) {
-            box.addItem( com[i] );
-            if (com[i].equals( row.field.field )) {
-                box.setSelectedIndex( i );
-            }
-
-        }
-        
-        box.addChangeListener( new ChangeListener() {
-
-            public void onChange(Widget w) {
-                row.field.field = box.getItemText( box.getSelectedIndex() );    
-                layout.setWidget( rowNumberInLayout, 1, doOperatorDropDown( row ) );
-            }
-            
-        });
-        
-        if (row.field.field == null) {
-            box.addItem( "..." );
-        }
-        
-        return box;
-        
-    }
-
-
-    /**
-     * These classes are for containing the values.
-     */
-    class ConstraintAtom {
-        public ConstraintField field = new ConstraintField();
-        public String operator;
-        public String value;
-        public ConnectiveConstraint[] connectives;         
-    }
-    
-    class ConstraintField {
-        public String field;
-        public String boundVariableName;
-    }
-    
-    class ConnectiveConstraint {
-        public String operator;
-        public String value;
-    }
-    
-}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,186 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.model.ConnectiveConstraint;
+import org.drools.brms.client.modeldriven.model.Constraint;
+import org.drools.brms.client.modeldriven.model.FactPattern;
+import org.drools.brms.client.modeldriven.model.IPattern;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the new smart widget that works off the model.
+ * @author Michael Neale
+ *
+ */
+public class FactPatternWidget extends Composite {
+
+    private FactPattern pattern;
+    private FlexTable layout = new FlexTable();
+    private SuggestionCompletionEngine completions;
+    
+    
+    public FactPatternWidget(IPattern p, SuggestionCompletionEngine com) {
+        this.pattern = (FactPattern) p;
+        this.completions = com;
+        layout.setWidget( 0, 0, getPatternLabel() );
+        
+        final FlexTable inner = new FlexTable();
+        
+        layout.setWidget( 0, 1, inner );
+        
+        for ( int row = 0; row < pattern.constraints.length; row++ ) {
+            final Constraint c = pattern.constraints[row];
+            final int currentRow = row;
+            inner.setWidget( row, 0, fieldDropDown(c, new Command() {
+                public void execute() {
+                    inner.setWidget( currentRow, 1, operatorDropDown( c ));
+                }
+                
+            }) );
+            inner.setWidget( row, 1, operatorDropDown(c) );
+            inner.setWidget( row, 2, valueEditor(c) );            
+            inner.setWidget( row, 3, connectives(c) );
+
+        }
+        layout.setStyleName( "model-builder-Background" );
+        initWidget( layout );
+        
+        
+    }
+
+
+    private Label getPatternLabel() {
+        if (pattern.boundName != null) {
+            return new Label(pattern.factType + " [" + pattern.boundName + "]" );
+        } else {
+            return new Label(pattern.factType);
+        }
+    }
+
+
+    private Widget connectives(Constraint c) {
+        if (c.connectives != null && c.connectives.length > 0) {
+            HorizontalPanel horiz = new HorizontalPanel();
+            for ( int i = 0; i < c.connectives.length; i++ ) {
+                ConnectiveConstraint con = c.connectives[i];
+                horiz.add( connectiveOperatorDropDown(con, c.fieldName) );
+                horiz.add( connectiveValueEditor(con) );
+            }        
+            return horiz;
+        } else {
+            //nothing to do
+            return null;
+        }
+        
+    }
+
+
+    private Widget connectiveValueEditor(final ConnectiveConstraint con) {
+        
+        final TextBox box = new TextBox();
+        box.setVisibleLength( 4 );
+        box.setText( con.value );
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                con.value = box.getText();                
+            }            
+        });
+        return box;
+    }
+
+
+    private Widget connectiveOperatorDropDown(final ConnectiveConstraint con, String fieldName) {
+        String[] ops = completions.getConnectiveOperatorCompletions( pattern.factType, fieldName );
+        final ListBox box = new ListBox();
+        for ( int i = 0; i < ops.length; i++ ) {
+            box.addItem( ops[i] );
+            if (ops[i].equals( con.operator )) {
+                box.setSelectedIndex( i );
+            }
+
+        }
+        
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                con.operator = box.getItemText( box.getSelectedIndex() );                
+            }            
+        });
+        
+        return box;
+    }
+
+
+    private Widget valueEditor(final Constraint c) {
+        final TextBox box = new TextBox();
+        box.setText( c.value );
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                c.value = box.getText();                
+            }
+            
+        });
+        return box;
+    }
+
+
+    private Widget operatorDropDown(final Constraint c) {
+        String[] ops = completions.getOperatorCompletions( pattern.factType, c.fieldName );
+        final ListBox box = new ListBox();
+        for ( int i = 0; i < ops.length; i++ ) {
+            box.addItem( ops[i] );
+            if (ops[i].equals( c.operator )) {
+                box.setSelectedIndex( i );
+            }
+
+        }
+        
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                c.operator = box.getItemText( box.getSelectedIndex() );                
+            }            
+        });
+        
+        return box;
+    }
+
+
+    private Widget fieldDropDown(final Constraint con, final Command onChange) {
+        HorizontalPanel horiz = new HorizontalPanel();
+
+        final ListBox box = new ListBox();
+        
+        String[] com = completions.getFieldCompletions( this.pattern.factType );
+        for ( int i = 0; i < com.length; i++ ) {
+            box.addItem( com[i] );
+            if (com[i].equals( con.fieldName )) {
+                box.setSelectedIndex( i );
+            }
+        }
+        
+        box.addChangeListener( new ChangeListener() {
+
+            public void onChange(Widget w) {
+                con.fieldName = box.getItemText( box.getSelectedIndex() );
+                onChange.execute();
+            }
+            
+        });
+        horiz.add( box );
+        
+        if (con.fieldBinding != null) {
+            horiz.add( new Label( "[" + con.fieldBinding + "]") );
+        }
+        
+        return horiz;
+    }
+    
+}

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -1,91 +0,0 @@
-package org.drools.brms.client.modeldriven.ui;
-
-import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-
-import com.google.gwt.user.client.Command;
-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.HorizontalPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.PopupPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-/**
- * This is the widget for choosing/viewing the fact type.
- * 
- * @author Michael Neale
- *
- */
-public class FactTypeWidget extends Composite {
-
-    private final HorizontalPanel widget = new HorizontalPanel();
-    private SuggestionCompletionEngine completion;
-    private Label type;
-    private Command onChange;
-    
-    public FactTypeWidget(String factType, SuggestionCompletionEngine com, Command onChange) {        
-        this.completion = com;
-        this.onChange = onChange;
-        
-        type = new Label(factType);
-        Image edit = new Image("images/edit_tiny.gif");
-        edit.addClickListener( new ClickListener() {
-
-            public void onClick(Widget w) {
-                FactTypeList list = new FactTypeList();
-                list.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
-                list.show();
-                
-            }
-            
-        });
-        
-        widget.add( edit );
-        widget.add( type );
-        
-        initWidget( widget );
-    }
-    
-    /**
-     * This returns the current fact type.
-     */
-    public String getFactType() {
-        return type.getText();
-    }
-    
-    /**
-     * The popup for choosing a fact type.
-     * 
-     * @author Michael Neale
-     */
-    class FactTypeList extends PopupPanel {
-        
-        public FactTypeList() {
-            super(true);
-            final ListBox box = new ListBox();
-            String[] types = completion.getFactTypes();
-            box.addItem( "-- please choose --" );
-            for ( int i = 0; i < types.length; i++ ) {
-                box.addItem( types[i] );
-            }
-            
-            
-            box.addChangeListener( new ChangeListener() {
-
-                public void onChange(Widget w) {
-                    type.setText(box.getValue( box.getSelectedIndex()));
-                    onChange.execute();
-                    hide();
-                }
-                
-            });
-            
-            add( box );
-        }
-        
-    }
-    
-}

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -1,56 +0,0 @@
-package org.drools.brms.client.modeldriven.ui;
-
-import java.util.ArrayList;
-
-import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-
-/**
- * This is the containing widgets for applying constraints to a pattern. 
- * 
- * eg: <code>Person(age < 42)</code> would be covered by this widget.
- *  
- * @author Michael Neale
- */
-public class PatternWidget extends Composite {
-
-    private final FlexTable layout;
-    private String factTypeSelected;
-    private FactTypeWidget factWidget;
-    private SuggestionCompletionEngine completions;
-    
-    public PatternWidget(SuggestionCompletionEngine com, String factType) {
-        
-        this.completions = com;
-        layout = new FlexTable();
-        this.factTypeSelected = factType;
-                             
-        layout.setStyleName( "model-builder-Background" );
-        
-        
-        factWidget = new FactTypeWidget(factTypeSelected, com, new Command() {
-            public void execute() {
-                selectedFactType();
-            }            
-        });
-        layout.setWidget( 0, 0, factWidget );
-        layout.getFlexCellFormatter().setVerticalAlignment( 0, 0, HasVerticalAlignment.ALIGN_MIDDLE );
-       
-        //TODO: add loading up of existing data if its passed in here.
-        
-        
-        initWidget( layout );
-        
-    }
-
-
-    protected void selectedFactType() {
-        factTypeSelected = factWidget.getFactType();   
-        layout.setWidget(0, 1, new ConstraintWidget(factTypeSelected, completions, new ArrayList()) );
-    }
-    
-}

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java (from rev 7854, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java	2006-11-27 17:58:05 UTC (rev 7854)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,81 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.model.FactPattern;
+import org.drools.brms.client.modeldriven.model.IPattern;
+import org.drools.brms.client.modeldriven.model.RuleModel;
+
+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.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the parent widget that contains the model based rule builder.
+ * 
+ * @author Michael Neale
+ *
+ */
+public class RuleModeller extends Composite {
+
+    private FlexTable layout;
+    private SuggestionCompletionEngine completions;
+    private RuleModel model;
+    
+    public RuleModeller(SuggestionCompletionEngine com, RuleModel model) {
+        this.model = model;
+        this.completions = com;
+        
+        layout = new FlexTable();
+        layout.setStyleName( "model-builder-Background" );
+        
+        initWidget( layout );
+        
+        Image addPattern = new Image( "images/new_item.gif" );
+        addPattern.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showFactTypeSelector();               
+            }            
+        });
+        
+        layout.setWidget( 0, 0, new Label("IF") );
+        layout.setWidget( 0, 2, addPattern );
+        
+        
+        
+        layout.setWidget( 1, 1, renderLhs(this.model) );
+        layout.setWidget( 2, 0, new Label("THEN") );
+        layout.setWidget( 3, 1, new Label("<Rhs here>") );
+        
+        
+        
+    }
+
+    protected void showFactTypeSelector() {
+        // TODO Auto-generated method stub
+        
+    }
+
+    private Widget renderLhs(RuleModel model) {
+        VerticalPanel vert = new VerticalPanel();
+        for ( int i = 0; i < model.lhs.length; i++ ) {
+            IPattern pattern = model.lhs[i];
+            if (pattern instanceof FactPattern) {                
+                vert.add( new FactPatternWidget(pattern, completions) );
+            }
+            //TODO: add stuff for removing pattern here.
+            
+        }
+        
+        return vert;
+    }
+
+
+    
+    
+    
+    
+}

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java	2006-11-30 11:39:54 UTC (rev 7980)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -1,56 +0,0 @@
-package org.drools.brms.client.modeldriven.ui;
-
-import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-
-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.Image;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-/**
- * This is the parent widget that contains the model based rule builder.
- * 
- * @author Michael Neale
- *
- */
-public class RuleScorecardWidget extends Composite {
-
-    private FlexTable layout;
-    private SuggestionCompletionEngine completions;
-    
-    public RuleScorecardWidget(SuggestionCompletionEngine com) {
-        this.completions = com;
-        
-        layout = new FlexTable();
-        layout.setStyleName( "model-builder-Background" );
-        
-        initWidget( layout );
-        final VerticalPanel lhsPanel = new VerticalPanel();
-        
-        Image addPattern = new Image( "images/new_item.gif" );
-        addPattern.addClickListener( new ClickListener() {
-
-            public void onClick(Widget w) {
-                lhsPanel.add( new PatternWidget(completions, "") );
-                
-            }
-            
-        });
-        
-        
-        
-        layout.setWidget( 0, 0, new Label("IF") );
-        layout.setWidget( 0, 2, addPattern );
-        
-        layout.setWidget( 1, 1, lhsPanel );
-        
-        
-    }
-    
-    
-    
-    
-}

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/ConstraintWidget.java (from rev 7854, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java	2006-11-27 17:58:05 UTC (rev 7854)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/ConstraintWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,200 @@
+package org.drools.brms.client.modeldriven.ui.old;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+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.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This contains all the constraints that are placed on a fact class.
+ * 
+ * @author Michael Neale
+ */
+public class ConstraintWidget extends Composite {
+
+    private FlexTable outer;
+    public FlexTable layout;
+    private List rowData = new ArrayList();
+    private final SuggestionCompletionEngine completions;
+    private String factType;
+    
+    
+    /**
+     * 
+     * @param factType The type of the fact (needed for lists)
+     * @param com The suggestion completion.
+     * @param constraints A list of ConstraintAtom's, which apply to the fact.
+     */
+    public ConstraintWidget(String factType, SuggestionCompletionEngine com, List constraints) {
+        this.completions = com;
+        this.factType = factType;
+        this.rowData = constraints;
+        outer = new FlexTable();
+        doTable();
+        
+        
+        
+        initWidget( outer );
+    }
+    
+    
+    
+    private void doTable() {
+        layout = new FlexTable();
+        outer.setWidget( 0, 0, layout);
+        
+        //firstly to add a row
+        Image add = new Image("images/new_item.gif");
+        add.setTitle( "Add a new constraint on this fact." );
+        add.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                rowData.add( new ConstraintAtom() );
+                doTable();                
+            }            
+        });
+        
+        int addRow = rowData.size() + 1;
+        layout.setWidget( addRow, 0, add );
+        FlexCellFormatter formatter = layout.getFlexCellFormatter();
+        formatter.setColSpan( addRow, 0, 5 );
+        formatter.setHorizontalAlignment( addRow, 0, HasHorizontalAlignment.ALIGN_CENTER );
+        
+        
+        //now to do the rows:
+        for ( int i = 0; i < rowData.size(); i++ ) {
+            ConstraintAtom row = (ConstraintAtom) rowData.get( i );
+            layout.setWidget( i, 0, doFieldDropDown(row, i));
+            layout.setWidget( i, 1, doOperatorDropDown(row) );
+            layout.setWidget( i, 2, doValueEditor(row) );
+            //TODO: add in connectives here...
+            
+            Image remove = new Image("images/clear_item.gif");
+            final int idx = i;
+            remove.addClickListener( new ClickListener() {
+
+                public void onClick(Widget w) {
+                    rowData.remove( idx );
+                    doTable();
+                }
+                
+            });
+            layout.setWidget( i, 4, remove );
+        }
+        
+        
+    }
+
+
+
+    private Widget doValueEditor(final ConstraintAtom row) {
+        final TextBox text = new TextBox();
+        text.setText( row.value );
+        text.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                row.value = text.getText();
+            }            
+        });
+        return text;
+    }
+
+
+
+    /**
+     * Builds the list of valid operators based on the field selected.
+     */
+    private ListBox doOperatorDropDown(final ConstraintAtom row) {
+        final ListBox box = new ListBox();
+        String[] oprs = completions.getOperatorCompletions( factType, row.field.field );
+        if (oprs != null) {
+            for ( int i = 0; i < oprs.length; i++ ) {
+                box.addItem( oprs[i] );
+                if (oprs[i].equals( row.operator )) {
+                    box.setSelectedIndex( i );
+                }
+
+            }
+            
+            box.addChangeListener( new ChangeListener() {
+                public void onChange(Widget w) {
+                    row.operator = box.getItemText( box.getSelectedIndex() );                
+                }            
+            });
+        
+        }
+        
+        if (row.operator == null) {
+            box.addItem( "..." );  
+            
+        }
+        
+        return box;
+    }
+
+
+
+    /** 
+     * Creates the field list drop down, and selects the item.
+     */
+    private ListBox doFieldDropDown(final ConstraintAtom row, final int rowNumberInLayout) {
+        
+        final ListBox box = new ListBox();
+        
+        String[] com = completions.getFieldCompletions( factType );
+        for ( int i = 0; i < com.length; i++ ) {
+            box.addItem( com[i] );
+            if (com[i].equals( row.field.field )) {
+                box.setSelectedIndex( i );
+            }
+
+        }
+        
+        box.addChangeListener( new ChangeListener() {
+
+            public void onChange(Widget w) {
+                row.field.field = box.getItemText( box.getSelectedIndex() );    
+                layout.setWidget( rowNumberInLayout, 1, doOperatorDropDown( row ) );
+            }
+            
+        });
+        
+        if (row.field.field == null) {
+            box.addItem( "..." );
+        }
+        
+        return box;
+        
+    }
+
+
+    /**
+     * These classes are for containing the values.
+     */
+    class ConstraintAtom {
+        public ConstraintField field = new ConstraintField();
+        public String operator;
+        public String value;
+        public ConnectiveConstraint[] connectives;         
+    }
+    
+    class ConstraintField {
+        public String field;
+        public String boundVariableName;
+    }
+    
+    class ConnectiveConstraint {
+        public String operator;
+        public String value;
+    }
+    
+}

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/FactTypeWidget.java (from rev 7854, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java	2006-11-27 17:58:05 UTC (rev 7854)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/FactTypeWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,91 @@
+package org.drools.brms.client.modeldriven.ui.old;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.Command;
+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.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the widget for choosing/viewing the fact type.
+ * 
+ * @author Michael Neale
+ *
+ */
+public class FactTypeWidget extends Composite {
+
+    private final HorizontalPanel widget = new HorizontalPanel();
+    private SuggestionCompletionEngine completion;
+    private Label type;
+    private Command onChange;
+    
+    public FactTypeWidget(String factType, SuggestionCompletionEngine com, Command onChange) {        
+        this.completion = com;
+        this.onChange = onChange;
+        
+        type = new Label(factType);
+        Image edit = new Image("images/edit_tiny.gif");
+        edit.addClickListener( new ClickListener() {
+
+            public void onClick(Widget w) {
+                FactTypeList list = new FactTypeList();
+                list.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+                list.show();
+                
+            }
+            
+        });
+        
+        widget.add( edit );
+        widget.add( type );
+        
+        initWidget( widget );
+    }
+    
+    /**
+     * This returns the current fact type.
+     */
+    public String getFactType() {
+        return type.getText();
+    }
+    
+    /**
+     * The popup for choosing a fact type.
+     * 
+     * @author Michael Neale
+     */
+    class FactTypeList extends PopupPanel {
+        
+        public FactTypeList() {
+            super(true);
+            final ListBox box = new ListBox();
+            String[] types = completion.getFactTypes();
+            box.addItem( "-- please choose --" );
+            for ( int i = 0; i < types.length; i++ ) {
+                box.addItem( types[i] );
+            }
+            
+            
+            box.addChangeListener( new ChangeListener() {
+
+                public void onChange(Widget w) {
+                    type.setText(box.getValue( box.getSelectedIndex()));
+                    onChange.execute();
+                    hide();
+                }
+                
+            });
+            
+            add( box );
+        }
+        
+    }
+    
+}

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/PatternWidget.java (from rev 7854, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java	2006-11-27 17:58:05 UTC (rev 7854)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/old/PatternWidget.java	2006-11-30 11:50:50 UTC (rev 7981)
@@ -0,0 +1,56 @@
+package org.drools.brms.client.modeldriven.ui.old;
+
+import java.util.ArrayList;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+
+/**
+ * This is the containing widgets for applying constraints to a pattern. 
+ * 
+ * eg: <code>Person(age < 42)</code> would be covered by this widget.
+ *  
+ * @author Michael Neale
+ */
+public class PatternWidget extends Composite {
+
+    private final FlexTable layout;
+    private String factTypeSelected;
+    private FactTypeWidget factWidget;
+    private SuggestionCompletionEngine completions;
+    
+    public PatternWidget(SuggestionCompletionEngine com, String factType) {
+        
+        this.completions = com;
+        layout = new FlexTable();
+        this.factTypeSelected = factType;
+                             
+        layout.setStyleName( "model-builder-Background" );
+        
+        
+        factWidget = new FactTypeWidget(factTypeSelected, com, new Command() {
+            public void execute() {
+                selectedFactType();
+            }            
+        });
+        layout.setWidget( 0, 0, factWidget );
+        layout.getFlexCellFormatter().setVerticalAlignment( 0, 0, HasVerticalAlignment.ALIGN_MIDDLE );
+       
+        //TODO: add loading up of existing data if its passed in here.
+        
+        
+        initWidget( layout );
+        
+    }
+
+
+    protected void selectedFactType() {
+        factTypeSelected = factWidget.getFactType();   
+        layout.setWidget(0, 1, new ConstraintWidget(factTypeSelected, completions, new ArrayList()) );
+    }
+    
+}




More information about the jboss-svn-commits mailing list