[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