[jboss-svn-commits] JBL Code SVN: r31257 - in labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src: main/java/org/drools/guvnor/client/decisiontable and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 27 11:33:23 EST 2010


Author: baunax
Date: 2010-01-27 11:33:21 -0500 (Wed, 27 Jan 2010)
New Revision: 31257

Added:
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java
Modified:
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableFlexTable.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableHorizontalPane.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionInsertColumn.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionSetColumn.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDTColumnConfig.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/HumanReadable.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/factPattern/PopupCreator.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/SuggestionCompletionCache.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/DataInputWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/ScenarioWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFactWidget.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RuleAsset.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/FactTypeBrowser.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java
Log:
merge with https://svn.jboss.org/repos/labs/labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableFlexTable.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableFlexTable.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableFlexTable.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -15,10 +15,8 @@
  * limitations under the License.
  */
 
-
-
 import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.List;
 
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.Widget;
@@ -26,20 +24,14 @@
 public class DirtyableFlexTable extends FlexTable implements DirtyableContainer {
     
     private int length; 
-    private ArrayList list = new ArrayList();
+    private List<Pair> list = new ArrayList<Pair>();
 
     public boolean hasDirty() {
-        
-        Pair coordinates;
-        Widget element;
-        
-        for ( Iterator iter = list.iterator(); iter.hasNext(); ) {
-            coordinates = (Pair) iter.next();
-            element =  (Widget) getWidget( coordinates.getRow(), coordinates.getColumn() );
-            if (element instanceof DirtyableWidget) 
-                if ( ((DirtyableWidget) element).isDirty() ) return true;
-            if (element instanceof DirtyableContainer)
-                if ( ((DirtyableContainer) element).hasDirty()) return true;
+    	for (Pair coord : list) {
+            Widget element = getWidget( coord.getRow(), coord.getColumn() );
+            if ((element instanceof DirtyableWidget && ((DirtyableWidget) element).isDirty()) ||
+            		(element instanceof DirtyableContainer && ((DirtyableContainer) element).hasDirty()))
+                return true;
         }
         return false;
     }
@@ -47,9 +39,9 @@
     public void setWidget(int row, int column , Widget arg2) {
         super.setWidget( row, column, arg2 );
         
-        if (( arg2 instanceof IDirtyable ))  {
-            list.add( length++, new Pair(row ,column) );
-        }
+		if (arg2 instanceof IDirtyable) {
+			list.add(length++, new Pair(row, column));
+		}
     }
 
 }
@@ -70,7 +62,4 @@
     public int getRow() {
         return row;
     }
-    
-    
-    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableHorizontalPane.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableHorizontalPane.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/common/DirtyableHorizontalPane.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -25,17 +25,16 @@
  */
 
 public class DirtyableHorizontalPane extends HorizontalPanel implements DirtyableContainer {
-    public boolean hasDirty() {
-        
+
+	public boolean hasDirty() {
         int widNumber = getWidgetCount();
         Widget element;
         
         for ( int i = 0; i < widNumber; i++ ) {
             element =  (Widget) getWidget(i);
-            if (element instanceof DirtyableWidget) 
-                if ( ((DirtyableWidget) element).isDirty() ) return true;
-            if (element instanceof DirtyableContainer)
-                if ( ((DirtyableContainer) element).hasDirty()) return true;
+            if ((element instanceof DirtyableWidget && ((DirtyableWidget) element).isDirty()) || 
+            		(element instanceof DirtyableContainer && ((DirtyableContainer) element).hasDirty())) 
+                return true;
         }
         return false;
     }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionInsertColumn.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionInsertColumn.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionInsertColumn.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -261,8 +261,8 @@
         final FormStylePopup pop = new FormStylePopup();
         pop.setTitle( constants.NewFactSelectTheType() );
         final ListBox types = new ListBox();
-        for ( int i = 0; i < sce.factTypes.length; i++ ) {
-            types.addItem( sce.factTypes[i] );
+        for ( int i = 0; i < sce.getFactTypes().length; i++ ) {
+            types.addItem( sce.getFactTypes()[i] );
         }
         pop.addAttribute( constants.FactType(),
                           types );

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionSetColumn.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionSetColumn.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/ActionSetColumn.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -226,8 +226,8 @@
     }
 
     private String getFactType() {
-        if ( sce.globalTypes.containsKey( editingCol.boundName ) ) {
-            return sce.globalTypes.get( editingCol.boundName );
+        if ( sce.isGlobalVariable( editingCol.boundName ) ) {
+            return sce.getGlobalVariable( editingCol.boundName );
         }
         return getFactType( this.editingCol.boundName );
     }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDTColumnConfig.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDTColumnConfig.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDTColumnConfig.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -436,8 +436,8 @@
         final FormStylePopup pop = new FormStylePopup();
         pop.setTitle( constants.CreateANewFactPattern() );
         final ListBox types = new ListBox();
-        for ( int i = 0; i < sce.factTypes.length; i++ ) {
-            types.addItem( sce.factTypes[i] );
+        for ( int i = 0; i < sce.getFactTypes().length; i++ ) {
+            types.addItem( sce.getFactTypes()[i] );
         }
         pop.addAttribute( constants.FactType(),
                           types );

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -1406,6 +1406,8 @@
     String ChooseOtherConditionType();
 
     String FreeFormDrl();
+    
+    String ExpressionEditor();
 
     String ConditionTypeButton();
 
@@ -1430,6 +1432,8 @@
 
     String AdvancedOptionsColon();
 
+    String AddFromConditionColon();
+
     String AddAnItemToACollection();
 
     String InsertANewFact();
@@ -1845,6 +1849,8 @@
 
     String clickToAddPatterns();
 
+    String clickToAddPattern();
+
     String ChangeFieldValuesOf0();
 
     String Retract0();
@@ -1871,6 +1877,8 @@
 
     String ThereIsAAn0();
 
+    String All0with();
+
     String AddFirstNewField();
 
     String ImportedDRLContainsNoNameForThePackage();
@@ -1932,6 +1940,10 @@
     String IncomingChanges();
 
     String From();
+
+    String FromAccumulate();
+
+    String FromCollect();
     
     String URLDocumentionDescription();
 

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties	2010-01-27 16:33:21 UTC (rev 31257)
@@ -617,6 +617,7 @@
 AddSubFieldConstraint=Add sub-field constraint
 MultipleConstraintsTip1=You can specify constraints that span multiple fields (and more). The results of all these constraints can be combined with a 'and' or an 'or' logically. You can also have other multiple field constraints nested inside these restrictions.
 AdvancedOptionsColon=Advanced options:
+AddFromConditionColon=Add From condition:
 AddANewFormulaStyleExpression=Add a new formula style expression
 VariableName=Variable name
 Add=Add
@@ -671,6 +672,7 @@
 Fact1=Fact
 ChooseOtherConditionType=Choose other condition type...
 FreeFormDrl=Free form drl
+ExpressionEditor=Expression editor
 ConditionTypeButton=Condition type
 ChooseDotDotDot=Choose...
 DSLSentence=DSL sentence
@@ -887,6 +889,7 @@
 PleaseEnterANameThatIsNotAlreadyUsedByAnotherPattern=Please enter a name that is not already used by another pattern.
 ThereIsAAn0With=There is a/an {0} with:
 ThereIsAAn0=There is a/an {0}
+All0with=All {0} with:
 AddFirstNewField=Add first new field.
 PleaseEnterANameThatIsNotAlreadyUsedByAnotherPattern=Please enter a name that is not already used by another pattern.
 ImportedDRLContainsNoNameForThePackage=Imported DRL contains no name for the package. Please name the package.
@@ -919,6 +922,8 @@
 RecentlyEdited=Recently Edited
 IncomingChanges=Incoming changes
 From=From
+FromAccumulate=From Accumulate
+FromCollect=From Collect
 URLDocumentionDescription=Use this url to download package documentation PDF.
 URLForDocumention=URL for package documentation:
 CanNotMoveColumnsFromOneTypeGroupToAnother=Can not move columns from one type group to another
@@ -955,4 +960,5 @@
 CleaningLogMessages=Cleaning log messages...
 Clean=Clean
 MoveUp=Move up
-MoveDown=Move down
\ No newline at end of file
+MoveDown=Move down
+clickToAddPattern=click to add pattern...
\ No newline at end of file

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties	2010-01-27 16:33:21 UTC (rev 31257)
@@ -675,6 +675,7 @@
 Fact1=Hecho
 ChooseOtherConditionType=Seleccionar otro tipo de condici\u00F3n...
 FreeFormDrl=Free form drl
+ExpressionEditor=Editor de expresiones
 ConditionTypeButton=Tipo de condici\u00F3n
 ChooseDotDotDot=Seleccione...
 DSLSentence=Sentencia DSL
@@ -870,4 +871,24 @@
 SavedOK=Guardado exitosamente
 Actions=Acciones...
 ChangeSet=Change Set:
-URLToChangeSetForDeploymentAgents=URL que utilizar\u00E1 el agente de distribuci\u00F3n para un change set espec\u00EDfico.
\ No newline at end of file
+URLToChangeSetForDeploymentAgents=URL que utilizar\u00E1 el agente de distribuci\u00F3n para un change set espec\u00EDfico.
+AddFromConditionColon=Agregar condici\u00F3n FROM
+AddADiscussionComment=Agregar un comentario...
+BuiltInSelector=Selector Built-in
+FromAccumulate=From Accumulate
+BuildPackageUsingCustomSelectorSelector=Seleccionador Com\u00FAn
+BuildWholePackageTip=Esto construir\u00E1 el paquete entero
+FrozenAreas=\u00C1reas congeladas
+optionsRuleModeller=(opciones)
+NoteNewLinkedAsset=NOTA:
+Retract0=Retractar {0}
+TypeRestored=Restaurado
+MoveUp=Mover arriba
+FreezeAreasForEditing=Congelar \u00E1reas para la edici\u00F3n:
+URLDocumentionDescription=Utilice esta url para descargar el paquete de documentaci\u00F3n PDF.
+Severity=Severidad
+AreYouSureYouWantToRemoveThisBlockOfData=Est\u00E1 seguro que desea remover este bloque de datos?
+CreateInGlobalArea=Crear en el \u00E1rea global
+TypeArchived=Archivado
+TypeDeleted=Eliminado
+clickToAddPattern=click para agregar patr\u00F3n...
\ No newline at end of file

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/HumanReadable.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/HumanReadable.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/HumanReadable.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -23,6 +23,7 @@
 import java.util.Map;
 
 import com.google.gwt.core.client.GWT;
+import org.drools.guvnor.client.modeldriven.brl.FromCompositeFactPattern;
 
 /**
  * This contains some simple mappings between operators, conditional elements and the human readable
@@ -39,6 +40,7 @@
     public static Map ceDisplayMap = new HashMap();
     public static Map actionDisplayMap = new HashMap();
     public static final String[] CONDITIONAL_ELEMENTS = new String[] {"not", "exists", "or"};
+    public static final String[] FROM_CONDITIONAL_ELEMENTS = new String[] {"from","from accumulate","from collect"};
 
     private static Constants constants;
 
@@ -79,6 +81,10 @@
         ceDisplayMap.put( "exists", constants.ThereExists());
         ceDisplayMap.put( "or", constants.AnyOf1());
 
+        ceDisplayMap.put( "from", constants.From());
+        ceDisplayMap.put( "from accumulate", constants.FromAccumulate());
+        ceDisplayMap.put( "from collect", constants.FromCollect());
+
         actionDisplayMap.put( "assert", constants.Insert());
         actionDisplayMap.put( "assertLogical", constants.LogicallyInsert());
         actionDisplayMap.put( "retract", constants.Retract());

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -72,7 +72,7 @@
                 i++;
             }
 
-            this.variableClass = (String) completions.globalTypes.get( set.variable );
+            this.variableClass = (String) completions.getGlobalVariable( set.variable );
         } else {
             FactPattern pattern = mod.getModel().getBoundFact( set.variable );
             if ( pattern != null ) {
@@ -216,7 +216,7 @@
 
         String type = "";
         if ( this.completions.isGlobalVariable( this.model.variable ) ) {
-            type = (String) this.completions.globalTypes.get( this.model.variable );
+            type = (String) this.completions.getGlobalVariable( this.model.variable );
         } else {
             if ( this.modeller.getModel().getBoundFact( this.model.variable ) != null ) {
                 type = this.modeller.getModel().getBoundFact( this.model.variable ).factType;
@@ -273,9 +273,8 @@
 
     private Widget actionSelector(final ActionFieldFunction val) {
         final ListBox box = new ListBox();
-        final Map modMap = this.completions.modifiers;
         final String fieldType = val.type;
-        final String[] modifiers = (String[]) modMap.get( fieldType );
+        final String[] modifiers = this.completions.getModifiers( fieldType );
 
         if ( modifiers != null ) {
             for ( int i = 0; i < modifiers.length; i++ ) {

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -67,7 +67,7 @@
         layout.setStyleName( "model-builderInner-Background" );
         if (completions.isGlobalVariable( set.variable )) {
             this.fieldCompletions = completions.getFieldCompletionsForGlobalVariable( set.variable );
-            this.variableClass = (String) completions.globalTypes.get( set.variable );
+            this.variableClass = (String) completions.getGlobalVariable( set.variable );
         } else {
             FactPattern pattern = mod.getModel().getBoundFact( set.variable );
             if (pattern !=null){
@@ -204,7 +204,7 @@
 
     	String type = "";
     	if (this.completions.isGlobalVariable(this.model.variable)) {
-    		type = (String) this.completions.globalTypes.get(this.model.variable);
+    		type = (String) this.completions.getGlobalVariable(this.model.variable);
     	} else {
     		type = this.modeller.getModel().getBoundFact(this.model.variable).factType;
     		/*

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -41,16 +41,15 @@
  */
 public class CompositeFactPatternWidget extends DirtyableComposite {
 
-    private final SuggestionCompletionEngine completions;
-    private CompositeFactPattern             pattern;
-    private DirtyableFlexTable                             layout;
-    private RuleModeller                     modeller;
-    private Constants constants = ((Constants) GWT.create(Constants.class));
+    protected final SuggestionCompletionEngine completions;
+    protected CompositeFactPattern             pattern;
+    protected DirtyableFlexTable                             layout;
+    protected RuleModeller                     modeller;
+    protected Constants constants = ((Constants) GWT.create(Constants.class));
 
     public CompositeFactPatternWidget(RuleModeller modeller,
-                                      CompositeFactPattern pattern,
-                                      SuggestionCompletionEngine completions) {
-        this.completions = completions;
+                                      CompositeFactPattern pattern) {
+        this.completions = modeller.getSuggestionCompletions();
         this.pattern = pattern;
         this.modeller = modeller;
 
@@ -61,7 +60,7 @@
         initWidget( layout );
     }
 
-    private void doLayout() {
+    protected void doLayout() {
         this.layout.setWidget( 0,
                                0,
                                getCompositeLabel() );
@@ -77,7 +76,6 @@
             for ( int i = 0; i < facts.length; i++ ) {
                 vert.add( new FactPatternWidget( modeller,
                                                  facts[i],
-                                                 this.completions,
                                                  false ) );
             }
             this.layout.setWidget( 1,
@@ -86,7 +84,7 @@
         }
     }
 
-    private Widget getCompositeLabel() {
+    protected Widget getCompositeLabel() {
 
         ClickListener click =  new ClickListener() {
             public void onClick(Widget w) {
@@ -135,6 +133,4 @@
         return layout.hasDirty();
     }
 
-
-
 }
\ No newline at end of file

Copied: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java (from rev 31255, labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java)
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -0,0 +1,248 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.guvnor.client.common.DirtyableComposite;
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionField;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionFormLine;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionMethod;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionVariable;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.widgets.form.Label;
+
+public class ExpressionBuilder extends DirtyableComposite {
+	
+	private static final String FIElD_VALUE_PREFIX = "fl";
+	private static final String VARIABLE_VALUE_PREFIX = "va";
+	private static final String GLOBAL_COLLECTION_VALUE_PREFIX = "gc";
+	private static final String GLOBAL_VARIABLE_VALUE_PREFIX = "gv";
+	private static final String METHOD_VALUE_PREFIX = "mt";
+	
+	private Constants constants = ((Constants) GWT.create(Constants.class));
+	private FlowPanel panel = new FlowPanel();
+
+	private RuleModeller modeller;
+	private ExpressionFormLine expression;
+	
+	public ExpressionBuilder(RuleModeller modeller, ExpressionFormLine expression) {
+		super();
+		this.expression = expression;
+		this.modeller = modeller;
+		if (expression == null || expression.getText().isEmpty()) {
+			final ListBox startPoint = new ListBox();
+			panel.add(startPoint);
+			
+			startPoint.addItem(constants.ChooseDotDotDot(), "");
+			for (String gc : getCompletionEngine().getGlobalCollections()) {
+				startPoint.addItem(gc, GLOBAL_COLLECTION_VALUE_PREFIX + "." + gc);
+			}
+
+			for (String gv : getCompletionEngine().getGlobalVariables()) {
+				startPoint.addItem(gv, GLOBAL_VARIABLE_VALUE_PREFIX + "." + gv);
+			}
+
+			for (String v : getRuleModel().getBoundFacts()) {
+				startPoint.addItem(v, VARIABLE_VALUE_PREFIX + "." + v);
+			}
+
+			startPoint.setVisibleItemCount(1);
+			startPoint.addChangeListener(new ChangeListener() {
+				public void onChange(Widget sender) {
+					int index = startPoint.getSelectedIndex();
+					if (index > 0) {
+						ExpressionBuilder.this.makeDirty();
+						startPointChange(startPoint.getValue(index));
+					}
+				}
+			});
+		} else {
+			panel.add(new Label(expression.getText()));
+			panel.add(getWidgetForCurrentType());
+		}
+		initWidget(panel);
+	}
+
+	private void startPointChange(String value) {
+		panel.clear();
+		Widget w;
+		if (value.startsWith(VARIABLE_VALUE_PREFIX)) {
+			FactPattern fact = getRuleModel().getBoundFact(value.substring(VARIABLE_VALUE_PREFIX.length() + 1));
+			ExpressionVariable variable = new ExpressionVariable(fact);
+			expression.appendPart(variable);
+			w = getWidgetForCurrentType();
+			
+			panel.add(new Label(expression.getText()));
+			if (w != null) {
+				panel.add(w);
+			}
+		}
+		
+		
+//		panel.add(getWidgetFor(startPoint.getValue(index)));
+//		ExpressionBuilder.this.expression.appendText(v);
+	}
+	
+	private Widget getWidgetForCurrentType() {
+		String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+		if (factName != null) {
+			ListBox lb = new ListBox();
+			lb.setVisibleItemCount(1);
+			lb.addItem(constants.ChooseDotDotDot(), "");
+			for (Map.Entry<String, String> entry : getCompletionsForCurrentType()
+					.entrySet()) {
+				lb.addItem(entry.getKey(), entry.getValue());
+			}
+
+			lb.addChangeListener(new ChangeListener() {
+				public void onChange(Widget sender) {
+					ListBox box = (ListBox) sender;
+					panel.remove(box);
+					if (box.getSelectedIndex() > 0) {
+						onChangeSelection(box.getValue(box.getSelectedIndex()));
+					}
+				}
+			});
+			return lb;
+		} else if (isCollection()) {
+			ListBox lb = new ListBox();
+			lb.setVisibleItemCount(1);
+			lb.addItem(constants.ChooseDotDotDot(), "");
+			return lb;
+		}
+		return null;
+	}
+	
+	private boolean isCollection() {
+		String previousType = expression.getPreviousType();
+		String factName = getCompletionEngine().getFactNameFromType(previousType);
+		return true;
+	}
+
+	private void onChangeSelection(String value) {
+		int dotPos = value.indexOf('.');
+		String prefix = value.substring(0, dotPos);
+		String option = value.substring(dotPos + 1);
+		Widget w = null;
+		String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+		
+		if (FIElD_VALUE_PREFIX.equals(prefix)) {
+			String fieldClassName = getCompletionEngine().getFieldClassName(factName, option);
+			expression.appendPart(new ExpressionField(option, fieldClassName));
+		} else if (METHOD_VALUE_PREFIX.equals(prefix)) {
+			String methodType = getCompletionEngine().getMethodClassType(factName, option);
+			expression.appendPart(new ExpressionMethod(
+					option.substring(0, option.indexOf('(')), 
+					methodType));
+		} 
+		w = getWidgetForCurrentType();
+		
+		
+		panel.clear();
+		panel.add(new Label(expression.getText()));
+		if (w != null) {
+			panel.add(w);
+		}
+	}
+
+	private Map<String, String> getCompletionsForCurrentType() {
+		String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+		List<String> methodNames = getCompletionEngine().getMethodFullNames(factName);
+		Map<String, String> completions = new LinkedHashMap<String, String>();
+		
+		for (String field : getCompletionEngine().getFieldCompletions(factName)) {
+			boolean changed = false;
+			for (Iterator<String> i = methodNames.iterator(); i.hasNext();) {
+				String method = i.next();
+				if (method.startsWith(field)) {
+					completions.put(method, METHOD_VALUE_PREFIX + "." + method);
+					i.remove();
+					changed = true;
+				}
+			}
+			if (!changed) {
+				completions.put(field, FIElD_VALUE_PREFIX + "." + field);
+			}
+		}
+		return completions;
+	}
+
+	/*
+	protected Widget getWidgetFor(String value) {
+		if (value == null || value.isEmpty()) {
+			throw new IllegalArgumentException("value is empty");
+		}
+		if (value.startsWith(VARIABLE_VALUE_PREFIX)) {
+			FactPattern fact = getRuleModel().getBoundFact(value.substring(VARIABLE_VALUE_PREFIX.length() + 1));
+			
+			ListBox lb = new ListBox();
+			lb.setVisibleItemCount(1);
+			lb.addItem(constants.ChooseDotDotDot(), "");
+			
+			List<String> methodNames = getCompletionEngine().getMethodFullNames(fact.factType);
+			
+			for (String field : getCompletionEngine().getFieldCompletions(fact.factType)) {
+				boolean changed = false;
+				for (Iterator<String> i = methodNames.iterator(); i.hasNext();) {
+					String method = i.next();
+					if (method.startsWith(field)) {
+						lb.addItem(method, METHOD_VALUE_PREFIX + "." + method);
+						i.remove();
+						changed = true;
+					}
+				}
+				if (!changed) {
+					lb.addItem(field, FIElD_VALUE_PREFIX + "." + field);
+				}
+			}
+			
+			lb.addChangeListener(new ChangeListener() {
+				
+				public void onChange(Widget sender) {
+					ExpressionBuilder.this.makeDirty();
+					ListBox box = (ListBox) sender;
+					if (box.getSelectedIndex() > 0);
+					panel.remove(panel.getWidgetCount() - 1);
+					String v = box.getValue(box.getSelectedIndex());
+					panel.add(new Label(v.substring(v.indexOf('.') + 1)));
+					panel.add(getWidgetFor(v));
+				}
+			});
+			
+			return lb;
+		} else if (value.startsWith(GLOBAL_COLLECTION_VALUE_PREFIX)) {
+			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
+		} else if (value.startsWith(GLOBAL_VARIABLE_VALUE_PREFIX)) {
+			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
+		} else if (value.startsWith(METHOD_VALUE_PREFIX)) {
+			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
+		} else if (value.startsWith(FIElD_VALUE_PREFIX)) {
+			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
+		}
+		throw new IllegalArgumentException("value has invalidad prefix: '" + value + "'");
+	}*/
+
+	private RuleModel getRuleModel() {
+		return modeller.getModel();
+	}
+
+	private SuggestionCompletionEngine getCompletionEngine() {
+		return modeller.getSuggestionCompletions();
+	}
+
+	public String getCurrentType() {
+		return expression.getType();
+	}
+}

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -59,10 +59,17 @@
     private boolean                    bindable;
     private Constants constants = ((Constants) GWT.create(Constants.class));
 
+    private String customLabel;
+
     public FactPatternWidget(RuleModeller mod, IPattern p,
-            SuggestionCompletionEngine com, boolean canBind) {
+            boolean canBind) {
+        this(mod, p, null, canBind);
+    }
+
+    public FactPatternWidget(RuleModeller mod, IPattern p,
+            String customLabel, boolean canBind) {
         this.pattern = (FactPattern) p;
-        this.completions = com;
+        this.completions = mod.getSuggestionCompletions();
         this.modeller = mod;
         this.bindable = canBind;
 
@@ -77,6 +84,8 @@
         this.popupCreator.setModeller(modeller);
         this.popupCreator.setPattern(pattern);
 
+        this.customLabel = customLabel;
+
         layout.setWidget( 0, 0, getPatternLabel() );
         FlexCellFormatter formatter = layout.getFlexCellFormatter();
         formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_BOTTOM );
@@ -93,7 +102,7 @@
     }
 
     /**
-     * Render a hierarchy of constraints, hierarchy here means constaints that may
+     * Render a hierarchy of constraints, hierarchy here means constraints that may
      * themselves depend on members of constraint objects. With this code, the GUI
      * enables clicking rules of the form:
      *
@@ -324,6 +333,7 @@
         return pred;
     }
 
+
     /**
      * This returns the pattern label.
      */
@@ -336,13 +346,19 @@
 
         String patternName = (pattern.boundName != null) ? pattern.factType  + " <b>[" + pattern.boundName + "]</b>" : pattern.factType;
 
-        if (pattern.constraintList != null && pattern.constraintList.constraints.length > 0) {
-            String desc = Format.format(constants.ThereIsAAn0With(), patternName);
-            return  new ClickableLabel( anA(desc, patternName) , click, !modeller.lockLHS()) ;
-        } else {
-            String desc = Format.format(constants.ThereIsAAn0(), patternName);
-            return new ClickableLabel( anA(desc, patternName) , click, !modeller.lockLHS() );
+        String desc = this.getCustomLabel();
+        if (desc == null){
+            if (pattern.constraintList != null && pattern.constraintList.constraints.length > 0) {
+                desc = Format.format(constants.ThereIsAAn0With(), patternName);
+            } else {
+                desc = Format.format(constants.ThereIsAAn0(), patternName);
+            }
+            desc = anA(desc, patternName);
+        }else{
+            desc = Format.format(desc, patternName);
         }
+
+        return  new ClickableLabel( desc , click, !modeller.lockLHS()) ;
     }
 
     /** Change to an/a depending on context - only for english */
@@ -427,8 +443,17 @@
         return ab;
     }
 
+    public String getCustomLabel() {
+        return customLabel;
+    }
 
+    public void setCustomLabel(String customLabel) {
+        this.customLabel = customLabel;
+    }
 
+
+    
+
     public boolean isDirty() {
         return layout.hasDirty();
     }

Copied: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java (from rev 31255, labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java)
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -0,0 +1,290 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+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.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TabPanel;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+import org.drools.guvnor.client.common.ClickableLabel;
+import org.drools.guvnor.client.common.DirtyableFlexTable;
+import org.drools.guvnor.client.common.DirtyableVerticalPane;
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.modeldriven.HumanReadable;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromAccumulateCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCollectCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+
+/**
+ *
+ * @author esteban
+ */
+public class FromAccumulateCompositeFactPatternWidget extends FromCompositeFactPatternWidget {
+
+    public FromAccumulateCompositeFactPatternWidget(RuleModeller modeller,
+            FromAccumulateCompositeFactPattern pattern) {
+        super(modeller, pattern);
+    }
+
+    @Override
+    protected Widget getCompositeLabel() {
+
+        ClickListener leftPatternclick = new ClickListener() {
+
+            public void onClick(Widget w) {
+                showFactTypeSelector(w);
+            }
+        };
+
+        ClickListener sourcePatternClick = new ClickListener() {
+
+            public void onClick(Widget w) {
+                showSourcePatternSelector(w);
+            }
+        };
+
+
+        String lbl = "<div class='x-form-field'>" + HumanReadable.getCEDisplayName("from accumulate") + "</div>";
+
+        DirtyableFlexTable panel = new DirtyableFlexTable();
+
+
+        int r = 0;
+
+        if (pattern.getFactPattern() == null) {
+            panel.setWidget(r++, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPattern() + "</font>", leftPatternclick, !this.modeller.lockLHS()));
+        }
+
+
+        panel.setWidget(r++, 0, new HTML(lbl));
+
+        if (this.getFromAccumulatePattern().getSourcePattern() == null) {
+            panel.setWidget(r++, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPattern() + "</font>", sourcePatternClick, !this.modeller.lockLHS()));
+        } else {
+            DirtyableVerticalPane vert = new DirtyableVerticalPane();
+            IPattern rPattern = this.getFromAccumulatePattern().getSourcePattern();
+
+            Widget patternWidget = null;
+            if (rPattern instanceof FactPattern) {
+                patternWidget = new FactPatternWidget(modeller, rPattern, constants.All0with(), true);
+            } else if (rPattern instanceof FromAccumulateCompositeFactPattern) {
+                patternWidget = new FromAccumulateCompositeFactPatternWidget(modeller, (FromAccumulateCompositeFactPattern) rPattern);
+            } else if (rPattern instanceof FromCollectCompositeFactPattern) {
+                patternWidget = new FromCollectCompositeFactPatternWidget(modeller, (FromCollectCompositeFactPattern) rPattern);
+            } else if (rPattern instanceof FromCompositeFactPattern) {
+                patternWidget = new FromCompositeFactPatternWidget(modeller, (FromCompositeFactPattern) rPattern);
+            } else {
+                throw new IllegalArgumentException("Unsuported pattern " + rPattern + " for right side of FROM ACCUMULATE");
+            }
+
+            vert.add(patternWidget);
+            panel.setWidget(r++,
+                    0,
+                    vert);
+        }
+
+        TabPanel tPanel = new TabPanel();
+
+        DirtyableFlexTable codeTable = new DirtyableFlexTable();
+        int codeTableRow = 0;
+        int codeTableCol = 0;
+
+        codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='x-form-field'>Init:</div>"));
+        final TextBox initField = new TextBox();
+        initField.setTitle("init code");
+        initField.setText(getFromAccumulatePattern().getInitCode());
+        codeTable.setWidget(codeTableRow++, codeTableCol--, initField);
+
+        codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='x-form-field'>Action:</div>"));
+        final TextBox actionField = new TextBox();
+        actionField.setTitle("action code");
+        actionField.setText(getFromAccumulatePattern().getActionCode());
+        codeTable.setWidget(codeTableRow++, codeTableCol--, actionField);
+
+        codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='x-form-field'>Reverse:</div>"));
+        final TextBox reverseField = new TextBox();
+        reverseField.setTitle("reverse code.");
+        reverseField.setText(getFromAccumulatePattern().getReverseCode());
+        codeTable.setWidget(codeTableRow++, codeTableCol--, reverseField);
+
+        codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='x-form-field'>Result:</div>"));
+        final TextBox resultField = new TextBox();
+        resultField.setTitle("result code");
+        resultField.setText(getFromAccumulatePattern().getResultCode());
+        codeTable.setWidget(codeTableRow++, codeTableCol--, resultField);
+
+
+        //panel.setWidget(r++, 0, codeTable);
+
+        tPanel.add(codeTable, "Custom Code");
+
+        DirtyableFlexTable functionTable = new DirtyableFlexTable();
+
+        functionTable.setWidget(0, 0, new HTML("<div class='x-form-field'>Function:</div>"));
+        final TextBox functionField = new TextBox();
+        functionField.setTitle("function code");
+        functionField.setText(getFromAccumulatePattern().getFunction());
+        functionTable.setWidget(0, 1, functionField);
+
+//        panel.setWidget(r++, 0, functionTable);
+
+        tPanel.add(functionTable, "Function");
+
+        ChangeListener changeListener = new ChangeListener() {
+
+            public void onChange(Widget sender) {
+
+                TextBox senderTB = (TextBox) sender;
+                String code = senderTB.getText();
+
+                if (sender == initField) {
+                    getFromAccumulatePattern().setFunction(null);
+                    functionField.setText("");
+                    getFromAccumulatePattern().setInitCode(code);
+                } else if (sender == actionField) {
+                    getFromAccumulatePattern().setFunction(null);
+                    functionField.setText("");
+                    getFromAccumulatePattern().setActionCode(code);
+                } else if (sender == reverseField) {
+                    getFromAccumulatePattern().setFunction(null);
+                    functionField.setText("");
+                    getFromAccumulatePattern().setReverseCode(code);
+                } else if (sender == resultField) {
+                    getFromAccumulatePattern().setFunction(null);
+                    functionField.setText("");
+                    getFromAccumulatePattern().setResultCode(code);
+                } else if (sender == functionField) {
+                    getFromAccumulatePattern().clearCodeFields();
+                    initField.setText("");
+                    actionField.setText("");
+                    reverseField.setText("");
+                    resultField.setText("");
+                    getFromAccumulatePattern().setFunction(code);
+                }
+            }
+        };
+
+        initField.addChangeListener(changeListener);
+        actionField.addChangeListener(changeListener);
+        reverseField.addChangeListener(changeListener);
+        resultField.addChangeListener(changeListener);
+        functionField.addChangeListener(changeListener);
+
+
+        boolean useFunction = getFromAccumulatePattern().useFunctionOrCode().equals(FromAccumulateCompositeFactPattern.USE_FUNCTION);
+        
+        tPanel.selectTab(useFunction?1:0);
+
+//        functionTable.setVisible(useFunction);
+//        codeTable.setVisible(!useFunction);
+
+        panel.setWidget(r++, 0, tPanel);
+
+        return panel;
+    }
+
+    /**
+     * Pops up the fact selector.
+     */
+    @Override
+    protected void showFactTypeSelector(final Widget w) {
+        final ListBox box = new ListBox();
+        String[] facts = completions.getFactTypes();
+
+        box.addItem(constants.Choose());
+
+        for (int i = 0; i < facts.length; i++) {
+            box.addItem(facts[i]);
+        }
+        box.setSelectedIndex(0);
+
+        final FormStylePopup popup = new FormStylePopup();
+        popup.setTitle(constants.NewFactPattern());
+        popup.addAttribute(constants.chooseFactType(),
+                box);
+
+        box.addChangeListener(new ChangeListener() {
+
+            public void onChange(Widget w) {
+                pattern.setFactPattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        });
+
+        popup.show();
+    }
+
+    /**
+     * Pops up the fact selector.
+     */
+    protected void showSourcePatternSelector(final Widget w) {
+        final ListBox box = new ListBox();
+        String[] facts = completions.getFactTypes();
+
+        box.addItem(constants.Choose());
+        for (int i = 0; i < facts.length; i++) {
+            box.addItem(facts[i]);
+        }
+        box.setSelectedIndex(0);
+
+        final FormStylePopup popup = new FormStylePopup();
+        popup.setTitle(constants.NewFactPattern());
+        popup.addAttribute(constants.chooseFactType(),
+                box);
+
+        box.addChangeListener(new ChangeListener() {
+
+            public void onChange(Widget w) {
+                getFromAccumulatePattern().setSourcePattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        });
+
+
+
+
+        final Button fromBtn = new Button(constants.From());
+        final Button fromAccumulateBtn = new Button(constants.FromAccumulate());
+        final Button fromCollectBtn = new Button(constants.FromCollect());
+
+        ClickListener btnsClickListener = new ClickListener() {
+
+            public void onClick(Widget sender) {
+
+                if (sender == fromBtn) {
+                    getFromAccumulatePattern().setSourcePattern(new FromCompositeFactPattern());
+                } else if (sender == fromAccumulateBtn) {
+                    getFromAccumulatePattern().setSourcePattern(new FromAccumulateCompositeFactPattern());
+                } else if (sender == fromCollectBtn) {
+                    getFromAccumulatePattern().setSourcePattern(new FromCollectCompositeFactPattern());
+                } else {
+                    throw new IllegalArgumentException("Unknown sender: " + sender);
+                }
+
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        };
+
+        fromBtn.addClickListener(btnsClickListener);
+        fromAccumulateBtn.addClickListener(btnsClickListener);
+        fromCollectBtn.addClickListener(btnsClickListener);
+
+        popup.addAttribute("", fromBtn);
+        popup.addAttribute("", fromAccumulateBtn);
+        popup.addAttribute("", fromCollectBtn);
+
+        popup.show();
+    }
+
+    private FromAccumulateCompositeFactPattern getFromAccumulatePattern() {
+        return (FromAccumulateCompositeFactPattern) this.pattern;
+    }
+}

Copied: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java (from rev 31255, labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java)
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -0,0 +1,165 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+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.HTML;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Widget;
+import org.drools.guvnor.client.common.ClickableLabel;
+import org.drools.guvnor.client.common.DirtyableFlexTable;
+import org.drools.guvnor.client.common.DirtyableVerticalPane;
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.modeldriven.HumanReadable;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCollectCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+
+/**
+ *
+ * @author esteban
+ */
+public class FromCollectCompositeFactPatternWidget extends FromCompositeFactPatternWidget {
+
+    public FromCollectCompositeFactPatternWidget(RuleModeller modeller,
+            FromCollectCompositeFactPattern pattern) {
+        super(modeller, pattern);
+    }
+
+    @Override
+    protected Widget getCompositeLabel() {
+
+        ClickListener leftPatternclick = new ClickListener() {
+
+            public void onClick(Widget w) {
+                showFactTypeSelector(w);
+            }
+        };
+
+        ClickListener rightPatternclick = new ClickListener() {
+
+            public void onClick(Widget w) {
+                showRightPatternSelector(w);
+            }
+        };
+
+
+        String lbl = "<div class='x-form-field'>" + HumanReadable.getCEDisplayName("from collect") + "</div>";
+
+        DirtyableFlexTable panel = new DirtyableFlexTable();
+
+        int r = 0;
+
+        if (pattern.getFactPattern() == null) {
+            panel.setWidget(r++, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPatterns() + "</font>", leftPatternclick, !this.modeller.lockLHS()));
+        }
+
+
+        panel.setWidget(r++, 0, new HTML(lbl));
+
+        if (this.getFromCollectPattern().getRightPattern() == null) {
+            panel.setWidget(r++, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPatterns() + "</font>", rightPatternclick, !this.modeller.lockLHS()));
+        } else {
+            DirtyableVerticalPane vert = new DirtyableVerticalPane();
+            IPattern rPattern = this.getFromCollectPattern().getRightPattern();
+
+            Widget patternWidget = null;
+            if (rPattern instanceof FactPattern){
+                patternWidget = new FactPatternWidget(modeller, rPattern,constants.All0with(), false);
+            }else if (rPattern instanceof FromCompositeFactPattern){
+                patternWidget = new FromCompositeFactPatternWidget(modeller, (FromCompositeFactPattern)rPattern);
+            }else{
+                throw new IllegalArgumentException("Unsuported pattern "+rPattern+" for right side of FROM COLLECT");
+            }
+
+            vert.add(patternWidget);
+            panel.setWidget(r++,
+                    0,
+                    vert);
+        }
+
+        return panel;
+    }
+
+
+    @Override
+    protected void showFactTypeSelector(final Widget w) {
+
+        final FormStylePopup popup = new FormStylePopup();
+        popup.setTitle(constants.NewFactPattern());
+
+        final ListBox box = new ListBox();
+
+        box.addItem(constants.Choose());
+
+        box.addItem("java.util.ArrayList","java.util.ArrayList");
+        box.addItem("java.util.LinkedList","java.util.LinkedArrayList");
+        box.addItem("java.util.HashSet","java.util.HashSet");
+        box.addItem("java.util.LinkedHashSet","java.util.LinkedHashSet");
+        box.addItem("...");
+
+        box.addItem("TODO: Add Facts that extedns Collection");
+
+        box.setSelectedIndex( 0 );
+
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                pattern.setFactPattern( new FactPattern( box.getItemText( box.getSelectedIndex() ) ) );
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        } );
+
+        popup.addAttribute(constants.chooseFactType(),
+                            box );
+
+        popup.show();
+    }
+
+    /**
+     * Pops up the fact selector.
+     */
+    protected void showRightPatternSelector(final Widget w) {
+        final ListBox box = new ListBox();
+        String[] facts = completions.getFactTypes();
+
+        box.addItem(constants.Choose());
+        for (int i = 0; i < facts.length; i++) {
+            box.addItem(facts[i]);
+        }
+        box.setSelectedIndex(0);
+
+        final FormStylePopup popup = new FormStylePopup();
+        popup.setTitle(constants.NewFactPattern());
+        popup.addAttribute(constants.chooseFactType(),
+                box);
+
+        box.addChangeListener(new ChangeListener() {
+
+            public void onChange(Widget w) {
+                getFromCollectPattern().setRightPattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        });
+
+        final Button fromBtn = new Button(constants.From(), new ClickListener() {
+
+            public void onClick(Widget sender) {
+                getFromCollectPattern().setRightPattern(new FromCompositeFactPattern());
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        });
+
+        popup.addAttribute("",fromBtn );
+
+
+        popup.show();
+    }
+
+    private FromCollectCompositeFactPattern getFromCollectPattern() {
+        return (FromCollectCompositeFactPattern) this.pattern;
+    }
+}

Copied: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java (from rev 31255, labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java)
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -0,0 +1,129 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Widget;
+import org.drools.guvnor.client.common.ClickableLabel;
+import org.drools.guvnor.client.common.DirtyableComposite;
+import org.drools.guvnor.client.common.DirtyableFlexTable;
+import org.drools.guvnor.client.common.DirtyableVerticalPane;
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.modeldriven.HumanReadable;
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCompositeFactPattern;
+import org.drools.guvnor.client.messages.Constants;
+
+/**
+ *
+ * @author esteban
+ */
+public class FromCompositeFactPatternWidget extends DirtyableComposite {
+
+    protected final SuggestionCompletionEngine completions;
+    protected FromCompositeFactPattern pattern;
+    protected DirtyableFlexTable layout;
+    protected RuleModeller modeller;
+    protected Constants constants = ((Constants) GWT.create(Constants.class));
+
+    public FromCompositeFactPatternWidget(RuleModeller modeller,
+            FromCompositeFactPattern pattern) {
+        this.completions = modeller.getSuggestionCompletions();
+        this.pattern = pattern;
+        this.modeller = modeller;
+
+        this.layout = new DirtyableFlexTable();
+        this.layout.setStyleName("model-builderInner-Background");
+
+        doLayout();
+        initWidget(layout);
+    }
+
+    protected void doLayout() {
+
+        int r = 0;
+
+        if (pattern.getFactPattern() != null) {
+            DirtyableVerticalPane vert = new DirtyableVerticalPane();
+            FactPattern fact = pattern.getFactPattern();
+            if (fact != null) {
+                vert.add(new FactPatternWidget(modeller,
+                        fact,
+                        true));
+                this.layout.setWidget(r,
+                        0,
+                        vert);
+                r++;
+            }
+        }
+
+        this.layout.setWidget(r,
+                0,
+                getCompositeLabel());
+
+    }
+
+    protected Widget getCompositeLabel() {
+
+        ClickListener click = new ClickListener() {
+
+            public void onClick(Widget w) {
+                showFactTypeSelector(w);
+            }
+        };
+        String lbl = "<div class='x-form-field'>" + HumanReadable.getCEDisplayName("from") + "</div>";
+
+        DirtyableFlexTable panel = new DirtyableFlexTable();
+
+        int r = 0;
+
+        if (pattern.getFactPattern() == null) {
+            panel.setWidget(r, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPatterns() + "</font>", click, !this.modeller.lockLHS()));
+            r++;
+        }
+
+
+        panel.setWidget(r, 0, new HTML(lbl));
+        panel.setWidget(r, 1, new ExpressionBuilder(modeller, this.pattern.getExpression()));
+
+
+        return panel;
+    }
+
+    /**
+     * Pops up the fact selector.
+     */
+    protected void showFactTypeSelector(final Widget w) {
+        final ListBox box = new ListBox();
+        String[] facts = completions.getFactTypes();
+
+        box.addItem(constants.Choose());
+
+        for ( int i = 0; i < facts.length; i++ ) {
+            box.addItem( facts[i] );
+        }
+        box.setSelectedIndex( 0 );
+
+        final FormStylePopup popup = new FormStylePopup();
+        popup.setTitle(constants.NewFactPattern());
+        popup.addAttribute(constants.chooseFactType(),
+                            box );
+
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                pattern.setFactPattern( new FactPattern( box.getItemText( box.getSelectedIndex() ) ) );
+                modeller.refreshWidget();
+                popup.hide();
+            }
+        } );
+
+        popup.show();
+    }
+
+    public boolean isDirty() {
+        return layout.hasDirty();
+    }
+}

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -115,16 +115,12 @@
         layout.getColumnFormatter().setWidth(1, "87%");
         layout.getColumnFormatter().setWidth(2, "5%");
 
-
-
         layout.setWidget( 0, 0, new SmallLabel(constants.WHEN()) );
 
         if (!lockLHS()) {
             layout.setWidget( 0, 2, addPattern );
         }
 
-
-
         layout.setWidget( 1, 1, renderLhs(this.model) );
         layout.getFlexCellFormatter().setHorizontalAlignment(1, 1, HasHorizontalAlignment.ALIGN_LEFT);
         layout.getFlexCellFormatter().setVerticalAlignment(1, 1, HasVerticalAlignment.ALIGN_TOP);
@@ -352,7 +348,7 @@
      * Pops up the fact selector.
      */
     protected void showConditionSelector(final Widget w) {
-
+    	//XXX {bauna} add actions for LHS
         final FormStylePopup popup = new FormStylePopup();
         popup.setWidth(-1);
         popup.setTitle(constants.AddAConditionToTheRule());
@@ -361,15 +357,10 @@
 
         final ListBox choices = new ListBox(true);
 
-        
-
         //
         // The list of DSL sentences
         //
         if (completions.getDSLConditions().length > 0) {
-
-
-
             for(int i = 0; i < completions.getDSLConditions().length; i++ ) {
                 final DSLSentence sen = completions.getDSLConditions()[i];
                 String key = "DSL" + i;
@@ -381,7 +372,6 @@
                     }
                 });
             }
-
         }
 
         //
@@ -405,7 +395,6 @@
             }
         }
 
-
         //
         // The list of top level CEs
         //
@@ -422,15 +411,23 @@
                     popup.hide();
                 }
             });
+        }
 
+        String fces[]  = HumanReadable.FROM_CONDITIONAL_ELEMENTS;
 
+        choices.addItem("..................");
+        for ( int i = 0; i < fces.length; i++ ) {
+            final String ce = fces[i];
+            String key = "FCE" + ce;
+            choices.addItem( HumanReadable.getCEDisplayName( ce ) + " ...", key );
+            cmds.put(key, new Command() {
+                public void execute() {
+                    addNewFCE(ce);
+                    popup.hide();
+                }
+            });
         }
 
-
-
-
-
-
         if (ExplorerLayoutManager.shouldShow(Capabilities.SHOW_PACKAGE_VIEW)) {
             choices.addItem("..................");
             choices.addItem(constants.FreeFormDrl(), "FF");
@@ -441,9 +438,18 @@
                     popup.hide();
                 }
             });
+            
+            choices.addItem("..................");
+            choices.addItem(constants.ExpressionEditor(), "EE");
+            cmds.put("EE", new Command() {
+                public void execute() {
+                    model.addLhsItem(new ExpressionFormLine());
+                    refreshWidget();
+                    popup.hide();
+                }
+            });
         }
-
-
+        
         if (completions.getDSLConditions().length == 0 && facts.length == 0) {
         	popup.addRow(new HTML("<div class='highlight'>" + constants.NoModelTip() + "</div>")); //NON-NLS
         }
@@ -468,7 +474,6 @@
             }
         });
 
-
         HorizontalPanel hp = new HorizontalPanel();
         hp.add(choices);
         Button b = new Button(constants.OK());
@@ -488,18 +493,15 @@
                 choices.setFocus(true);
             }
         });
-
     }
 
-
     protected void addNewDSLLhs(DSLSentence sentence) {
         model.addLhsItem( sentence.copy() );
         refreshWidget();
-
     }
 
-
     protected void showActionSelector(Widget w) {
+    	//XXX {Bauna} add RHS Actions
         final FormStylePopup popup = new FormStylePopup();
         popup.setWidth(-1);
         popup.setTitle(constants.AddANewAction());
@@ -540,8 +542,8 @@
 
 
         //Do Set field (NOT modify)
-        for ( Iterator iter = vars.iterator(); iter.hasNext(); ) {
-            final String v = (String) iter.next();
+        for ( Iterator<String> iter = vars.iterator(); iter.hasNext(); ) {
+            final String v = iter.next();
 
             //varBox.addItem( v );
             choices.addItem(Format.format(constants.ChangeFieldValuesOf0(), v), "VAR" + v); //NON-NLS
@@ -568,8 +570,8 @@
 
 
         //RETRACT
-        for ( Iterator iter = vars.iterator(); iter.hasNext(); ) {
-            final String v = (String) iter.next();
+        for ( Iterator<String> iter = vars.iterator(); iter.hasNext(); ) {
+            final String v = iter.next();
             //retractBox.addItem( v );
             choices.addItem(Format.format(constants.Retract0(), v), "RET" + v); //NON-NLS
             cmds.put("RET" + v, new Command() {                                          //NON-NLS
@@ -581,8 +583,8 @@
         }
 
         //MODIFY
-        for ( Iterator iter = vars.iterator(); iter.hasNext(); ) {
-            final String v = (String) iter.next();
+        for ( Iterator<String> iter = vars.iterator(); iter.hasNext(); ) {
+            final String v = iter.next();
             // modifyBox.addItem( v );
 
             choices.addItem(Format.format(constants.Modify0(), v), "MOD" + v);    //NON-NLS
@@ -622,17 +624,12 @@
             });
         }
 
-
-
-
         choices.addItem("................");
-
-
         //now global collections
-        if (completions.globalCollections.length > 0 && vars.size() > 0) {
+        if (completions.getGlobalCollections().length > 0 && vars.size() > 0) {
             for (String bf : vars) {
-                for(int i = 0; i < completions.globalCollections.length; i++) {
-                    final String glob = completions.globalCollections[i];
+                for(int i = 0; i < completions.getGlobalCollections().length; i++) {
+                    final String glob = completions.getGlobalCollections()[i];
                     final String var = bf;
                     choices.addItem(Format.format(constants.Append0ToList1(), var, glob), "GLOBCOL" + glob + var); //NON-NLS
                     cmds.put("GLOBCOL" + glob + var, new Command() {                                                        //NON-NLS
@@ -649,7 +646,6 @@
             }
         }
 
-
         if (ExplorerLayoutManager.shouldShow(Capabilities.SHOW_PACKAGE_VIEW)) {
             choices.addItem(constants.AddFreeFormDrl(), "FF");  //NON-NLS
             cmds.put("FF", new Command() {                     //NON-NLS
@@ -671,9 +667,9 @@
 
             }
 
-                    //CALL methods
-            for ( Iterator iter = vars.iterator(); iter.hasNext(); ) {
-                final String v = (String) iter.next();
+            //CALL methods
+            for ( Iterator<String> iter = vars.iterator(); iter.hasNext(); ) {
+                final String v = iter.next();
 
                 choices.addItem(Format.format(constants.CallMethodOn0(), v ), "CALL" + v); //NON-NLS
                 cmds.put("CALL" + v, new Command() { //NON-NLS
@@ -684,8 +680,8 @@
                 });
             }
             //Do Set field (NOT modify)
-            for ( Iterator iter = vars2.iterator(); iter.hasNext(); ) {
-                final String v = (String) iter.next();
+            for ( Iterator<String> iter = vars2.iterator(); iter.hasNext(); ) {
+                final String v = iter.next();
 
                 choices.addItem(Format.format(constants.CallMethodOn0(), v), "CALL" + v); //NON-NLS
                 cmds.put("CALL" + v, new Command() {        //NON-NLS
@@ -694,10 +690,7 @@
                         popup.hide();
                     }
                 });
-
-
             }
-
         }
 
         HorizontalPanel hp = new HorizontalPanel();
@@ -729,13 +722,9 @@
         choices.setFocus(true);
     }
 
-
-
-
     protected void addModify(String itemText) {
         this.model.addRhsItem(new ActionUpdateField(itemText));
         refreshWidget();
-
     }
 
     protected void addNewDSLRhs(DSLSentence sentence) {
@@ -761,9 +750,22 @@
     protected void addNewCE(String s) {
         this.model.addLhsItem( new CompositeFactPattern(s) );
         refreshWidget();
-        
     }
 
+    protected void addNewFCE(String type) {
+        FromCompositeFactPattern p = null;
+        if (type.equals("from")){
+            p = new FromCompositeFactPattern();
+        }else if (type.equals("from accumulate")){
+            p = new FromAccumulateCompositeFactPattern();
+        }else if (type.equals("from collect")){
+            p = new FromCollectCompositeFactPattern();
+        }
+
+        this.model.addLhsItem(p);
+        refreshWidget();
+    }
+
     /**
      * Adds a fact to the model, and then refreshes the display.
      */
@@ -782,16 +784,28 @@
             IPattern pattern = model.lhs[i];
             Widget w = null;
             if (pattern instanceof FactPattern) {
-                w = new FactPatternWidget(this, pattern, completions, true) ;
+                w = new FactPatternWidget(this, pattern, true) ;
                 vert.add( wrapLHSWidget( model,
                               i,
                               w ) );
                 vert.add( spacerWidget() );
             } else if (pattern instanceof CompositeFactPattern) {
-                w = new CompositeFactPatternWidget(this, (CompositeFactPattern) pattern, completions) ;
+                w = new CompositeFactPatternWidget(this, (CompositeFactPattern) pattern) ;
                 vert.add( wrapLHSWidget( model, i, w ));
                 vert.add( spacerWidget() );
-            } else if (pattern instanceof DSLSentence) {
+            }else if(pattern instanceof FromAccumulateCompositeFactPattern){
+                w = new FromAccumulateCompositeFactPatternWidget(this, (FromAccumulateCompositeFactPattern) pattern) ;
+                vert.add( wrapLHSWidget( model, i, w ));
+                vert.add( spacerWidget() );
+            }else if(pattern instanceof FromCollectCompositeFactPattern){
+                w = new FromCollectCompositeFactPatternWidget(this, (FromCollectCompositeFactPattern) pattern) ;
+                vert.add( wrapLHSWidget( model, i, w ));
+                vert.add( spacerWidget() );
+            }else if(pattern instanceof FromCompositeFactPattern){
+                w = new FromCompositeFactPatternWidget(this, (FromCompositeFactPattern) pattern) ;
+                vert.add( wrapLHSWidget( model, i, w ));
+                vert.add( spacerWidget() );
+            }else if (pattern instanceof DSLSentence) {
                 //ignore this time
             } else if (pattern instanceof FreeFormLine){
             	final FreeFormLine ffl = (FreeFormLine) pattern;
@@ -805,13 +819,17 @@
             	});
             	vert.add(wrapLHSWidget(model, i, tb));
             	vert.add( spacerWidget() );
+            } else if (pattern instanceof ExpressionFormLine) {
+            	ExpressionFormLine efl = (ExpressionFormLine) pattern;
+            	ExpressionBuilder eb = new ExpressionBuilder(this, efl);
+            	vert.add(wrapLHSWidget(model, i, eb));
+            	vert.add( spacerWidget() );
             } else {
                 throw new RuntimeException("I don't know what type of pattern that is.");
             }
 
         }
 
-
         DirtyableVerticalPane dsls = new DirtyableVerticalPane();
         for ( int i = 0; i < model.lhs.length; i++ ) {
             IPattern pattern = model.lhs[i];

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/factPattern/PopupCreator.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/factPattern/PopupCreator.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/factPattern/PopupCreator.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -24,11 +24,11 @@
 import com.gwtext.client.util.Format;
 
 public class PopupCreator {
-    
-    private FactPattern                pattern;
+
+    private FactPattern pattern;
     private SuggestionCompletionEngine completions;
-    private RuleModeller               modeller;
-    private boolean                    bindable;
+    private RuleModeller modeller;
+    private boolean bindable;
     private Constants constants = ((Constants) GWT.create(Constants.class));
 
     /**
@@ -92,19 +92,20 @@
      */
     public void showBindFieldPopup(final Widget w, final SingleFieldConstraint con, String[] fields, final PopupCreator popupCreator) {
 
-        
+
         final FormStylePopup popup = new FormStylePopup();
         popup.setWidth(500);
         final HorizontalPanel vn = new HorizontalPanel();
         final TextBox varName = new TextBox();
         final Button ok = new Button(constants.Set());
-        vn.add( varName );
-        vn.add( ok );
+        vn.add(varName);
+        vn.add(ok);
 
-        ok.addClickListener( new ClickListener() {
+        ok.addClickListener(new ClickListener() {
+
             public void onClick(Widget w) {
                 String var = varName.getText();
-                if (modeller.isVariableNameUsed( var )) {
+                if (modeller.isVariableNameUsed(var)) {
                     Window.alert(Format.format(constants.TheVariableName0IsAlreadyTaken(), var));
                     return;
                 }
@@ -112,12 +113,13 @@
                 modeller.refreshWidget();
                 popup.hide();
             }
-        } );
-        popup.addAttribute(Format.format(constants.BindTheFieldCalled0ToAVariable(), con.fieldName), vn );
+        });
+        popup.addAttribute(Format.format(constants.BindTheFieldCalled0ToAVariable(), con.fieldName), vn);
         if (fields != null) {
             Button sub = new Button(constants.ShowSubFields());
             popup.addAttribute(Format.format(constants.ApplyAConstraintToASubFieldOf0(), con.fieldName), sub);
             sub.addClickListener(new ClickListener() {
+
                 public void onClick(Widget sender) {
                     popup.hide();
                     popupCreator.showPatternPopup(w, con.fieldType, con);
@@ -127,44 +129,46 @@
 
         popup.show();
     }
-    
+
     /**
      * This shows a popup for adding fields to a composite
      */
     public void showPatternPopupForComposite(Widget w, final CompositeFieldConstraint composite) {
-        final FormStylePopup popup = new FormStylePopup( "images/newex_wiz.gif", //NON-NLS
+        final FormStylePopup popup = new FormStylePopup("images/newex_wiz.gif", //NON-NLS
                 constants.AddFieldsToThisConstraint());
 
         final ListBox box = new ListBox();
-        box.addItem( "..." );
-        String[] fields = this.completions.getFieldCompletions( this.pattern.factType );
-        for ( int i = 0; i < fields.length; i++ ) {
-            box.addItem( fields[i] );
+        box.addItem("...");
+        String[] fields = this.completions.getFieldCompletions(this.pattern.factType);
+        for (int i = 0; i < fields.length; i++) {
+            box.addItem(fields[i]);
         }
 
-        box.setSelectedIndex( 0 );
+        box.setSelectedIndex(0);
 
-        box.addChangeListener( new ChangeListener() {
+        box.addChangeListener(new ChangeListener() {
+
             public void onChange(Widget w) {
-                composite.addConstraint( new SingleFieldConstraint( box.getItemText( box.getSelectedIndex() ) ) );
+                composite.addConstraint(new SingleFieldConstraint(box.getItemText(box.getSelectedIndex())));
                 modeller.refreshWidget();
                 popup.hide();
             }
-        } );
-        popup.addAttribute(constants.AddARestrictionOnAField(), box );
+        });
+        popup.addAttribute(constants.AddARestrictionOnAField(), box);
 
 
         final ListBox composites = new ListBox();
         composites.addItem("..."); //NON-NLS
-        composites.addItem(constants.AllOfAnd(), CompositeFieldConstraint.COMPOSITE_TYPE_AND );
-        composites.addItem(constants.AnyOfOr(), CompositeFieldConstraint.COMPOSITE_TYPE_OR );
-        composites.setSelectedIndex( 0 );
+        composites.addItem(constants.AllOfAnd(), CompositeFieldConstraint.COMPOSITE_TYPE_AND);
+        composites.addItem(constants.AnyOfOr(), CompositeFieldConstraint.COMPOSITE_TYPE_OR);
+        composites.setSelectedIndex(0);
 
-        composites.addChangeListener( new ChangeListener() {
+        composites.addChangeListener(new ChangeListener() {
+
             public void onChange(Widget w) {
                 CompositeFieldConstraint comp = new CompositeFieldConstraint();
-                comp.compositeJunctionType = composites.getValue( composites.getSelectedIndex() );
-                composite.addConstraint( comp );
+                comp.compositeJunctionType = composites.getValue(composites.getSelectedIndex());
+                composite.addConstraint(comp);
                 modeller.refreshWidget();
                 popup.hide();
             }
@@ -173,9 +177,9 @@
         InfoPopup infoComp = new InfoPopup(constants.MultipleFieldConstraints(), constants.MultipleConstraintsTip());
 
         HorizontalPanel horiz = new HorizontalPanel();
-        horiz.add( composites );
-        horiz.add( infoComp );
-        popup.addAttribute(constants.MultipleFieldConstraint(), horiz );
+        horiz.add(composites);
+        horiz.add(infoComp);
+        popup.addAttribute(constants.MultipleFieldConstraint(), horiz);
 
         popup.show();
 
@@ -187,42 +191,44 @@
     public void showPatternPopup(Widget w, final String factType, final FieldConstraint con) {
 
         String title = (con == null) ? Format.format(constants.ModifyConstraintsFor0(), factType) : constants.AddSubFieldConstraint();
-        final FormStylePopup popup = new FormStylePopup( "images/newex_wiz.gif",                                           //NON-NLS
-                                                          title );
+        final FormStylePopup popup = new FormStylePopup("images/newex_wiz.gif", //NON-NLS
+                title);
 
         final ListBox box = new ListBox();
-        box.addItem( "..." );
-        String[] fields = this.completions.getFieldCompletions( factType );
-        for ( int i = 0; i < fields.length; i++ ) {
-            box.addItem( fields[i] );
+        box.addItem("...");
+        String[] fields = this.completions.getFieldCompletions(factType);
+        for (int i = 0; i < fields.length; i++) {
+            box.addItem(fields[i]);
         }
 
-        box.setSelectedIndex( 0 );
+        box.setSelectedIndex(0);
 
-        box.addChangeListener( new ChangeListener() {
+        box.addChangeListener(new ChangeListener() {
+
             public void onChange(Widget w) {
-                String fieldName = box.getItemText( box.getSelectedIndex() );
+                String fieldName = box.getItemText(box.getSelectedIndex());
                 String qualifiedName = factType + "." + fieldName;
-                String fieldType = (String) completions.fieldTypes.get(qualifiedName);
-                pattern.addConstraint( new SingleFieldConstraint( fieldName, fieldType, con ) );
+                String fieldType = (String) completions.getFieldType(qualifiedName);
+                pattern.addConstraint(new SingleFieldConstraint(fieldName, fieldType, con));
                 modeller.refreshWidget();
                 popup.hide();
             }
-        } );
-        popup.addAttribute(constants.AddARestrictionOnAField(), box );
+        });
+        popup.addAttribute(constants.AddARestrictionOnAField(), box);
 
 
         final ListBox composites = new ListBox();
         composites.addItem("...");
-        composites.addItem(constants.AllOfAnd(), CompositeFieldConstraint.COMPOSITE_TYPE_AND );
-        composites.addItem(constants.AnyOfOr(), CompositeFieldConstraint.COMPOSITE_TYPE_OR );
-        composites.setSelectedIndex( 0 );
+        composites.addItem(constants.AllOfAnd(), CompositeFieldConstraint.COMPOSITE_TYPE_AND);
+        composites.addItem(constants.AnyOfOr(), CompositeFieldConstraint.COMPOSITE_TYPE_OR);
+        composites.setSelectedIndex(0);
 
-        composites.addChangeListener( new ChangeListener() {
+        composites.addChangeListener(new ChangeListener() {
+
             public void onChange(Widget w) {
                 CompositeFieldConstraint comp = new CompositeFieldConstraint();
-                comp.compositeJunctionType = composites.getValue( composites.getSelectedIndex() );
-                pattern.addConstraint( comp );
+                comp.compositeJunctionType = composites.getValue(composites.getSelectedIndex());
+                pattern.addConstraint(comp);
                 modeller.refreshWidget();
                 popup.hide();
             }
@@ -232,34 +238,35 @@
 
         HorizontalPanel horiz = new HorizontalPanel();
 
-        horiz.add( composites );
-        horiz.add( infoComp );
+        horiz.add(composites);
+        horiz.add(infoComp);
         if (con == null) {
-            popup.addAttribute(constants.MultipleFieldConstraint(), horiz );
+            popup.addAttribute(constants.MultipleFieldConstraint(), horiz);
         }
 
 
         //popup.addRow( new HTML("<hr/>") );
         if (con == null) {
-            popup.addRow( new SmallLabel("<i>" + constants.AdvancedOptionsColon() + "</i>") ); //NON-NLS
+            popup.addRow(new SmallLabel("<i>" + constants.AdvancedOptionsColon() + "</i>")); //NON-NLS
             final Button predicate = new Button(constants.NewFormula());
-            predicate.addClickListener( new ClickListener() {
+            predicate.addClickListener(new ClickListener() {
+
                 public void onClick(Widget w) {
                     SingleFieldConstraint con = new SingleFieldConstraint();
                     con.constraintValueType = SingleFieldConstraint.TYPE_PREDICATE;
-                    pattern.addConstraint( con );
+                    pattern.addConstraint(con);
                     modeller.refreshWidget();
                     popup.hide();
                 }
-            } );
-            popup.addAttribute(constants.AddANewFormulaStyleExpression(), predicate );
+            });
+            popup.addAttribute(constants.AddANewFormulaStyleExpression(), predicate);
 
-            doBindingEditor( popup );
+            doBindingEditor(popup);
         }
 
         popup.show();
     }
-    
+
     /**
      * This adds in (optionally) the editor for changing the bound variable name.
      * If its a bindable pattern, it will show the editor,
@@ -267,23 +274,24 @@
      * not be editable.
      */
     private void doBindingEditor(final FormStylePopup popup) {
-        if ( bindable && !(modeller.getModel().isBoundFactUsed( pattern.boundName )) ) {
+        if (bindable && !(modeller.getModel().isBoundFactUsed(pattern.boundName))) {
             HorizontalPanel varName = new HorizontalPanel();
             final TextBox varTxt = new TextBox();
             if (pattern.boundName == null) {
                 varTxt.setText("");
-            }else {
-                varTxt.setText( pattern.boundName );
+            } else {
+                varTxt.setText(pattern.boundName);
             }
 
-            varTxt.setVisibleLength( 6 );
-            varName.add( varTxt );
+            varTxt.setVisibleLength(6);
+            varName.add(varTxt);
 
-            Button bindVar = new Button( constants.Set() );
-            bindVar.addClickListener( new ClickListener() {
+            Button bindVar = new Button(constants.Set());
+            bindVar.addClickListener(new ClickListener() {
+
                 public void onClick(Widget w) {
                     String var = varTxt.getText();
-                    if (modeller.isVariableNameUsed( var )) {
+                    if (modeller.isVariableNameUsed(var)) {
                         Window.alert(Format.format(constants.TheVariableName0IsAlreadyTaken(), var));
                         return;
                     }
@@ -291,10 +299,10 @@
                     modeller.refreshWidget();
                     popup.hide();
                 }
-            } );
+            });
 
-            varName.add( bindVar );
-            popup.addAttribute(constants.VariableName(), varName );
+            varName.add(bindVar);
+            popup.addAttribute(constants.VariableName(), varName);
 
         }
     }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/SuggestionCompletionCache.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/SuggestionCompletionCache.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/SuggestionCompletionCache.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -94,6 +94,7 @@
 
 
     public void loadPackage(final String packageName, final Command command) {
+
         LoadingPopup.showMessage(Format.format(constants.InitialisingInfoFor0PleaseWait(), packageName));
         RepositoryServiceFactory.getService().loadSuggestionCompletionEngine( packageName, new GenericCallback<SuggestionCompletionEngine>() {
             public void onSuccess(SuggestionCompletionEngine engine) {

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/DataInputWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/DataInputWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/DataInputWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -104,7 +104,7 @@
 					}
 
 				}
-				String[] fields = (String[]) sce.fieldsForType.get(type);
+				String[] fields = (String[]) sce.getModelFields(type);
 				final FormStylePopup pop = new FormStylePopup(); //NON-NLS
                 pop.setTitle(constants.ChooseDotDotDot());
 				final ListBox b = new ListBox();

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -56,7 +56,7 @@
 
     private void refreshEditor() {
         String key = factType + "." + field.name;
-        String flType = sce.fieldTypes.get( key );
+        String flType = sce.getFieldType(key);
         panel.clear();
         if ( flType.equals( SuggestionCompletionEngine.TYPE_NUMERIC ) ) {
             final TextBox box = editableTextBox( callback,
@@ -75,7 +75,7 @@
                                          },
                                          DropDownData.create( c ) ) );
         } else {
-            String[] enums = sce.dataEnumLists.get( key );
+            String[] enums = sce.getDataEnumList( key );
             if ( enums != null ) {
                 panel.add( new EnumDropDown( field.value,
                                              new DropDownValueChanged() {

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/ScenarioWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/ScenarioWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/ScenarioWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -3,26 +3,18 @@
 import java.util.*;
 
 import org.drools.guvnor.client.common.*;
-import org.drools.guvnor.client.modeldriven.DropDownData;
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.guvnor.client.modeldriven.testing.ActivateRuleFlowGroup;
 import org.drools.guvnor.client.modeldriven.testing.ExecutionTrace;
 import org.drools.guvnor.client.modeldriven.testing.FactData;
-import org.drools.guvnor.client.modeldriven.testing.FieldData;
 import org.drools.guvnor.client.modeldriven.testing.Fixture;
 import org.drools.guvnor.client.modeldriven.testing.RetractFact;
 import org.drools.guvnor.client.modeldriven.testing.Scenario;
 import org.drools.guvnor.client.modeldriven.testing.VerifyFact;
-import org.drools.guvnor.client.modeldriven.testing.VerifyField;
 import org.drools.guvnor.client.modeldriven.testing.VerifyRuleFired;
-import org.drools.guvnor.client.modeldriven.ui.ActionValueEditor;
-import org.drools.guvnor.client.modeldriven.ui.ConstraintValueEditor;
 import org.drools.guvnor.client.packages.SuggestionCompletionCache;
-import org.drools.guvnor.client.rpc.BuilderResult;
 import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
 import org.drools.guvnor.client.rpc.RuleAsset;
-import org.drools.guvnor.client.rpc.ScenarioRunResult;
-import org.drools.guvnor.client.rpc.SingleScenarioResult;
 import org.drools.guvnor.client.ruleeditor.RuleViewer;
 import org.drools.guvnor.client.messages.Constants;
 
@@ -34,17 +26,12 @@
 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.Grid;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.KeyboardListener;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.ScrollPanel;
-import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
@@ -53,12 +40,12 @@
 
 public class ScenarioWidget extends Composite {
 
-	private String[] availableRules;
-	private SuggestionCompletionEngine sce;
-	private ChangeListener ruleSelectionCL;
-	RuleAsset asset;
-	VerticalPanel layout;
-	boolean showResults;
+    private String[] availableRules;
+    private SuggestionCompletionEngine sce;
+    private ChangeListener ruleSelectionCL;
+    RuleAsset asset;
+    VerticalPanel layout;
+    boolean showResults;
     private Constants constants = ((Constants) GWT.create(Constants.class));
 
     public ScenarioWidget(RuleAsset asset, RuleViewer viewer) {
@@ -66,22 +53,22 @@
     }
 
     public ScenarioWidget(RuleAsset asset) {
-		this.asset = asset;
-		this.layout = new VerticalPanel();
-		this.showResults = false;
+        this.asset = asset;
+        this.layout = new VerticalPanel();
+        this.showResults = false;
 
 
-    	this.sce = SuggestionCompletionCache.getInstance().getEngineFromCache(asset.metaData.packageName);
+        this.sce = SuggestionCompletionCache.getInstance().getEngineFromCache(asset.metaData.packageName);
 
-    	Scenario scenario = (Scenario) asset.content;
-    	if (scenario.fixtures.size() == 0) {
-    		scenario.fixtures.add(new ExecutionTrace());
-    	}
+        Scenario scenario = (Scenario) asset.content;
+        if (scenario.fixtures.size() == 0) {
+            scenario.fixtures.add(new ExecutionTrace());
+        }
 
-    	if (!asset.isreadonly) {
+        if (!asset.isreadonly) {
 //    		layout.setWidget(0, 0, new TestRunnerWidget(this, asset.metaData.packageName));
-    		layout.add(new TestRunnerWidget(this, asset.metaData.packageName));
-    	}
+            layout.add(new TestRunnerWidget(this, asset.metaData.packageName));
+        }
 
 
         renderEditor();
@@ -98,128 +85,128 @@
 
     }
 
+    void renderEditor() {
 
+        if (this.layout.getWidgetCount() == 2) {
+            this.layout.remove(1);
+        }
 
-	void renderEditor() {
 
-		if (this.layout.getWidgetCount() == 2) {
-			this.layout.remove(1);
-		}
-
-
-		final Scenario scenario = (Scenario) asset.content;
-		DirtyableFlexTable editorLayout = new DirtyableFlexTable();
-		editorLayout.clear();
-		editorLayout.setWidth("100%");
-		editorLayout.setStyleName("model-builder-Background");
+        final Scenario scenario = (Scenario) asset.content;
+        DirtyableFlexTable editorLayout = new DirtyableFlexTable();
+        editorLayout.clear();
+        editorLayout.setWidth("100%");
+        editorLayout.setStyleName("model-builder-Background");
 //		this.layout.setWidget(1, 0, editorLayout);
-		this.layout.add(editorLayout);
-		ScenarioHelper hlp = new ScenarioHelper();
-		List fixtures = hlp.lumpyMap(scenario.fixtures);
+        this.layout.add(editorLayout);
+        ScenarioHelper hlp = new ScenarioHelper();
+        List fixtures = hlp.lumpyMap(scenario.fixtures);
         List<ExecutionTrace> listExecutionTrace = new ArrayList<ExecutionTrace>();
         for (int i = 0; i < fixtures.size(); i++) {
-           final Object f = fixtures.get(i);
-			if (f instanceof ExecutionTrace) {
-                listExecutionTrace.add((ExecutionTrace)f);
+            final Object f = fixtures.get(i);
+            if (f instanceof ExecutionTrace) {
+                listExecutionTrace.add((ExecutionTrace) f);
             }
-         }
+        }
         int layoutRow = 1;
-        int executionTraceLine=0;
+        int executionTraceLine = 0;
         ExecutionTrace previousEx = null;
         for (int i = 0; i < fixtures.size(); i++) {
-			final Object f = fixtures.get(i);
-			if (f instanceof ExecutionTrace) {
-				previousEx = (ExecutionTrace) f;
-				HorizontalPanel h = new HorizontalPanel();
-				h.add(getNewExpectationButton(previousEx, scenario));
-				h.add(new SmallLabel(constants.EXPECT()));
-				editorLayout.setWidget(layoutRow, 0, h);
+            final Object f = fixtures.get(i);
+            if (f instanceof ExecutionTrace) {
+                previousEx = (ExecutionTrace) f;
+                HorizontalPanel h = new HorizontalPanel();
+                h.add(getNewExpectationButton(previousEx, scenario));
+                h.add(new SmallLabel(constants.EXPECT()));
+                editorLayout.setWidget(layoutRow, 0, h);
 
                 final ExecutionTrace et = (ExecutionTrace) previousEx;
                 Image del = new ImageButton("images/delete_item_small.gif", constants.DeleteItem(), new ClickListener() {
+
                     public void onClick(Widget w) {
-                         if ( Window.confirm(constants.AreYouSureYouWantToRemoveThisItem()) ) {
-                             scenario.removeExecutionTrace( et );
-                             renderEditor();
-                         }
+                        if (Window.confirm(constants.AreYouSureYouWantToRemoveThisItem())) {
+                            scenario.removeExecutionTrace(et);
+                            renderEditor();
+                        }
                     }
                 });
                 h.add(del);
                 executionTraceLine++;
-                if (executionTraceLine>= listExecutionTrace.size()){
-                    executionTraceLine= listExecutionTrace.size()-1;
+                if (executionTraceLine >= listExecutionTrace.size()) {
+                    executionTraceLine = listExecutionTrace.size() - 1;
                 }
-				editorLayout.setWidget(layoutRow, 1, new ExecutionWidget(previousEx, showResults));
-				//layout.setWidget(layoutRow, 2, getNewExpectationButton(previousEx, scenario, availableRules));
-				editorLayout.getFlexCellFormatter().setHorizontalAlignment(layoutRow, 2, HasHorizontalAlignment.ALIGN_LEFT);
+                editorLayout.setWidget(layoutRow, 1, new ExecutionWidget(previousEx, showResults));
+                //layout.setWidget(layoutRow, 2, getNewExpectationButton(previousEx, scenario, availableRules));
+                editorLayout.getFlexCellFormatter().setHorizontalAlignment(layoutRow, 2, HasHorizontalAlignment.ALIGN_LEFT);
 
-			} else if (f instanceof Map) {
-				HorizontalPanel h = new HorizontalPanel();
-                h.add(getNewDataButton(previousEx, scenario,listExecutionTrace.get(executionTraceLine)));
-				h.add(new SmallLabel(constants.GIVEN()));
+            } else if (f instanceof Map) {
+                HorizontalPanel h = new HorizontalPanel();
+                h.add(getNewDataButton(previousEx, scenario, listExecutionTrace.get(executionTraceLine)));
+                h.add(new SmallLabel(constants.GIVEN()));
 
 
-				editorLayout.setWidget(layoutRow, 0, h);
+                editorLayout.setWidget(layoutRow, 0, h);
 
-				layoutRow++;
-				Map given = (Map) f;
-				VerticalPanel vert = new VerticalPanel();
-		        for (Iterator iterator = given.entrySet().iterator(); iterator.hasNext();) {
-		            Map.Entry e = (Map.Entry) iterator.next();
-		            List itemList = (List) given.get(e.getKey());
-		            if ( e.getKey().equals( ScenarioHelper.RETRACT_KEY ) ) {
-                        vert.add( new RetractWidget( itemList,
-                                                     scenario ) );
-                    } else if ( e.getKey().equals( ScenarioHelper.ACTIVATE_RULE_FLOW_GROUP ) ) {
-                        vert.add( new ActivateRuleFlowWidget( itemList,
-                                                              scenario ) );
+                layoutRow++;
+                Map given = (Map) f;
+                VerticalPanel vert = new VerticalPanel();
+                for (Iterator iterator = given.entrySet().iterator(); iterator.hasNext();) {
+                    Map.Entry e = (Map.Entry) iterator.next();
+                    List itemList = (List) given.get(e.getKey());
+                    if (e.getKey().equals(ScenarioHelper.RETRACT_KEY)) {
+                        vert.add(new RetractWidget(itemList,
+                                scenario));
+                    } else if (e.getKey().equals(ScenarioHelper.ACTIVATE_RULE_FLOW_GROUP)) {
+                        vert.add(new ActivateRuleFlowWidget(itemList,
+                                scenario));
                     } else {
-                        vert.add( new DataInputWidget( (String) e.getKey(),
-                                                       itemList,
-                                                       false,
-                                                       scenario,
-                                                       sce,
-                                                       this,
-                                                       listExecutionTrace.get( executionTraceLine ) ) );
+                        vert.add(new DataInputWidget((String) e.getKey(),
+                                itemList,
+                                false,
+                                scenario,
+                                sce,
+                                this,
+                                listExecutionTrace.get(executionTraceLine)));
                     }
-		        }
+                }
 
 
-		        if (given.size() > 0) {
-		        	editorLayout.setWidget(layoutRow, 1, vert);
-		        } else {
-		        	editorLayout.setWidget(layoutRow, 1, new HTML("<i><small>" + constants.AddInputDataAndExpectationsHere() + "</small></i>"));
-		        }
-			} else {
-				List l = (List) f;
-				Fixture first = (Fixture) l.get(0);
-				if ( first instanceof VerifyFact ) {
-                    doVerifyFacts( l,
-                                   editorLayout,
-                                   layoutRow,
-                                   scenario,
-                                   listExecutionTrace.get( executionTraceLine ) );
-                } else if ( first instanceof VerifyRuleFired ) {
-                    editorLayout.setWidget( layoutRow,
-                                            1,
-                                            new VerifyRulesFiredWidget( l,
-                                                                        scenario,
-                                                                        showResults ) );
+                if (given.size() > 0) {
+                    editorLayout.setWidget(layoutRow, 1, vert);
+                } else {
+                    editorLayout.setWidget(layoutRow, 1, new HTML("<i><small>" + constants.AddInputDataAndExpectationsHere() + "</small></i>"));
                 }
+            } else {
+                List l = (List) f;
+                Fixture first = (Fixture) l.get(0);
+                if (first instanceof VerifyFact) {
+                    doVerifyFacts(l,
+                            editorLayout,
+                            layoutRow,
+                            scenario,
+                            listExecutionTrace.get(executionTraceLine));
+                } else if (first instanceof VerifyRuleFired) {
+                    editorLayout.setWidget(layoutRow,
+                            1,
+                            new VerifyRulesFiredWidget(l,
+                            scenario,
+                            showResults));
+                }
 
-			}
-			layoutRow++;
-		}
+            }
+            layoutRow++;
+        }
 
         //add more execution sections.
-		Button addExecute = new Button(constants.MoreDotDot());
-		addExecute.setTitle(constants.AddAnotherSectionOfDataAndExpectations());
-		addExecute.addClickListener(new ClickListener() {
-			public void onClick(Widget w) {
-				scenario.fixtures.add(new ExecutionTrace());
-				renderEditor();
-			}
-		});
+        Button addExecute = new Button(constants.MoreDotDot());
+        addExecute.setTitle(constants.AddAnotherSectionOfDataAndExpectations());
+        addExecute.addClickListener(new ClickListener() {
+
+            public void onClick(Widget w) {
+                scenario.fixtures.add(new ExecutionTrace());
+                renderEditor();
+            }
+        });
         editorLayout.setWidget(layoutRow, 0, addExecute);
         //layout.getFlexCellFormatter().setHorizontalAlignment(layoutRow, 1, HasHorizontalAlignment.ALIGN_CENTER);
         layoutRow++;
@@ -239,7 +226,7 @@
         VerticalPanel globalPanel = new VerticalPanel();
         for (Iterator iterator = globals.entrySet().iterator(); iterator.hasNext();) {
             Map.Entry e = (Map.Entry) iterator.next();
-            globalPanel.add(new DataInputWidget((String)e.getKey(), (List) globals.get(e.getKey()), true, scenario, sce, this,previousEx));
+            globalPanel.add(new DataInputWidget((String) e.getKey(), (List) globals.get(e.getKey()), true, scenario, sce, this, previousEx));
         }
         HorizontalPanel h = new HorizontalPanel();
         h.add(getNewGlobalButton(scenario));
@@ -248,338 +235,351 @@
 
         //layoutRow++;
         editorLayout.setWidget(layoutRow, 1, globalPanel);
-	}
+    }
 
+    private Widget getNewGlobalButton(final Scenario scenario) {
+        Image newItem = new ImageButton("images/new_item.gif", constants.AddANewGlobalToThisScenario(), new ClickListener() {
 
+            public void onClick(Widget w) {
 
+                final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.NewGlobal());
 
-	private Widget getNewGlobalButton(final Scenario scenario) {
-		Image newItem = new ImageButton("images/new_item.gif", constants.AddANewGlobalToThisScenario(), new ClickListener() {
-			public void onClick(Widget w) {
+                final ListBox factTypes = new ListBox();
 
-				final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.NewGlobal());
+                for (String g : sce.getGlobalVariables()) {
+                    factTypes.addItem(g);
+                }
 
-		        final ListBox factTypes = new ListBox();
-		        for (Iterator iterator = sce.globalTypes.keySet().iterator(); iterator
-						.hasNext();) {
-					String g = (String) iterator.next();
-					factTypes.addItem(g);
-				}
+                Button add = new Button("Add");
+                add.addClickListener(new ClickListener() {
 
-		        Button add = new Button("Add");
-		        add.addClickListener(new ClickListener() {
-					public void onClick(Widget w) {
-							String fn = factTypes.getItemText(factTypes.getSelectedIndex());
-							if (scenario.isFactNameExisting(fn)) {
-                                Window.alert(Format.format(constants.TheName0IsAlreadyInUsePleaseChooseAnotherName(), fn));
-							} else {
-								FactData ng = new FactData((String) sce.globalTypes.get(fn), fn, new ArrayList(), false);
-								scenario.globals.add(ng);
-								renderEditor();
-								pop.hide();
-							}
-					}
-				});
+                    public void onClick(Widget w) {
+                        String fn = factTypes.getItemText(factTypes.getSelectedIndex());
+                        if (scenario.isFactNameExisting(fn)) {
+                            Window.alert(Format.format(constants.TheName0IsAlreadyInUsePleaseChooseAnotherName(), fn));
+                        } else {
+                            FactData ng = new FactData((String) sce.getGlobalVariable(fn), fn, new ArrayList(), false);
+                            scenario.globals.add(ng);
+                            renderEditor();
+                            pop.hide();
+                        }
+                    }
+                });
 
-		        HorizontalPanel insertFact = new HorizontalPanel();
-		        insertFact.add(factTypes); insertFact.add(add);
-		        pop.addAttribute(constants.GlobalColon(), insertFact);
+                HorizontalPanel insertFact = new HorizontalPanel();
+                insertFact.add(factTypes);
+                insertFact.add(add);
+                pop.addAttribute(constants.GlobalColon(), insertFact);
 
-				pop.show();
-			}
-		});
+                pop.show();
+            }
+        });
 
-		return newItem;
-	}
+        return newItem;
+    }
 
+    /**
+     * This button gives a choice of modifying data, based on the positional context.
+     * @param previousEx
+     */
+    private Widget getNewDataButton(final ExecutionTrace previousEx, final Scenario scenario, final ExecutionTrace currentEx) {
+        Image newItem = new ImageButton("images/new_item.gif", constants.AddANewDataInputToThisScenario(), new ClickListener() {
 
-	/**
-	 * This button gives a choice of modifying data, based on the positional context.
-	 * @param previousEx
-	 */
-	private Widget getNewDataButton(final ExecutionTrace previousEx, final Scenario scenario,final ExecutionTrace currentEx) {
-		Image newItem = new ImageButton("images/new_item.gif", constants.AddANewDataInputToThisScenario(), new ClickListener() {
-			public void onClick(Widget w) {
+            public void onClick(Widget w) {
 
-				final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.NewInput());
+                final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.NewInput());
 
-		        final ListBox factTypes = new ListBox();
-		        for (int i = 0; i < sce.factTypes.length; i++) {
-		            factTypes.addItem(sce.factTypes[i]);
-		        }
-		        final TextBox factName = new TextBox();
-		        factName.setVisibleLength(5);
+                final ListBox factTypes = new ListBox();
+                for (int i = 0; i < sce.getFactTypes().length; i++) {
+                    factTypes.addItem(sce.getFactTypes()[i]);
+                }
+                final TextBox factName = new TextBox();
+                factName.setVisibleLength(5);
 
-		        Button add = new Button(constants.Add());
-		        add.addClickListener(new ClickListener() {
-					public void onClick(Widget w) {
-						String fn = ("" + factName.getText()).trim();
-						if (fn.equals("")
-								|| factName.getText().indexOf(' ') > -1) {
-							Window.alert(constants.YouMustEnterAValidFactName());
-						} else {
-							if (scenario.isFactNameExisting(fn)) {
+                Button add = new Button(constants.Add());
+                add.addClickListener(new ClickListener() {
+
+                    public void onClick(Widget w) {
+                        String fn = ("" + factName.getText()).trim();
+                        if (fn.equals("")
+                                || factName.getText().indexOf(' ') > -1) {
+                            Window.alert(constants.YouMustEnterAValidFactName());
+                        } else {
+                            if (scenario.isFactNameExisting(fn)) {
                                 Window.alert(Format.format(constants.TheFactName0IsAlreadyInUsePleaseChooseAnotherName(), fn));
-							} else {
-								scenario.insertBetween(previousEx, new FactData(factTypes.getItemText(factTypes.getSelectedIndex()), factName.getText(), new ArrayList(), false ));
-								renderEditor();
-								pop.hide();
-							}
-						}
-					}
-				});
+                            } else {
+                                scenario.insertBetween(previousEx, new FactData(factTypes.getItemText(factTypes.getSelectedIndex()), factName.getText(), new ArrayList(), false));
+                                renderEditor();
+                                pop.hide();
+                            }
+                        }
+                    }
+                });
 
-		        HorizontalPanel insertFact = new HorizontalPanel();
-		        insertFact.add(factTypes); insertFact.add(new SmallLabel(constants.FactName())); insertFact.add(factName); insertFact.add(add);
-		        pop.addAttribute(constants.InsertANewFact1(), insertFact);
+                HorizontalPanel insertFact = new HorizontalPanel();
+                insertFact.add(factTypes);
+                insertFact.add(new SmallLabel(constants.FactName()));
+                insertFact.add(factName);
+                insertFact.add(add);
+                pop.addAttribute(constants.InsertANewFact1(), insertFact);
 
-		        List varsInScope = scenario.getFactNamesInScope(currentEx, false);
-		        //now we do modifies & retracts
-		        if (varsInScope.size() > 0) {
-		        	final ListBox modifyFacts = new ListBox();
-			        for (int j = 0; j < varsInScope.size(); j++) { modifyFacts.addItem((String) varsInScope.get(j));}
-			        add = new Button(constants.Add());
-			        add.addClickListener(new ClickListener() {
-						public void onClick(Widget w) {
-							String fn = modifyFacts.getItemText(modifyFacts.getSelectedIndex());
-							String type  = (String) scenario.getVariableTypes().get(fn);
-							scenario.insertBetween(previousEx, new FactData(type, fn, new ArrayList(), true));
-							renderEditor();
-							pop.hide();
-						}
-					});
-			        HorizontalPanel modifyFact = new HorizontalPanel();
-			        modifyFact.add(modifyFacts); modifyFact.add(add);
-			        pop.addAttribute(constants.ModifyAnExistingFactScenario(), modifyFact);
+                List varsInScope = scenario.getFactNamesInScope(currentEx, false);
+                //now we do modifies & retracts
+                if (varsInScope.size() > 0) {
+                    final ListBox modifyFacts = new ListBox();
+                    for (int j = 0; j < varsInScope.size(); j++) {
+                        modifyFacts.addItem((String) varsInScope.get(j));
+                    }
+                    add = new Button(constants.Add());
+                    add.addClickListener(new ClickListener() {
 
-			        //now we do retracts
-		        	final ListBox retractFacts = new ListBox();
-			        for (int j = 0; j < varsInScope.size(); j++) { retractFacts.addItem((String) varsInScope.get(j));}
-			        add = new Button(constants.Add());
-			        add.addClickListener(new ClickListener() {
-						public void onClick(Widget w) {
-							String fn = retractFacts.getItemText(retractFacts.getSelectedIndex());
-							scenario.insertBetween(previousEx, new RetractFact(fn));
-							renderEditor();
-							pop.hide();
-						}
-					});
-			        HorizontalPanel retractFact = new HorizontalPanel();
-			        retractFact.add(retractFacts); retractFact.add(add);
-			        pop.addAttribute(constants.RetractAnExistingFactScenario(), retractFact);
+                        public void onClick(Widget w) {
+                            String fn = modifyFacts.getItemText(modifyFacts.getSelectedIndex());
+                            String type = (String) scenario.getVariableTypes().get(fn);
+                            scenario.insertBetween(previousEx, new FactData(type, fn, new ArrayList(), true));
+                            renderEditor();
+                            pop.hide();
+                        }
+                    });
+                    HorizontalPanel modifyFact = new HorizontalPanel();
+                    modifyFact.add(modifyFacts);
+                    modifyFact.add(add);
+                    pop.addAttribute(constants.ModifyAnExistingFactScenario(), modifyFact);
 
+                    //now we do retracts
+                    final ListBox retractFacts = new ListBox();
+                    for (int j = 0; j < varsInScope.size(); j++) {
+                        retractFacts.addItem((String) varsInScope.get(j));
+                    }
+                    add = new Button(constants.Add());
+                    add.addClickListener(new ClickListener() {
 
-		        }
+                        public void onClick(Widget w) {
+                            String fn = retractFacts.getItemText(retractFacts.getSelectedIndex());
+                            scenario.insertBetween(previousEx, new RetractFact(fn));
+                            renderEditor();
+                            pop.hide();
+                        }
+                    });
+                    HorizontalPanel retractFact = new HorizontalPanel();
+                    retractFact.add(retractFacts);
+                    retractFact.add(add);
+                    pop.addAttribute(constants.RetractAnExistingFactScenario(), retractFact);
 
-		        // Activate rule flows
-		        final TextBox ruleFlowName = new TextBox();
-		        final HorizontalPanel settingsPanel = new HorizontalPanel();
-		        settingsPanel.add( ruleFlowName);
-		        
-		        add = new Button( constants.Add() );
-                                                 add.addClickListener( new ClickListener() {
-                                                     public void onClick(Widget w) {
-                                                         scenario.insertBetween( previousEx,
-                                                                                 new ActivateRuleFlowGroup( ruleFlowName.getText() ) );
+
+                }
+
+                // Activate rule flows
+                final TextBox ruleFlowName = new TextBox();
+                final HorizontalPanel settingsPanel = new HorizontalPanel();
+                settingsPanel.add(ruleFlowName);
+
+                add = new Button(constants.Add());
+                add.addClickListener(new ClickListener() {
+
+                    public void onClick(Widget w) {
+                        scenario.insertBetween(previousEx,
+                                new ActivateRuleFlowGroup(ruleFlowName.getText()));
 //                                                                                 new RetractFact( ruleFlowName.getText() ) );
-                                                         renderEditor();
-                                                         pop.hide();
-                                                     }
-                                                 } );
+                        renderEditor();
+                        pop.hide();
+                    }
+                });
 
-                settingsPanel.add( add );
-		        
-		        pop.addAttribute( "Activate rule flow group", settingsPanel );
-		        
+                settingsPanel.add(add);
 
-				pop.show();
+                pop.addAttribute("Activate rule flow group", settingsPanel);
 
-			}
-		});
 
-		return newItem;
-	}
+                pop.show();
 
+            }
+        });
 
+        return newItem;
+    }
 
-	private Widget getNewExpectationButton(final ExecutionTrace ex,
-			final Scenario sc) {
+    private Widget getNewExpectationButton(final ExecutionTrace ex,
+            final Scenario sc) {
 
-		Image add = new ImageButton("images/new_item.gif", constants.AddANewExpectation(), new ClickListener() {
-			public void onClick(Widget w) {
-				final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.NewExpectation());
+        Image add = new ImageButton("images/new_item.gif", constants.AddANewExpectation(), new ClickListener() {
 
-				Widget selectRule = getRuleSelectionWidget(asset.metaData.packageName, new RuleSelectionEvent()  {
+            public void onClick(Widget w) {
+                final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.NewExpectation());
 
-					public void ruleSelected(String name) {
-		                VerifyRuleFired vr = new VerifyRuleFired(name, null, new Boolean(true));
-		                sc.insertBetween(ex, vr);
-		                renderEditor();
-		                pop.hide();
-					}
+                Widget selectRule = getRuleSelectionWidget(asset.metaData.packageName, new RuleSelectionEvent() {
 
-				});
+                    public void ruleSelected(String name) {
+                        VerifyRuleFired vr = new VerifyRuleFired(name, null, new Boolean(true));
+                        sc.insertBetween(ex, vr);
+                        renderEditor();
+                        pop.hide();
+                    }
+                });
 
-				pop.addAttribute(constants.Rule(), selectRule);
+                pop.addAttribute(constants.Rule(), selectRule);
 
-				final ListBox facts = new ListBox();
-				List names = sc.getFactNamesInScope(ex, true);
-				for (Iterator iterator = names.iterator(); iterator.hasNext();) {
-					facts.addItem((String) iterator.next());
-				}
+                final ListBox facts = new ListBox();
+                List names = sc.getFactNamesInScope(ex, true);
+                for (Iterator iterator = names.iterator(); iterator.hasNext();) {
+                    facts.addItem((String) iterator.next());
+                }
 
-				Button ok = new Button(constants.Add());
-				ok.addClickListener(new ClickListener() {
-					public void onClick(Widget w) {
-						String factName = facts.getItemText(facts.getSelectedIndex());
-						sc.insertBetween(ex, new VerifyFact(factName, new ArrayList()));
-						renderEditor();
-						pop.hide();
-					}
-				});
+                Button ok = new Button(constants.Add());
+                ok.addClickListener(new ClickListener() {
 
+                    public void onClick(Widget w) {
+                        String factName = facts.getItemText(facts.getSelectedIndex());
+                        sc.insertBetween(ex, new VerifyFact(factName, new ArrayList()));
+                        renderEditor();
+                        pop.hide();
+                    }
+                });
 
 
-				HorizontalPanel h = new HorizontalPanel();
-				h.add(facts);
-				h.add(ok);
-				pop.addAttribute(constants.FactValue(), h);
 
-				//add in list box for anon facts
-				final ListBox factTypes = new ListBox();
-				for (int i = 0; i < sce.factTypes.length; i++) {
-					String ft = sce.factTypes[i];
-					factTypes.addItem(ft);
-				}
+                HorizontalPanel h = new HorizontalPanel();
+                h.add(facts);
+                h.add(ok);
+                pop.addAttribute(constants.FactValue(), h);
 
-				ok = new Button(constants.Add());
-				ok.addClickListener(new ClickListener() {
-					public void onClick(Widget w) {
-						String t = factTypes.getItemText(factTypes.getSelectedIndex());
-						sc.insertBetween(ex, new VerifyFact(t, new ArrayList(), true));
-						renderEditor();
-						pop.hide();
-					}
+                //add in list box for anon facts
+                final ListBox factTypes = new ListBox();
+                for (int i = 0; i < sce.getFactTypes().length; i++) {
+                    String ft = sce.getFactTypes()[i];
+                    factTypes.addItem(ft);
+                }
 
-				});
+                ok = new Button(constants.Add());
+                ok.addClickListener(new ClickListener() {
 
-				h = new HorizontalPanel();
-				h.add(factTypes);
-				h.add(ok);
-				pop.addAttribute(constants.AnyFactThatMatches(), h);
+                    public void onClick(Widget w) {
+                        String t = factTypes.getItemText(factTypes.getSelectedIndex());
+                        sc.insertBetween(ex, new VerifyFact(t, new ArrayList(), true));
+                        renderEditor();
+                        pop.hide();
+                    }
+                });
 
+                h = new HorizontalPanel();
+                h.add(factTypes);
+                h.add(ok);
+                pop.addAttribute(constants.AnyFactThatMatches(), h);
 
-				pop.show();
-			}
-		});
 
+                pop.show();
+            }
+        });
 
-		return add;
-	}
 
+        return add;
+    }
 
+    private void doVerifyFacts(List l, FlexTable layout, int layoutRow, final Scenario scenario, ExecutionTrace executionTrace) {
+        VerticalPanel vert = new VerticalPanel();
+        for (Iterator iterator = l.iterator(); iterator.hasNext();) {
+            final VerifyFact f = (VerifyFact) iterator.next();
+            HorizontalPanel h = new HorizontalPanel();
+            h.add(new VerifyFactWidget(f, scenario, sce, executionTrace, showResults));
+            Image del = new ImageButton("images/delete_item_small.gif", constants.DeleteTheExpectationForThisFact(), new ClickListener() {     //NON-NLS
 
+                public void onClick(Widget w) {
+                    if (Window.confirm(constants.AreYouSureYouWantToRemoveThisExpectation())) {
+                        scenario.removeFixture(f);
+                        renderEditor();
+                    }
+                }
+            });
+            h.add(del);
+            vert.add(h);
+        }
+        layout.setWidget(layoutRow, 1, vert);
 
+    }
 
+    public Widget getRuleSelectionWidget(final String packageName, final RuleSelectionEvent selected) {
+        final HorizontalPanel h = new HorizontalPanel();
+        final TextBox t = new TextBox();
+        t.setTitle(constants.EnterRuleNameScenario());
+        h.add(t);
+        if (!(availableRules == null)) {
+            final ListBox availableRulesBox = new ListBox();
 
-	private void doVerifyFacts(List l, FlexTable layout, int layoutRow, final Scenario scenario,ExecutionTrace executionTrace) {
-		VerticalPanel vert = new VerticalPanel();
-		for (Iterator iterator = l.iterator(); iterator.hasNext();) {
-			final VerifyFact f = (VerifyFact) iterator.next();
-			HorizontalPanel h = new HorizontalPanel();
-			h.add(new VerifyFactWidget(f, scenario, sce,executionTrace,showResults));
-			Image del = new ImageButton("images/delete_item_small.gif", constants.DeleteTheExpectationForThisFact(), new ClickListener() {     //NON-NLS
-				public void onClick(Widget w) {
-					if (Window.confirm(constants.AreYouSureYouWantToRemoveThisExpectation())) {
-						scenario.removeFixture(f);
-						renderEditor();
-					}
-				}
-			});
-			h.add(del);
-			vert.add(h);
-		}
-		layout.setWidget(layoutRow, 1, vert);
+            availableRulesBox.addItem(constants.pleaseChoose1());
+            for (int i = 0; i < availableRules.length; i++) {
+                availableRulesBox.addItem(availableRules[i]);
+            }
+            availableRulesBox.setSelectedIndex(0);
+            availableRulesBox.removeChangeListener(ruleSelectionCL);
+            ruleSelectionCL = new ChangeListener() {
 
-	}
+                public void onChange(Widget w) {
+                    t.setText(availableRulesBox.getItemText(availableRulesBox.getSelectedIndex()));
+                }
+            };
 
-	public Widget getRuleSelectionWidget(final String packageName, final RuleSelectionEvent selected) {
-	       final HorizontalPanel h = new HorizontalPanel();
-	       final TextBox t = new TextBox();
-	       t.setTitle(constants.EnterRuleNameScenario());
-	       h.add(t);
-	       if (!(availableRules == null)) {
-	           final ListBox availableRulesBox = new ListBox();
+            availableRulesBox.addChangeListener(ruleSelectionCL);
+            h.add(availableRulesBox);
 
-	           availableRulesBox.addItem(constants.pleaseChoose1());
-	           for (int i = 0; i < availableRules.length; i++) {
-	               availableRulesBox.addItem(availableRules[i]);
-	           }
-	                      availableRulesBox.setSelectedIndex(0);
-	           availableRulesBox.removeChangeListener(ruleSelectionCL);
-	           ruleSelectionCL  = new ChangeListener() {
-	               public void onChange(Widget w) {
-	                  t.setText(availableRulesBox.getItemText(availableRulesBox.getSelectedIndex()));
-	               }
-	           };
+        } else {
 
-	           availableRulesBox.addChangeListener(ruleSelectionCL);
-	           h.add(availableRulesBox);
+            final Button showList = new Button(constants.showListButton());
+            h.add(showList);
+            showList.addClickListener(new ClickListener() {
 
-	       } else {
+                public void onClick(Widget w) {
+                    h.remove(showList);
+                    final Image busy = new Image("images/searching.gif"); //NON-NLS
+                    final Label loading = new SmallLabel(constants.loadingList1());
+                    h.add(busy);
+                    h.add(loading);
 
-	           final Button showList = new Button(constants.showListButton());
-	           h.add(showList);
-	           showList.addClickListener(new ClickListener() {
-	               public void onClick(Widget w) {
-	                   h.remove(showList);
-	                   final Image busy = new Image("images/searching.gif"); //NON-NLS
-	                   final Label loading = new SmallLabel(constants.loadingList1());
-	                   h.add(busy);
-	                   h.add(loading);
 
+                    DeferredCommand.addCommand(new Command() {
 
-	                   DeferredCommand.addCommand(new Command() {
-	                       public void execute() {
-	                          RepositoryServiceFactory.getService().listRulesInPackage(packageName, new GenericCallback<String[]>() {
-	                               public void onSuccess(String[] list) {
-	                                   availableRules = (list);
-	                                   final ListBox availableRulesBox = new ListBox();
-	                                                                     availableRulesBox.addItem(constants.pleaseChoose1());
-	                                   for (int i = 0; i < list.length; i++) {
-	                                       availableRulesBox.addItem(list[i]);
-	                                   }
-	                                   ruleSelectionCL  = new ChangeListener() {
-	                                       public void onChange(Widget w) {
-	                                          t.setText(availableRulesBox.getItemText(availableRulesBox.getSelectedIndex()));
-	                                       }
-	                                   };
-	                                   availableRulesBox.addChangeListener(ruleSelectionCL);
-	                                   availableRulesBox.setSelectedIndex(0);
-	                                   h.add(availableRulesBox);
-	                                   h.remove(busy);
-	                                   h.remove(loading);
-	                               }
-	                           });
-	                       }
-	                   });
+                        public void execute() {
+                            RepositoryServiceFactory.getService().listRulesInPackage(packageName, new GenericCallback<String[]>() {
 
+                                public void onSuccess(String[] list) {
+                                    availableRules = (list);
+                                    final ListBox availableRulesBox = new ListBox();
+                                    availableRulesBox.addItem(constants.pleaseChoose1());
+                                    for (int i = 0; i < list.length; i++) {
+                                        availableRulesBox.addItem(list[i]);
+                                    }
+                                    ruleSelectionCL = new ChangeListener() {
 
-	               }
-	           });
+                                        public void onChange(Widget w) {
+                                            t.setText(availableRulesBox.getItemText(availableRulesBox.getSelectedIndex()));
+                                        }
+                                    };
+                                    availableRulesBox.addChangeListener(ruleSelectionCL);
+                                    availableRulesBox.setSelectedIndex(0);
+                                    h.add(availableRulesBox);
+                                    h.remove(busy);
+                                    h.remove(loading);
+                                }
+                            });
+                        }
+                    });
 
-	       }
 
-	       Button ok = new Button(constants.OK());
-	       ok.addClickListener(new ClickListener() {
-	           public void onClick(Widget w) {
-	               selected.ruleSelected(t.getText());
-	           }
-	       });
-	       h.add(ok);
-	       return h;
-	   } 
+                }
+            });
 
+        }
+
+        Button ok = new Button(constants.OK());
+        ok.addClickListener(new ClickListener() {
+
+            public void onClick(Widget w) {
+                selected.ruleSelected(t.getText());
+            }
+        });
+        h.add(ok);
+        return h;
+    }
+
 //	public static Widget editableCell(final ValueChanged changeEvent, String factType, String fieldName, String initialValue, SuggestionCompletionEngine sce) {
 //		String key  = factType + "." + fieldName;
 //		String flType = sce.fieldTypes.get(key);
@@ -615,34 +615,27 @@
 //
 //		return tb;
 //	}
+    /**
+     * Use some CSS trickery to get a percent bar.
+     */
+    public static Widget getBar(String colour, int width, float percent) {
+        int pixels = (int) (width * (percent / 100));
+        String h = "<div class=\"smallish-progress-wrapper\" style=\"width: " + width + "px\">"
+                + "<div class=\"smallish-progress-bar\" style=\"width: " + pixels + "px; background-color: " + colour + ";\"></div>"
+                + "<div class=\"smallish-progress-text\" style=\"width: " + width + "px\">" + (int) percent
+                + "%</div></div>"; //NON-NLS
+        return new HTML(h);
 
+    }
 
-	/**
-	 * Use some CSS trickery to get a percent bar.
-	 */
-	public static Widget getBar(String colour, int width, float percent) {
-		int pixels = (int) (width * (percent / 100));
-		String h = "<div class=\"smallish-progress-wrapper\" style=\"width: " + width + "px\">" +
-					"<div class=\"smallish-progress-bar\" style=\"width: " + pixels + "px; background-color: " + colour + ";\"></div>" +
-					"<div class=\"smallish-progress-text\" style=\"width: " + width + "px\">" + (int)percent
-					+ "%</div></div>"; //NON-NLS
-		return new HTML(h);
+    public static Widget getBar(String colour, int width, int numerator, int denominator) {
+        int percent = 0;
 
-	}
-
-	public static Widget getBar(String colour, int width, int numerator, int denominator) {
-		 	int percent = 0;
-
-			if (denominator != 0) {
-				percent = (int) ((((float)denominator - (float)numerator) / (float)denominator) * 100);
-			}
-			return getBar(colour, width, percent);
-	}
-
-
-
-
-
+        if (denominator != 0) {
+            percent = (int) ((((float) denominator - (float) numerator) / (float) denominator) * 100);
+        }
+        return getBar(colour, width, percent);
+    }
 }
 
 

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFactWidget.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFactWidget.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFactWidget.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -52,7 +52,7 @@
         Image add = new ImageButton("images/add_field_to_fact.gif", constants.AddAFieldToThisExpectation(), new ClickListener() { //NON-NLS
 			public void onClick(Widget w) {
 
-				String[] fields = (String[]) sce.fieldsForType.get(type);
+				String[] fields = (String[]) sce.getModelFields(type);
 				final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", constants.ChooseAFieldToAdd()); //NON-NLS
 				final ListBox b = new ListBox();
 				for (int i = 0; i < fields.length; i++) {

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/VerifyFieldConstraintEditor.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -56,7 +56,7 @@
 
     private void refreshEditor() {
         String key = factType + "." + field.fieldName;
-        String flType = sce.fieldTypes.get( key );
+        String flType = sce.getFieldType( key );
         panel.clear();
         if ( flType.equals( SuggestionCompletionEngine.TYPE_NUMERIC ) ) {
             final TextBox box = editableTextBox( callback,
@@ -75,7 +75,7 @@
                                          },
                                          DropDownData.create( c ) ) );
         } else {
-            String[] enums = sce.dataEnumLists.get( key );
+            String[] enums = sce.getDataEnumList( key );
             if ( enums != null ) {
                 panel.add( new EnumDropDown( field.expected,
                                              new DropDownValueChanged() {

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RuleAsset.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RuleAsset.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RuleAsset.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -31,7 +31,7 @@
  */
 public class RuleAsset
     implements
-    Serializable {
+    Serializable, IsSerializable {
     
     public MetaData metaData;
     public PortableObject content;

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/FactTypeBrowser.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/FactTypeBrowser.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/FactTypeBrowser.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -28,14 +28,14 @@
 		panel.add(hp);
 
 		panel.add(tree);
-		if (sce.factTypes != null) {
-			for (String type : sce.factTypes) {
+		if (sce.getFactTypes() != null) {
+			for (String type : sce.getFactTypes()) {
 				TreeItem it = new TreeItem();
 				it.setHTML("<img src=\"images/class.gif\"/><small>" + type + "</small>");
 				it.setUserObject(type + "( )");
 				tree.addItem(it);
 
-				String[] fields = (String[]) sce.fieldsForType.get(type);
+				String[] fields = (String[]) sce.getModelFields(type);
 				if (fields != null) {
 					for (String field : fields) {
 						TreeItem fi = new TreeItem();

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -109,8 +109,8 @@
         SuggestionCompletionEngine eng = serv.loadSuggestionCompletionEngine( "com.billasurf.manufacturing.plant" );
         assertNotNull(eng);
 
-        assertEquals(2, eng.factTypes.length);
-        String[] fields = (String[]) eng.fieldsForType.get( "Board" );
+        assertEquals(2, eng.getFactTypes().length);
+        String[] fields = (String[]) eng.getModelFields( "Board" );
         assertTrue(fields.length >= 3);
 
         String[] globalVars = eng.getGlobalVariables();
@@ -118,7 +118,7 @@
         assertEquals("prs", globalVars[0]);
         assertTrue(eng.getFieldCompletionsForGlobalVariable( "prs" ).length >= 2);
 
-        fields = (String[]) eng.fieldsForType.get( "Person" );
+        fields = (String[]) eng.getModelFields( "Person" );
 
         assertTrue(fields.length >= 2);
 

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -1467,9 +1467,9 @@
         SuggestionCompletionEngine eng = impl
                 .loadSuggestionCompletionEngine(pkg.getName());
         assertNotNull(eng);
-        assertEquals(2, eng.factTypes.length);
+        assertEquals(2, eng.getFactTypes().length);
 
-        for (String ft : eng.factTypes) {
+        for (String ft : eng.getFactTypes()) {
             if (!(ft.equals("Board") || ft.equals("Whee"))) {
                 fail("Should be one of the above...");
             }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java	2010-01-27 15:11:01 UTC (rev 31256)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java	2010-01-27 16:33:21 UTC (rev 31257)
@@ -52,7 +52,7 @@
 
     public void testStripUnNeededFields() {
         SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
-        String[] result = loader.removeIrrelevantFields( new String[] {"foo", "toString", "class", "hashCode"} );
+        String[] result = loader.removeIrrelevantFields( Arrays.asList(new String[] {"foo", "toString", "class", "hashCode"} ));
         assertEquals(1, result.length);
         assertEquals("foo", result[0]);
     }
@@ -134,8 +134,7 @@
 
 
         SuggestionCompletionEngine eng = loader.getSuggestionEngine( item );
-        assertNotNull(eng.dataEnumLists);
-        assertEquals(Collections.EMPTY_MAP, eng.dataEnumLists);
+        assertFalse(eng.hasDataEnumLists());
         assertFalse(loader.hasErrors());
         assertEquals(1, eng.actionDSLSentences.length);
         assertEquals(1, eng.conditionDSLSentences.length);
@@ -159,7 +158,7 @@
         SuggestionCompletionEngine sce = loader.getSuggestionEngine( item );
 
         assertFalse(loader.hasErrors());
-        assertEquals(1, sce.dataEnumLists.size());
+        assertEquals(1, sce.getDataEnumListsSize());
 
 
         asset.updateContent( "goober boy" );



More information about the jboss-svn-commits mailing list