[jboss-svn-commits] JBL Code SVN: r25920 - labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 2 08:20:56 EDT 2009


Author: ahtik
Date: 2009-04-02 08:20:55 -0400 (Thu, 02 Apr 2009)
New Revision: 25920

Modified:
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AddNewFieldConstraintDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AssignFieldVariableDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/ConstraintValueEditor.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/FactPatternWidget.java
Log:
JBRULES-2033: more enums support and a bit polished fact row

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AddNewFieldConstraintDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AddNewFieldConstraintDialog.java	2009-04-02 11:44:02 UTC (rev 25919)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AddNewFieldConstraintDialog.java	2009-04-02 12:20:55 UTC (rev 25920)
@@ -120,13 +120,17 @@
         createLabel( composite,
                      "Add a restriction on a field" );
 
-        String[] fieldCompletitions = getCompletion().getFieldCompletions( pattern.factType );
+        SuggestionCompletionEngine engine = getCompletion();
+        String[] fieldCompletitions = engine.getFieldCompletions( pattern.factType );
         final Combo fieldsCombo = new Combo( composite,
                                              SWT.READ_ONLY );
         fieldsCombo.setLayoutData( gd );
         fieldsCombo.add( "..." );
         for ( int i = 0; i < fieldCompletitions.length; i++ ) {
-            fieldsCombo.add( fieldCompletitions[i] );
+            String field = fieldCompletitions[i];
+            fieldsCombo.add( field );
+            fieldsCombo.setData( field,
+                                 engine.fieldTypes.get( pattern.factType + "." + field ) );
         }
         fieldsCombo.select( 0 );
 
@@ -139,6 +143,7 @@
 
                                          SingleFieldConstraint constraint = new SingleFieldConstraint();
                                          constraint.fieldName = fieldsCombo.getText();
+                                         constraint.fieldType = (String) fieldsCombo.getData( fieldsCombo.getText() );
                                          pattern.addConstraint( constraint );
                                          modeller.setDirty( true );
                                          modeller.reloadLhs();

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AssignFieldVariableDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AssignFieldVariableDialog.java	2009-04-02 11:44:02 UTC (rev 25919)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/AssignFieldVariableDialog.java	2009-04-02 12:20:55 UTC (rev 25920)
@@ -1,10 +1,15 @@
 package org.drools.eclipse.rulebuilder.ui;
 
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
 import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Event;
@@ -21,10 +26,13 @@
 
     private SingleFieldConstraint con;
 
+    private final FactPattern     pattern;
+
     public AssignFieldVariableDialog(Shell parent,
                                      FormToolkit toolkit,
                                      RuleModeller modeller,
-                                     SingleFieldConstraint con) {
+                                     SingleFieldConstraint con,
+                                     FactPattern pattern) {
         super( parent,
                "Bind the field called [" + con.fieldName + "] to a variable.",
                "Type the variable name and hit the button." );
@@ -32,6 +40,7 @@
         this.toolkit = toolkit;
         this.modeller = modeller;
         this.con = con;
+        this.pattern = pattern;
     }
 
     protected Control createDialogArea(final Composite parent) {
@@ -48,10 +57,49 @@
         composite.setLayout( l );
 
         createVariableBindingRow( composite );
+        createSubfieldConstraintRow( composite );
         toolkit.paintBordersFor( composite );
         return composite;
     }
 
+    private void createSubfieldConstraintRow(final Composite composite) {
+        SuggestionCompletionEngine engine = modeller.getSuggestionCompletionEngine();
+        String[] fields = engine.getFieldCompletions( con.fieldType );
+        if ( fields == null || fields.length <= 0 ) {
+            return;
+        }
+        createLabel( composite,
+                     "Add a restriction on a subfield" );
+        final Combo combo = new Combo( composite,
+                                       SWT.DROP_DOWN | SWT.READ_ONLY );
+        combo.add( "..." );
+        for ( int i = 0; i < fields.length; i++ ) {
+            String field = fields[i];
+            combo.add( field );
+            combo.setData( field,
+                           engine.fieldTypes.get( con.fieldType + "." + field ) );
+        }
+        combo.select( 0 );
+
+        combo.addModifyListener( new ModifyListener() {
+
+            public void modifyText(ModifyEvent e) {
+                String fName = combo.getText();
+
+                if ( combo.getSelectionIndex() == 0 ) {
+                    return;
+                }
+
+                pattern.addConstraint( new SingleFieldConstraint( fName,
+                                                                  ((String) combo.getData( fName )),
+                                                                  con ) );
+                modeller.setDirty( true );
+                modeller.reloadLhs();
+                close();
+            }
+        } );
+    }
+
     private void createVariableBindingRow(Composite composite) {
         createLabel( composite,
                      "Variable name" );

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/ConstraintValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/ConstraintValueEditor.java	2009-04-02 11:44:02 UTC (rev 25919)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/ConstraintValueEditor.java	2009-04-02 12:20:55 UTC (rev 25920)
@@ -124,17 +124,34 @@
                                     GridData gd) {
 
         String fieldName = ((SingleFieldConstraint) c).fieldName;
-        DropDownData enums = modeller.getSuggestionCompletionEngine().getEnums( pattern,
-                                                                                fieldName );
+        DropDownData enums = null;
         boolean found = false;
+        if ( ((SingleFieldConstraint) c).fieldType.equals( SuggestionCompletionEngine.TYPE_BOOLEAN )) {
+            enums = DropDownData.create(new String[]{"true", "false"});
+        }else
+        {
+            enums = modeller.getSuggestionCompletionEngine().getEnums( pattern,
+                                                                       fieldName );
+        }
         if ( enums != null && enums.fixedList.length > 0 ) {
             String[] list = enums.fixedList;
             final Combo combo = new Combo( parent,
                                            SWT.DROP_DOWN | SWT.READ_ONLY );
             for ( int i = 0; i < list.length; i++ ) {
                 String e = list[i];
-                combo.add( e );
-                if ( e.equals( c.value ) ) {
+                String[] split = null;
+                boolean s = false;
+                if ( e.indexOf( '=' ) > 0 ) {
+                    split = e.split( "=" );
+                    e = split[1];
+                    combo.add( e.trim() );
+                    combo.setData( e.trim(),
+                                   split[0].trim() );
+                    s = true;
+                } else {
+                    combo.add( e );
+                }
+                if ( e.equals( c.value ) || (s && split[0].trim().equals( c.value )) ) {
                     combo.select( i );
                     found = true;
                 }
@@ -147,7 +164,11 @@
             combo.addModifyListener( new ModifyListener() {
 
                 public void modifyText(ModifyEvent e) {
-                    c.value = combo.getItem( combo.getSelectionIndex() );
+                    String item = combo.getItem( combo.getSelectionIndex() );
+                    if ( combo.getData( item ) != null ) {
+                        item = (String) combo.getData( item );
+                    }
+                    c.value = item;
                     modeller.reloadLhs();
                     modeller.setDirty( true );
                 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/FactPatternWidget.java	2009-04-02 11:44:02 UTC (rev 25919)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/rulebuilder/ui/FactPatternWidget.java	2009-04-02 12:20:55 UTC (rev 25920)
@@ -1,6 +1,7 @@
 package org.drools.eclipse.rulebuilder.ui;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
@@ -16,6 +17,7 @@
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Combo;
@@ -79,18 +81,20 @@
     }
 
     private void create() {
-        Label l = toolkit.createLabel( parent,
+        Composite composite = new Composite( parent,
+                                             SWT.NO_FOCUS );
+        composite.setLayout( new GridLayout( 1,
+                                             true ) );
+        Label l = toolkit.createLabel( composite,
                                        getPatternLabel() );
+        l.setBackground( Display.getDefault().getSystemColor( SWT.COLOR_GRAY ) );
 
         GridData labelGD = new GridData( GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL );
         labelGD.horizontalSpan = 2;
-        //labelGD.verticalAlignment = SWT.CENTER;
+        labelGD.verticalAlignment = SWT.CENTER;
         //labelGD.horizontalAlignment = SWT.CENTER;
-        l.setLayoutData( labelGD );
-        l.setBackground( new Color( parent.getShell().getDisplay(),
-                                    240,
-                                    240,
-                                    240 ) );
+        composite.setLayoutData( labelGD );
+        composite.setBackground( Display.getDefault().getSystemColor( SWT.COLOR_GRAY ) );
 
         addDeleteAction();
         addMoreOptionsAction();
@@ -98,11 +102,17 @@
         Composite constraintComposite = toolkit.createComposite( parent );
         GridLayout constraintLayout = new GridLayout();
         constraintLayout.numColumns = 8;
+        constraintLayout.marginLeft = 5;
         constraintComposite.setLayout( constraintLayout );
 
         for ( int row = 0; row < pattern.getFieldConstraints().length; row++ ) {
+            FieldConstraint constraint = pattern.getFieldConstraints()[row];
+            boolean nested = false;
+            if ( constraint instanceof SingleFieldConstraint ) {
+                nested = ((SingleFieldConstraint) constraint).parent != null;
+            }
             renderFieldConstraints( constraintComposite,
-                                    pattern.getFieldConstraints()[row],
+                                    constraint,
                                     null,
                                     row,
                                     true,
@@ -301,12 +311,26 @@
                                      final SingleFieldConstraint c,
                                      boolean showBinding,
                                      boolean nested) {
-        addBindingField( constraintComposite,
+
+        Composite pad = new Composite( constraintComposite,
+                                       SWT.NONE );
+        pad.setLayout( new GridLayout( 2,
+                                       false ) );
+        GridData gd = new GridData();
+        gd.horizontalAlignment = SWT.LEFT;
+        gd.horizontalSpan = 2;
+
+        pad.setLayoutData( gd );
+        GridData data = new GridData();
+
+        data.horizontalIndent = 15 * getNests( c );
+        addBindingField( pad,
                          c,
-                         showBinding );
-        toolkit.createLabel( constraintComposite,
+                         showBinding,
+                         data );
+        toolkit.createLabel( pad,
                              c.fieldName );
-        if ( c.connectives == null || c.connectives.length == 0 ) {
+        if (!hasChildren( row ) &&(c.connectives == null || c.connectives.length == 0 )) {
             addRemoveButton( constraintComposite,
                              parentConstraint,
                              row,
@@ -329,9 +353,20 @@
                              c );
     }
 
+    private int getNests(final SingleFieldConstraint c) {
+        SingleFieldConstraint s = (SingleFieldConstraint) c.parent;
+        int nests = 0;
+        while ( s != null ) {
+            nests++;
+            s = (SingleFieldConstraint) s.parent;
+        }
+        return nests;
+    }
+
     private void addBindingField(Composite constraintComposite,
                                  final SingleFieldConstraint c,
-                                 boolean showBinding) {
+                                 boolean showBinding,
+                                 Object data) {
         if ( !c.isBound() ) {
             if ( bindable && showBinding ) {
                 ImageHyperlink link = addImage( constraintComposite,
@@ -341,7 +376,8 @@
                         RuleDialog popup = new AssignFieldVariableDialog( parent.getShell(),
                                                                           toolkit,
                                                                           getModeller(),
-                                                                          c );
+                                                                          c,
+                                                                          pattern );
                         popup.open();
                     }
 
@@ -353,6 +389,7 @@
                 } );
 
                 link.setToolTipText( "Bind the field called [" + c.fieldName + "] to a variable." );
+                link.setLayoutData( data );
             } else {
                 toolkit.createLabel( constraintComposite,
                                      "" );
@@ -500,7 +537,7 @@
                 dialog.setMessage( "Remove this item?" );
                 dialog.setText( "Remove this item?" );
                 if ( dialog.open() == SWT.YES ) {
-                    pattern.removeConstraint( currentRow );
+                    pattern.removeConstraint(currentRow);
                     getModeller().reloadLhs();
                     getModeller().setDirty( true );
                 }
@@ -515,6 +552,19 @@
         delLink.setLayoutData( new GridData( GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING ) );
     }
 
+    private boolean hasChildren(int row) {
+        SingleFieldConstraint con = (SingleFieldConstraint) pattern.getFieldConstraints()[row];
+        System.out.println(con.fieldName);
+        FieldConstraint[] fc = pattern.getFieldConstraints();
+        for ( int i = row; i < fc.length; i++ ) {
+            SingleFieldConstraint f = (SingleFieldConstraint) fc[i];
+            if (con.equals( f.parent)){
+                return true;
+            }
+        }
+        return false;
+    }
+
     private void addRemoveConstraintAction(Composite composite,
                                            final SingleFieldConstraint constraint,
                                            final ConnectiveConstraint connConstraint) {




More information about the jboss-svn-commits mailing list