[jboss-svn-commits] JBL Code SVN: r29191 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/guvnor/server/rules and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Sep 5 05:16:56 EDT 2009


Author: nheron
Date: 2009-09-05 05:16:55 -0400 (Sat, 05 Sep 2009)
New Revision: 29191

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/SuggestionCompletionEngineBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SomeFact.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
Log:
GUVNOR-263
Guided editor : How to check if a list contains an object

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2009-09-04 22:14:46 UTC (rev 29190)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2009-09-05 09:16:55 UTC (rev 29191)
@@ -69,6 +69,14 @@
      * 
      */
     public Map<String, String>            fieldTypes;
+        /**
+     * A map of the field that containts the parametrized type of a collection
+     * List<String> name
+     * key = "name"
+     * value = "Strint" 
+     *
+     */
+    public Map<String, String>            fieldParametersType = new HashMap<String, String>();
 
     /**
      * Contains a map of globals (name is key) and their type (value).
@@ -232,7 +240,16 @@
                                final String fieldName) {
         return (String) this.fieldTypes.get( factType + "." + fieldName );
     }
-
+    /*
+     * returns the type of parametric class
+     * List<String> a in a class called Toto
+     * key =   "Toto.a"
+     * value = "String"
+     */
+     public String getParametricFieldType(final String factType,
+                               final String fieldName) {
+        return (String) this.fieldParametersType.get( factType + "." + fieldName );
+    }
     public boolean isGlobalVariable(final String variable) {
         return this.globalTypes.containsKey( variable );
     }
@@ -271,7 +288,7 @@
     public DropDownData getEnums(FactPattern pat,
                                  String field) {
 
-        Map dataEnumLookupFields = loadDataEnumLookupFields();
+      Map dataEnumLookupFields = loadDataEnumLookupFields();
 
         if ( pat.constraintList != null && pat.constraintList.constraints != null ) {
             // we may need to check for data dependent enums

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java	2009-09-04 22:14:46 UTC (rev 29190)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java	2009-09-05 09:16:55 UTC (rev 29191)
@@ -3,6 +3,8 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -445,6 +447,8 @@
             final Class type = inspector.getFieldTypes().get(field);
             final String fieldType = getFieldType(type);
             this.builder.addFieldType(shortTypeName + "." + field, fieldType);
+            Field f = inspector.getFieldTypesField().get(field);
+            this.builder.addFieldTypeField(shortTypeName + "." + field,f);
         }
         
         ClassMethodInspector methodInspector = new ClassMethodInspector(clazz);

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/SuggestionCompletionEngineBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/SuggestionCompletionEngineBuilder.java	2009-09-04 22:14:46 UTC (rev 29190)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/SuggestionCompletionEngineBuilder.java	2009-09-05 09:16:55 UTC (rev 29191)
@@ -17,6 +17,9 @@
 package org.drools.guvnor.server.util;
 
 import java.util.*;
+import java.lang.reflect.Field;
+import java.lang.reflect.Type;
+import java.lang.reflect.ParameterizedType;
 
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.guvnor.client.modeldriven.brl.DSLSentence;
@@ -35,6 +38,7 @@
     private Map                        fieldsForType         = new HashMap();
     private Map                        modifiersForType      = new HashMap();
     private Map                        fieldTypes            = new HashMap();
+    private Map<String,Field>          fieldTypesField       = new HashMap<String,Field>();
     private Map                        globalTypes           = new HashMap();
     private List                       actionDSLSentences    = new ArrayList();
     private List                       conditionDSLSentences = new ArrayList();
@@ -55,6 +59,7 @@
         this.fieldsForType = new HashMap();
         this.modifiersForType = new HashMap();
         this.fieldTypes = new HashMap();
+        this.fieldTypesField = new HashMap();
         this.globalTypes = new HashMap();
         this.actionDSLSentences = new ArrayList();
         this.conditionDSLSentences = new ArrayList();
@@ -114,7 +119,17 @@
         this.fieldTypes.put( field,
                              type );
     }
-
+      /**
+     * Adds a type declaration for a field
+     *
+     * @param field
+     * @param type
+     */
+    public void addFieldTypeField(final String field,
+                             final Field type) {
+        this.fieldTypesField.put( field,
+                             type );
+    }
     /**
      * Adds a global and its corresponding type to the engine
      *
@@ -160,6 +175,22 @@
         this.instance.fieldsForType = this.fieldsForType;
         this.instance.modifiers = this.modifiersForType;
         this.instance.fieldTypes = this.fieldTypes;
+        for (String fieldName  : this.fieldTypesField.keySet()){
+            Field field =  (Field) this.fieldTypesField.get(fieldName);
+            if (field != null){
+                Type type = field.getGenericType();
+                if (type instanceof ParameterizedType) {
+                    ParameterizedType pt = (ParameterizedType) type;
+                    Type goodType=null;
+                    for (Type t : pt.getActualTypeArguments()) {
+                        goodType = t;
+                    }
+                    int index = goodType.toString().lastIndexOf(".");
+                    String className = goodType.toString().substring(index+1);
+                    this.instance.fieldParametersType.put(fieldName,className);
+                  }
+            }
+        }
         this.instance.globalTypes = this.globalTypes;
         this.instance.actionDSLSentences = makeArray(this.actionDSLSentences);
         this.instance.conditionDSLSentences = makeArray(this.conditionDSLSentences);

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SomeFact.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SomeFact.java	2009-09-04 22:14:46 UTC (rev 29190)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SomeFact.java	2009-09-05 09:16:55 UTC (rev 29191)
@@ -3,6 +3,8 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Date;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.drools.Cheese;
 
@@ -27,6 +29,10 @@
 
     private Boolean           dead;
 
+    private List<SomeFact> factList = new ArrayList<SomeFact>();
+
+    private List<String> factListString = new ArrayList<String>();
+
     public int getAge() {
         return age;
     }
@@ -122,5 +128,20 @@
     public void setStatus(String status) {
         this.status = status;
     }
+    public List<SomeFact> getFactList() {
+        return factList;
+    }
 
+    public List<String> getFactListString() {
+        return factListString;
+    }
+
+    public void setFactListString(List<String> factListString) {
+        this.factListString = factListString;
+    }
+
+    public void setFactList(List<SomeFact> factList) {
+        this.factList = factList;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java	2009-09-04 22:14:46 UTC (rev 29190)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java	2009-09-05 09:16:55 UTC (rev 29191)
@@ -42,6 +42,10 @@
         assertEquals("Cheese", eng.getFieldType( "SomeFact", "cheese"));
         assertEquals(SuggestionCompletionEngine.TYPE_BOOLEAN, eng.getFieldType( "SomeFact", "dead"));
         assertEquals(SuggestionCompletionEngine.TYPE_BOOLEAN, eng.getFieldType( "SomeFact", "alive"));
+        assertEquals(SuggestionCompletionEngine.TYPE_COLLECTION,eng.getFieldType( "SomeFact", "factList"));
+        assertEquals("SomeFact",eng.getParametricFieldType("SomeFact", "factList"));
+        assertEquals(SuggestionCompletionEngine.TYPE_COLLECTION,eng.getFieldType( "SomeFact", "factListString"));
+        assertEquals("String",eng.getParametricFieldType("SomeFact", "factListString"));
 
     }
 

Modified: 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/ConstraintValueEditor.java	2009-09-04 22:14:46 UTC (rev 29190)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java	2009-09-05 09:16:55 UTC (rev 29191)
@@ -29,10 +29,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 org.drools.guvnor.client.modeldriven.brl.RuleModel;
-import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.*;
 import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
 
 import com.google.gwt.core.client.GWT;
@@ -161,6 +158,18 @@
                     box.setSelectedIndex( j );
                 }
                 j++;
+            }  else {
+                    // for collection, present the list of possible bound variable
+                    String factCollectionType = sce.getParametricFieldType(pattern.factType,this.fieldName);
+                    if ((f != null && factCollectionType != null &&  f.factType.equals(factCollectionType))
+                        ||  (factCollectionType != null && factCollectionType.equals( fv ) )   )
+                    {
+                        box.addItem( var );
+                        if ( this.constraint.value != null && this.constraint.value.equals( var ) ) {
+                            box.setSelectedIndex( j );
+                        }
+                        j++;
+                    }
             }
         }
 
@@ -348,7 +357,8 @@
         form.addRow( new SmallLabel( constants.AdvancedOptions() ) );
 
         //only want to show variables if we have some !
-        if ( this.model.getBoundVariablesInScope( this.constraint ).size() > 0 ) {
+        if ( this.model.getBoundVariablesInScope( this.constraint ).size() > 0
+                || SuggestionCompletionEngine.TYPE_COLLECTION.equals( this.fieldType )) {
             List vars = this.model.getBoundFacts();
             boolean foundABouncVariableThatMatches = false;
             for ( int i = 0; i < vars.size(); i++ ) {
@@ -359,6 +369,15 @@
                 if ( (f != null && f.factType.equals( this.fieldType )) || this.fieldType.equals( fieldConstraint ) ) {
                     foundABouncVariableThatMatches = true;
                     break;
+                } else {
+                     // for collection, present the list of possible bound variable
+                    String factCollectionType = sce.getParametricFieldType(pattern.factType,this.fieldName);
+                    if ((f != null && factCollectionType != null &&  f.factType.equals(factCollectionType))
+                        ||  (factCollectionType != null && factCollectionType.equals( fieldConstraint ) )   )
+                    {
+                           foundABouncVariableThatMatches = true;
+                           break;
+                    }
                 }
             }
             if ( foundABouncVariableThatMatches == true ) {



More information about the jboss-svn-commits mailing list