[jboss-svn-commits] JBL Code SVN: r32056 - in labs/jbossrules/soa_branches/BRMS-5.0.1: drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 12 08:06:10 EST 2010


Author: jervisliu
Date: 2010-03-12 08:06:08 -0500 (Fri, 12 Mar 2010)
New Revision: 32056

Modified:
   labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
   labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java
   labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
   labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/LiteralEditor.java
   labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
Log:
Merged BRMS-121(enums partially broken when using external functions) from trunk. 
Merge log:
1.replaced SuggestionCompletionEngine with 29015 version. 
  replaced SuggestionCompletionEngineTest with 27831 version. 
This is because SuggestionCompletionEngine has a previous version 27831: 
/labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java
2. replaced ConstraintValueEditor with 29015 version. 
   replaced LiteralEditor with 29008 version
NOTE: ConstraintValueEditor has a previous version 29008: 
/labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
/labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/LiteralEditor.java
3. as /labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java has too many previous versions, I only changed ServiceImplementation with the code change made to version 27008:
line 2214, added:
            if ( valuePairs[i] == null ) {
                return new String[0];
            }
4. changed ServiceImplementationTest with the code change made to version 27008:
line 2467, added 

	public void testLoadDropDownNoValuePairs() throws Exception {
	    ServiceImplementation serv = new ServiceImplementation();
	    String[] pairs = new String[]{null};
	    String expression = "['@{f1}', '@{f2}']";
	    String[] r = serv.loadDropDownExpression(pairs, expression);
	    
	    assertEquals(0, r.length);
	    
	}


Modified: labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2010-03-12 11:46:01 UTC (rev 32055)
+++ labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2010-03-12 13:06:08 UTC (rev 32056)
@@ -86,7 +86,7 @@
      * Contains a map of { TypeName.field : String[] } - where a list is valid
      * values to display in a drop down for a given Type.field combination.
      */
-    public Map<String, String[]>          dataEnumLists          = new HashMap();                                                                                              // TODO this is
+    public Map<String, String[]>          dataEnumLists          = new HashMap<String, String[]>();                                                                            // TODO this is
     // a PROBLEM as
     // its not
     // always
@@ -276,12 +276,14 @@
         if ( pat.constraintList != null && pat.constraintList.constraints != null ) {
             // we may need to check for data dependent enums
             Object _typeFields = dataEnumLookupFields.get( pat.factType + "." + field );
+
             if ( _typeFields instanceof String ) {
                 String typeFields = (String) _typeFields;
                 FieldConstraint[] cons = pat.constraintList.constraints;
 
-                String key = pat.factType + "." + field + "[";
+                String key = pat.factType + "." + field;
 
+                boolean addOpeninColumn = true;
                 String[] splitTypeFields = typeFields.split( "," );
                 for ( int j = 0; j < splitTypeFields.length; j++ ) {
                     String typeField = splitTypeFields[j];
@@ -292,6 +294,10 @@
                             SingleFieldConstraint sfc = (SingleFieldConstraint) con;
 
                             if ( sfc.fieldName.trim().equals( typeField.trim() ) ) {
+                                if ( addOpeninColumn ) {
+                                    key += "[";
+                                    addOpeninColumn = false;
+                                }
                                 key += typeField + "=" + sfc.value;
 
                                 if ( j != (splitTypeFields.length - 1) ) {
@@ -302,10 +308,12 @@
                     }
                 }
 
-                key += "]";
+                if ( !addOpeninColumn ) {
+                    key += "]";
+                }
 
                 return DropDownData.create( (String[]) this.dataEnumLists.get( key ) );
-            
+
             } else if ( _typeFields != null ) {
                 // these enums are calculated on demand, server side...
                 String[] fieldsNeeded = (String[]) _typeFields;
@@ -328,8 +336,11 @@
                         }
                     }
                 }
-                return DropDownData.create( queryString,
-                                            valuePairs );
+
+                if ( valuePairs.length > 0 && valuePairs[0] != null ) {
+                    return DropDownData.create( queryString,
+                                                valuePairs );
+                }
             }
         }
         return DropDownData.create( getEnumValues( pat.factType,
@@ -427,7 +438,7 @@
                     String predicate = key.substring( ix + 1,
                                                       key.indexOf( ']' ) );
                     if ( predicate.indexOf( '=' ) > -1 ) {
-                        
+
                         String[] bits = predicate.split( "," );
                         String typeField = "";
 
@@ -438,7 +449,7 @@
                                 typeField += ",";
                             }
                         }
- 
+
                         dataEnumLookupFields.put( factField,
                                                   typeField );
                     } else {
@@ -485,8 +496,8 @@
             for ( MethodInfo info : infos ) {
                 methodList.add( info.getName() );
             }
-        } 
+        }
 
         return methodList;
     }
-}
+}
\ No newline at end of file

Modified: labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java	2010-03-12 11:46:01 UTC (rev 32055)
+++ labs/jbossrules/soa_branches/BRMS-5.0.1/drools-compiler/src/test/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngineTest.java	2010-03-12 13:06:08 UTC (rev 32056)
@@ -18,18 +18,26 @@
         String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngineTest.NestedClass";
 
         SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
-        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList(), new ArrayList());
+         SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList(),
+                                                                        new ArrayList() );
 
-        assertEquals( "String", engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass", "name" ) );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass",
+                                           "name" ) );
     }
 
     public void testStringNonNumeric() {
         String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.Alert";
 
         SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
-        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList(),new ArrayList() );
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList(),
+                                                                        new ArrayList() );
 
-        assertEquals( SuggestionCompletionEngine.TYPE_STRING, engine.getFieldType( "Alert", "message" ) );
+        assertEquals( SuggestionCompletionEngine.TYPE_STRING,
+                      engine.getFieldType( "Alert",
+                                           "message" ) );
 
     }
 
@@ -40,29 +48,105 @@
 
         List enums = new ArrayList();
 
-        enums.add( "'Person.age' : [42, 43] \n 'Person.sex' : ['M', 'F']");
+        enums.add( "'Person.age' : [42, 43] \n 'Person.sex' : ['M', 'F']" );
         enums.add( "'Driver.sex' : ['M', 'F']" );
 
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList(),
+                                                                        new ArrayList(),
+                                                                        enums );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass",
+                                           "name" ) );
 
-        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList(), new ArrayList() , enums);
-        assertEquals( "String", engine.getFieldType( "SuggestionCompletionEngineTest$NestedClass", "name" ) );
-
-        assertEquals(3, engine.dataEnumLists.size());
+        assertEquals( 3,
+                      engine.dataEnumLists.size() );
         String[] items = (String[]) engine.dataEnumLists.get( "Person.age" );
-        assertEquals(2, items.length);
-        assertEquals("42", items[0]);
-        assertEquals("43", items[1]);
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "42",
+                      items[0] );
+        assertEquals( "43",
+                      items[1] );
 
-        items = engine.getEnums(new FactPattern("Person"), "age").fixedList;
-        assertEquals(2, items.length);
-        assertEquals("42", items[0]);
-        assertEquals("43", items[1]);
+        items = engine.getEnums( new FactPattern( "Person" ),
+                                 "age" ).fixedList;
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "42",
+                      items[0] );
+        assertEquals( "43",
+                      items[1] );
 
-        assertNull(engine.getEnums(new FactPattern("Nothing"), "age"));
+        assertNull( engine.getEnums( new FactPattern( "Nothing" ),
+                                     "age" ) );
 
+        assertEquals( null,
+                      engine.getEnums( new FactPattern( "Something" ),
+                                       "else" ) );
 
-        assertEquals(null, engine.getEnums(new FactPattern("Something"), "else"));
+    }
 
+    public void testDataEnums2() {
+        String pkg = "package org.test\n import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngineTest.Fact";
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+        List enums = new ArrayList();
+
+        enums.add( "'Fact.field1' : ['val1', 'val2'] 'Fact.field2' : ['val3', 'val4'] 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'] 'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']" );
+
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg,
+                                                                        new ArrayList(),
+                                                                        new ArrayList(),
+                                                                        enums );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$Fact",
+                                           "field1" ) );
+        assertEquals( "String",
+                      engine.getFieldType( "SuggestionCompletionEngineTest$Fact",
+                                           "field2" ) );
+
+        assertEquals( 4,
+                      engine.dataEnumLists.size() );
+
+        String[] items = (String[]) engine.dataEnumLists.get( "Fact.field2" );
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val3",
+                      items[0] );
+        assertEquals( "val4",
+                      items[1] );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "field2" );
+        pat.addConstraint( sfc );
+        items = engine.getEnums( pat,
+                                 "field2" ).fixedList;
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val3",
+                      items[0] );
+        assertEquals( "val4",
+                      items[1] );
+
+        items = (String[]) engine.dataEnumLists.get( "Fact.field1" );
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val1",
+                      items[0] );
+        assertEquals( "val2",
+                      items[1] );
+
+        items = engine.getEnums( new FactPattern( "Fact" ),
+                                 "field1" ).fixedList;
+        assertEquals( 2,
+                      items.length );
+        assertEquals( "val1",
+                      items[0] );
+        assertEquals( "val2",
+                      items[1] );
+
     }
 
     public void testCompletions() {
@@ -203,7 +287,9 @@
         assertEquals( 2,
                       c.length );
 
-        assertEquals("Numeric", com.getFieldType( "Person", "age" ));
+        assertEquals( "Numeric",
+                      com.getFieldType( "Person",
+                                        "age" ) );
 
     }
 
@@ -230,178 +316,248 @@
     }
 
     public void testSmartEnums() {
-    	final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
-    	sce.dataEnumLists = new HashMap();
-    	sce.dataEnumLists.put("Fact.type", new String[] {"sex", "colour"});
-    	sce.dataEnumLists.put("Fact.value[type=sex]", new String[] {"M", "F"});
-    	sce.dataEnumLists.put("Fact.value[type=colour]", new String[] {"RED", "WHITE", "BLUE"});
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.dataEnumLists = new HashMap();
+        sce.dataEnumLists.put( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        sce.dataEnumLists.put( "Fact.value[type=sex]",
+                               new String[]{"M", "F"} );
+        sce.dataEnumLists.put( "Fact.value[type=colour]",
+                               new String[]{"RED", "WHITE", "BLUE"} );
 
-    	FactPattern pat = new FactPattern("Fact");
-    	SingleFieldConstraint sfc = new SingleFieldConstraint("type");
-    	sfc.value = "sex";
-    	pat.addConstraint(sfc);
-    	String[] result = sce.getEnums(pat, "value").fixedList;
-    	assertEquals(2, result.length);
-    	assertEquals("M", result[0]);
-    	assertEquals("F", result[1]);
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "type" );
+        sfc.value = "sex";
+        pat.addConstraint( sfc );
+        String[] result = sce.getEnums( pat,
+                                        "value" ).fixedList;
+        assertEquals( 2,
+                      result.length );
+        assertEquals( "M",
+                      result[0] );
+        assertEquals( "F",
+                      result[1] );
 
+        pat = new FactPattern( "Fact" );
+        sfc = new SingleFieldConstraint( "type" );
+        sfc.value = "colour";
+        pat.addConstraint( sfc );
 
-    	pat = new FactPattern("Fact");
-    	sfc = new SingleFieldConstraint("type");
-    	sfc.value = "colour";
-    	pat.addConstraint(sfc);
+        result = sce.getEnums( pat,
+                               "value" ).fixedList;
+        assertEquals( 3,
+                      result.length );
+        assertEquals( "RED",
+                      result[0] );
+        assertEquals( "WHITE",
+                      result[1] );
+        assertEquals( "BLUE",
+                      result[2] );
 
-    	result = sce.getEnums(pat, "value").fixedList;
-    	assertEquals(3, result.length);
-    	assertEquals("RED", result[0]);
-    	assertEquals("WHITE", result[1]);
-    	assertEquals("BLUE", result[2]);
+        result = sce.getEnums( pat,
+                               "type" ).fixedList;
+        assertEquals( 2,
+                      result.length );
+        assertEquals( "sex",
+                      result[0] );
+        assertEquals( "colour",
+                      result[1] );
 
-    	result = sce.getEnums(pat, "type").fixedList;
-    	assertEquals(2, result.length);
-    	assertEquals("sex", result[0]);
-    	assertEquals("colour", result[1]);
+        ActionFieldValue[] vals = new ActionFieldValue[2];
+        vals[0] = new ActionFieldValue( "type",
+                                        "sex",
+                                        "blah" );
+        vals[1] = new ActionFieldValue( "value",
+                                        null,
+                                        "blah" );
+        result = sce.getEnums( "Fact",
+                               vals,
+                               "value" ).fixedList;
+        assertNotNull( result );
+        assertEquals( 2,
+                      result.length );
+        assertEquals( "M",
+                      result[0] );
+        assertEquals( "F",
+                      result[1] );
 
+        assertNull( sce.getEnums( "Nothing",
+                                  vals,
+                                  "value" ) );
 
-    	ActionFieldValue[] vals = new ActionFieldValue[2];
-    	vals[0] = new ActionFieldValue("type", "sex", "blah");
-    	vals[1] = new ActionFieldValue("value", null, "blah");
-    	result = sce.getEnums("Fact", vals, "value").fixedList;
-    	assertNotNull(result);
-    	assertEquals(2, result.length);
-    	assertEquals("M", result[0]);
-    	assertEquals("F", result[1]);
+    }
 
-    	assertNull(sce.getEnums("Nothing", vals, "value"));
-
-    }
-    
     public void testSmartEnumsDependingOfSeveralFieldsTwo() {
         final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
         sce.dataEnumLists = new HashMap();
-        sce.dataEnumLists.put("Fact.field1", new String[] {"a1", "a2"});
-        sce.dataEnumLists.put("Fact.field2", new String[] {"b1", "b2"});
-        sce.dataEnumLists.put("Fact.field3[field1=a1,field2=b1]", new String[] {"c1","c2","c3"});
-        sce.dataEnumLists.put("Fact.field4[field1=a1]", new String[] {"d1", "d2"});
-        
-        FactPattern pat = new FactPattern("Fact");
-        SingleFieldConstraint sfc = new SingleFieldConstraint("field1");
+        sce.dataEnumLists.put( "Fact.field1",
+                               new String[]{"a1", "a2"} );
+        sce.dataEnumLists.put( "Fact.field2",
+                               new String[]{"b1", "b2"} );
+        sce.dataEnumLists.put( "Fact.field3[field1=a1,field2=b1]",
+                               new String[]{"c1", "c2", "c3"} );
+        sce.dataEnumLists.put( "Fact.field4[field1=a1]",
+                               new String[]{"d1", "d2"} );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "field1" );
         sfc.value = "a1";
-        pat.addConstraint(sfc);
-        SingleFieldConstraint sfc2 = new SingleFieldConstraint("field2");
+        pat.addConstraint( sfc );
+        SingleFieldConstraint sfc2 = new SingleFieldConstraint( "field2" );
         sfc2.value = "b1";
-        pat.addConstraint(sfc2);
-        
-        String[] result = sce.getEnums(pat, "field3").fixedList;
-        assertEquals(3, result.length);
-        assertEquals("c1", result[0]);
-        assertEquals("c2", result[1]);
-        assertEquals("c3", result[2]);
+        pat.addConstraint( sfc2 );
 
+        String[] result = sce.getEnums( pat,
+                                        "field3" ).fixedList;
+        assertEquals( 3,
+                      result.length );
+        assertEquals( "c1",
+                      result[0] );
+        assertEquals( "c2",
+                      result[1] );
+        assertEquals( "c3",
+                      result[2] );
+
     }
-    
+
     public void testSmartEnumsDependingOfSeveralFieldsFive() {
         final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
         sce.dataEnumLists = new HashMap();
-        sce.dataEnumLists.put("Fact.field1", new String[] {"a1", "a2"});
-        sce.dataEnumLists.put("Fact.field2", new String[] {"b1", "b2"});
-        sce.dataEnumLists.put("Fact.field3", new String[] {"c1","c2","c3"});
-        sce.dataEnumLists.put("Fact.longerField4", new String[] {"d1", "d2"});
-        sce.dataEnumLists.put("Fact.field5", new String[] {"e1", "e2"});
-        sce.dataEnumLists.put("Fact.field6[field1=a1, field2=b2, field3=c3,longerField4=d1,field5=e2]", new String[] {"f1", "f2"});
-        
-        FactPattern pat = new FactPattern("Fact");
-        SingleFieldConstraint sfc = new SingleFieldConstraint("field1");
+        sce.dataEnumLists.put( "Fact.field1",
+                               new String[]{"a1", "a2"} );
+        sce.dataEnumLists.put( "Fact.field2",
+                               new String[]{"b1", "b2"} );
+        sce.dataEnumLists.put( "Fact.field3",
+                               new String[]{"c1", "c2", "c3"} );
+        sce.dataEnumLists.put( "Fact.longerField4",
+                               new String[]{"d1", "d2"} );
+        sce.dataEnumLists.put( "Fact.field5",
+                               new String[]{"e1", "e2"} );
+        sce.dataEnumLists.put( "Fact.field6[field1=a1, field2=b2, field3=c3,longerField4=d1,field5=e2]",
+                               new String[]{"f1", "f2"} );
+
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "field1" );
         sfc.value = "a1";
-        pat.addConstraint(sfc);
-        SingleFieldConstraint sfc2 = new SingleFieldConstraint("field2");
+        pat.addConstraint( sfc );
+        SingleFieldConstraint sfc2 = new SingleFieldConstraint( "field2" );
         sfc2.value = "b2";
-        pat.addConstraint(sfc2);
-        SingleFieldConstraint sfc3 = new SingleFieldConstraint("field3");
+        pat.addConstraint( sfc2 );
+        SingleFieldConstraint sfc3 = new SingleFieldConstraint( "field3" );
         sfc3.value = "c3";
-        pat.addConstraint(sfc3);
-        SingleFieldConstraint sfc4 = new SingleFieldConstraint("longerField4");
+        pat.addConstraint( sfc3 );
+        SingleFieldConstraint sfc4 = new SingleFieldConstraint( "longerField4" );
         sfc4.value = "d1";
-        pat.addConstraint(sfc4);
-        
-        assertNull( sce.getEnums(pat, "field6") );
+        pat.addConstraint( sfc4 );
 
-        SingleFieldConstraint sfc5 = new SingleFieldConstraint("field5");
+        assertNull( sce.getEnums( pat,
+                                  "field6" ) );
+
+        SingleFieldConstraint sfc5 = new SingleFieldConstraint( "field5" );
         sfc5.value = "e2";
-        pat.addConstraint(sfc5);
-        
-        String[] result2 = sce.getEnums(pat, "field6").fixedList;
-        assertEquals(2, result2.length);
-        assertEquals("f1", result2[0]);
-        assertEquals("f2", result2[1]);
+        pat.addConstraint( sfc5 );
+
+        String[] result2 = sce.getEnums( pat,
+                                         "field6" ).fixedList;
+        assertEquals( 2,
+                      result2.length );
+        assertEquals( "f1",
+                      result2[0] );
+        assertEquals( "f2",
+                      result2[1] );
     }
 
     public void testSmarterLookupEnums() {
-    	final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
-    	sce.dataEnumLists = new HashMap();
-    	sce.dataEnumLists.put("Fact.type", new String[] {"sex", "colour"});
-    	sce.dataEnumLists.put("Fact.value[f1, f2]", new String[] {"select something from database where x=@{f1} and y=@{f2}"});
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.dataEnumLists = new HashMap();
+        sce.dataEnumLists.put( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        sce.dataEnumLists.put( "Fact.value[f1, f2]",
+                               new String[]{"select something from database where x=@{f1} and y=@{f2}"} );
 
+        FactPattern fp = new FactPattern( "Fact" );
+        String[] drops = sce.getEnums( fp,
+                                       "type" ).fixedList;
+        assertEquals( 2,
+                      drops.length );
+        assertEquals( "sex",
+                      drops[0] );
+        assertEquals( "colour",
+                      drops[1] );
 
+        Map lookupFields = sce.loadDataEnumLookupFields();
+        assertEquals( 1,
+                      lookupFields.size() );
+        String[] flds = (String[]) lookupFields.get( "Fact.value" );
+        assertEquals( 2,
+                      flds.length );
+        assertEquals( "f1",
+                      flds[0] );
+        assertEquals( "f2",
+                      flds[1] );
 
-    	FactPattern fp = new FactPattern("Fact");
-    	String[] drops = sce.getEnums(fp, "type").fixedList;
-    	assertEquals(2, drops.length);
-    	assertEquals("sex", drops[0]);
-    	assertEquals("colour", drops[1]);
+        FactPattern pat = new FactPattern( "Fact" );
+        SingleFieldConstraint sfc = new SingleFieldConstraint( "f1" );
+        sfc.value = "f1val";
+        pat.addConstraint( sfc );
+        sfc = new SingleFieldConstraint( "f2" );
+        sfc.value = "f2val";
+        pat.addConstraint( sfc );
 
+        DropDownData dd = sce.getEnums( pat,
+                                        "value" );
+        assertNull( dd.fixedList );
+        assertNotNull( dd.queryExpression );
+        assertNotNull( dd.valuePairs );
 
-    	Map lookupFields = sce.loadDataEnumLookupFields();
-    	assertEquals(1, lookupFields.size());
-    	String[] flds = (String[]) lookupFields.get("Fact.value");
-    	assertEquals(2, flds.length);
-    	assertEquals("f1", flds[0]);
-    	assertEquals("f2", flds[1]);
+        assertEquals( 2,
+                      dd.valuePairs.length );
+        assertEquals( "select something from database where x=@{f1} and y=@{f2}",
+                      dd.queryExpression );
+        assertEquals( "f1=f1val",
+                      dd.valuePairs[0] );
+        assertEquals( "f2=f2val",
+                      dd.valuePairs[1] );
 
+        //and now for the RHS
+        ActionFieldValue[] vals = new ActionFieldValue[2];
+        vals[0] = new ActionFieldValue( "f1",
+                                        "f1val",
+                                        "blah" );
+        vals[1] = new ActionFieldValue( "f2",
+                                        "f2val",
+                                        "blah" );
+        dd = sce.getEnums( "Fact",
+                           vals,
+                           "value" );
+        assertNull( dd.fixedList );
+        assertNotNull( dd.queryExpression );
+        assertNotNull( dd.valuePairs );
+        assertEquals( 2,
+                      dd.valuePairs.length );
+        assertEquals( "select something from database where x=@{f1} and y=@{f2}",
+                      dd.queryExpression );
+        assertEquals( "f1=f1val",
+                      dd.valuePairs[0] );
+        assertEquals( "f2=f2val",
+                      dd.valuePairs[1] );
 
-    	FactPattern pat = new FactPattern("Fact");
-    	SingleFieldConstraint sfc = new SingleFieldConstraint("f1");
-    	sfc.value = "f1val";
-    	pat.addConstraint(sfc);
-    	sfc = new SingleFieldConstraint("f2");
-    	sfc.value = "f2val";
-    	pat.addConstraint(sfc);
-
-
-    	DropDownData dd = sce.getEnums(pat, "value");
-    	assertNull(dd.fixedList);
-    	assertNotNull(dd.queryExpression);
-    	assertNotNull(dd.valuePairs);
-
-    	assertEquals(2, dd.valuePairs.length);
-    	assertEquals("select something from database where x=@{f1} and y=@{f2}", dd.queryExpression);
-    	assertEquals("f1=f1val", dd.valuePairs[0]);
-    	assertEquals("f2=f2val", dd.valuePairs[1]);
-
-
-    	//and now for the RHS
-    	ActionFieldValue[] vals = new ActionFieldValue[2];
-    	vals[0] = new ActionFieldValue("f1", "f1val", "blah");
-    	vals[1] = new ActionFieldValue("f2", "f2val", "blah");
-    	dd = sce.getEnums("Fact", vals, "value");
-    	assertNull(dd.fixedList);
-    	assertNotNull(dd.queryExpression);
-    	assertNotNull(dd.valuePairs);
-    	assertEquals(2, dd.valuePairs.length);
-    	assertEquals("select something from database where x=@{f1} and y=@{f2}", dd.queryExpression);
-    	assertEquals("f1=f1val", dd.valuePairs[0]);
-    	assertEquals("f2=f2val", dd.valuePairs[1]);
-
-
     }
 
     public void testSimpleEnums() {
-    	final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
-    	sce.dataEnumLists = new HashMap();
-    	sce.dataEnumLists.put("Fact.type", new String[] {"sex", "colour"});
-    	assertEquals(2, sce.getEnumValues("Fact", "type").length);
-    	assertEquals("sex", sce.getEnumValues("Fact", "type")[0]);
-    	assertEquals("colour", sce.getEnumValues("Fact", "type")[1]);
+        final SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
+        sce.dataEnumLists = new HashMap();
+        sce.dataEnumLists.put( "Fact.type",
+                               new String[]{"sex", "colour"} );
+        assertEquals( 2,
+                      sce.getEnumValues( "Fact",
+                                         "type" ).length );
+        assertEquals( "sex",
+                      sce.getEnumValues( "Fact",
+                                         "type" )[0] );
+        assertEquals( "colour",
+                      sce.getEnumValues( "Fact",
+                                         "type" )[1] );
 
     }
 
@@ -438,12 +594,13 @@
     }
 
     public void testDataDropDown() {
-    	assertNull( DropDownData.create(null) );
-    	assertNull( DropDownData.create(null, null));
-    	assertTrue( DropDownData.create(new String[] {"hey"}) instanceof DropDownData);
-    	assertTrue( DropDownData.create("abc", new String[] {"hey"}) instanceof DropDownData);
+        assertNull( DropDownData.create( null ) );
+        assertNull( DropDownData.create( null,
+                                         null ) );
+        assertTrue( DropDownData.create( new String[]{"hey"} ) instanceof DropDownData );
+        assertTrue( DropDownData.create( "abc",
+                                         new String[]{"hey"} ) instanceof DropDownData );
 
-
     }
 
     public static class NestedClass {
@@ -457,4 +614,26 @@
             this.name = name;
         }
     }
-}
+
+    public static class Fact {
+        private String field1;
+        private String field2;
+
+        public String getField1() {
+            return field1;
+        }
+
+        public void setField1(String field1) {
+            this.field1 = field1;
+        }
+
+        public String getField2() {
+            return field2;
+        }
+
+        public void setField2(String field2) {
+            this.field2 = field2;
+        }
+
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java	2010-03-12 11:46:01 UTC (rev 32055)
+++ labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java	2010-03-12 13:06:08 UTC (rev 32056)
@@ -44,8 +44,6 @@
 import com.google.gwt.user.client.ui.HTML;
 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.Panel;
 import com.google.gwt.user.client.ui.SimplePanel;
@@ -62,16 +60,17 @@
  */
 public class ConstraintValueEditor extends DirtyableComposite {
 
-    private final ISingleFieldConstraint constraint;
-    private final Panel                  panel;
-    private final RuleModel              model;
-    private final boolean                numericValue;
-    private DropDownData                 dropDownData;
-    private Constants                    constants = ((Constants) GWT.create( Constants.class ));
-    private String                       fieldType;
+    private final FactPattern                pattern;
+    private final String                     fieldName;
+    private final SuggestionCompletionEngine sce;
+    private final ISingleFieldConstraint     constraint;
+    private final Panel                      panel;
+    private final RuleModel                  model;
+    private final boolean                    numericValue;
+    private DropDownData                     dropDownData;
+    private Constants                        constants = ((Constants) GWT.create( Constants.class ));
+    private String                           fieldType;
 
-    //private String[] enumeratedValues;
-
     /**
      * @param con The constraint being edited.
      */
@@ -80,11 +79,13 @@
                                  ISingleFieldConstraint con,
                                  RuleModeller modeller,
                                  String valueType /* eg is numeric */) {
+        this.pattern = pattern;
+        this.fieldName = fieldName;
         this.constraint = con;
-        valueType = modeller.getSuggestionCompletions().getFieldType( pattern.factType,
-                                                                      fieldName );
+        this.sce = modeller.getSuggestionCompletions();
+        valueType = sce.getFieldType( pattern.factType,
+                                      fieldName );
         this.fieldType = valueType;
-        SuggestionCompletionEngine sce = modeller.getSuggestionCompletions();
         if ( SuggestionCompletionEngine.TYPE_NUMERIC.equals( valueType ) ) {
             this.numericValue = true;
         } else {
@@ -120,7 +121,10 @@
         } else {
             switch ( constraint.constraintValueType ) {
                 case SingleFieldConstraint.TYPE_LITERAL :
-                    panel.add( new LiteralEditor( constraint,
+                    panel.add( new LiteralEditor( this.pattern,
+                                                  this.fieldName,
+                                                  this.sce,
+                                                  this.constraint,
                                                   this.dropDownData,
                                                   this.fieldType,
                                                   this.numericValue ) );
@@ -194,7 +198,7 @@
 
         //if we have to do it lazy, we will hit up the server when the widget gets focus
         if ( dropData.fixedList == null && dropData.queryExpression != null ) {
-            DeferredCommand.addCommand( new Command() {
+              DeferredCommand.addCommand( new Command() {
                 public void execute() {
                     LoadingPopup.showMessage( cs.RefreshingList() );
                     RepositoryServiceFactory.getService().loadDropDownExpression( dropData.valuePairs,
@@ -203,6 +207,11 @@
                                                                                       public void onSuccess(Object data) {
                                                                                           LoadingPopup.close();
                                                                                           String[] list = (String[]) data;
+
+                                                                                          if ( list.length == 0 ) {
+                                                                                              list = new String[]{cs.UnableToLoadList()};
+                                                                                          }
+
                                                                                           doDropDown( currentValue,
                                                                                                       list,
                                                                                                       box );

Modified: labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/LiteralEditor.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/LiteralEditor.java	2010-03-12 11:46:01 UTC (rev 32055)
+++ labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/LiteralEditor.java	2010-03-12 13:06:08 UTC (rev 32056)
@@ -5,6 +5,7 @@
 import org.drools.guvnor.client.messages.Constants;
 import org.drools.guvnor.client.modeldriven.DropDownData;
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
 import org.drools.guvnor.client.modeldriven.brl.ISingleFieldConstraint;
 
 import com.google.gwt.core.client.GWT;
@@ -21,36 +22,45 @@
 import com.google.gwt.user.client.ui.Widget;
 
 /**
- *
- * Editor for literal values.
- * Normally shows the value as text, when clicked opens a custom editor for dates,
+ * 
+ * Editor for literal values. 
+ * Normally shows the value as text, when clicked opens a custom editor for dates, 
  * enums etc or by default a textbox.
- *
+ * 
  * @author Toni Rikkola
  *
  */
 public class LiteralEditor extends Composite {
 
-    private Constants              constants    = ((Constants) GWT.create( Constants.class ));
-    protected Panel                panel        = new HorizontalPanel();
-    protected Label                labelWidget  = new Label();
-    private ISingleFieldConstraint constraint;
-    private DropDownData           dropDownData;
-    private String                 fieldType;
-    private final boolean          numericValue;
+    private final FactPattern                pattern;
+    private final String                     fieldName;
+    private final SuggestionCompletionEngine sce;
+    private Constants                        constants    = ((Constants) GWT.create( Constants.class ));
+    protected Panel                          panel        = new HorizontalPanel();
+    protected Label                          labelWidget  = new Label();
+    private ISingleFieldConstraint           constraint;
+    private DropDownData                     dropDownData;
+    private String                           fieldType;
+    private final boolean                    numericValue;
 
-    private final Button           okButton     = new Button( constants.OK() );
-    private final ValueChanged     valueChanged = new ValueChanged() {
-                                                    public void valueChanged(String newValue) {
-                                                        constraint.value = newValue;
-                                                        okButton.click();
-                                                    }
-                                                };
+    private final Button                     okButton     = new Button( constants.OK() );
+    private final ValueChanged               valueChanged = new ValueChanged() {
+                                                              public void valueChanged(String newValue) {
+                                                                  constraint.value = newValue;
+                                                                  okButton.click();
+                                                              }
+                                                          };
 
-    public LiteralEditor(ISingleFieldConstraint constraint,
+    public LiteralEditor(FactPattern pattern,
+                         String fieldName,
+                         SuggestionCompletionEngine sce,
+                         ISingleFieldConstraint constraint,
                          DropDownData dropDownData,
                          String fieldType,
                          boolean numericValue) {
+        this.pattern = pattern;
+        this.fieldName = fieldName;
+        this.sce = sce;
         this.constraint = constraint;
         this.dropDownData = dropDownData;
         this.fieldType = fieldType;
@@ -80,8 +90,6 @@
 
             labelWidget.addClickListener( new ClickListener() {
                 public void onClick(Widget arg0) {
-                    //                panel.clear();
-                    //                panel.add( getWidget() );
                     showPopup();
                 }
             } );
@@ -126,6 +134,10 @@
 
         //use a drop down if we have a fixed list
         if ( this.dropDownData != null ) {
+
+            this.dropDownData = sce.getEnums( pattern,
+                                              fieldName );
+
             ListBox box = ConstraintValueEditor.enumDropDown( constraint.value,
                                                               valueChanged,
                                                               this.dropDownData );

Modified: labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2010-03-12 11:46:01 UTC (rev 32055)
+++ labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2010-03-12 13:06:08 UTC (rev 32056)
@@ -2188,6 +2188,9 @@
                                            String expression) {
         Map<String, String> context = new HashMap<String, String>();
         for ( int i = 0; i < valuePairs.length; i++ ) {
+            if ( valuePairs[i] == null ) {
+                return new String[0];
+            }
             String[] pair = valuePairs[i].split( "=" );
             context.put( pair[0],
                          pair[1] );

Modified: labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-03-12 11:46:01 UTC (rev 32055)
+++ labs/jbossrules/soa_branches/BRMS-5.0.1/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-03-12 13:06:08 UTC (rev 32056)
@@ -2463,6 +2463,17 @@
 
 	}
 
+
+	public void testLoadDropDownNoValuePairs() throws Exception {
+	    ServiceImplementation serv = new ServiceImplementation();
+	    String[] pairs = new String[]{null};
+	    String expression = "['@{f1}', '@{f2}']";
+	    String[] r = serv.loadDropDownExpression(pairs, expression);
+	    
+	    assertEquals(0, r.length);
+	    
+	}
+	
 	public void testListUserPermisisons() throws Exception {
 		ServiceImplementation serv = getService();
 		Map<String, List<String>> r = serv.listUserPermissions();



More information about the jboss-svn-commits mailing list