[jboss-svn-commits] JBL Code SVN: r31187 - in labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban: drools-compiler/src/main/java/org/drools/guvnor/server/rules and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 21 17:05:57 EST 2010
Author: baunax
Date: 2010-01-21 17:05:56 -0500 (Thu, 21 Jan 2010)
New Revision: 31187
Modified:
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/ClassMethodInspector.java
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java
Log:
added method to ExpressionBuilder
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/MethodInfo.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -16,15 +16,24 @@
private String name;
private List<String> params;
+ private String returnType;
public MethodInfo() {
}
+ /**
+ *
+ * @param name method name
+ * @param params method params list
+ * @param returnType method's return type
+ */
public MethodInfo(String name,
- List<String> params) {
+ List<String> params,
+ Class<?> returnType) {
this.name = name;
this.params = params;
+ this.returnType = returnType.getName();
}
public String getNameWithParameters() {
@@ -52,7 +61,11 @@
return params;
}
- public boolean equals(Object o) {
+ public String getReturnType() {
+ return returnType;
+ }
+
+ public boolean equals(Object o) {
if ( o instanceof MethodInfo ) {
MethodInfo m = (MethodInfo) o;
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -53,7 +53,7 @@
/**
- * A map of the field that containts the parametrized type of a collection
+ * A map of the field that contains the parametrized type of a collection
* List<String> name
* key = "name"
* value = "String"
@@ -64,7 +64,7 @@
/**
* Contains a map of globals (name is key) and their type (value).
*/
- private Map<String, String> globalTypes = new HashMap();
+ private Map<String, String> globalTypes = new HashMap<String, String>();
/**
* A map of types to the modifying methods they expose. key is type, value
@@ -114,7 +114,7 @@
* This is used to calculate what fields an enum list may depend on.
* Optional.
*/
- private transient Map dataEnumLookupFields;
+ private transient Map<String, Object> dataEnumLookupFields;
// /**
// * For bulk loading up the data (from a previous rule save)
@@ -175,7 +175,7 @@
public String[] getConnectiveOperatorCompletions(final String factType,
final String fieldName) {
- final String type = (String) this.getFieldType( factType + "." + fieldName );
+ final String type = this.getFieldType( factType + "." + fieldName );
if ( type == null ) {
return STANDARD_CONNECTIVES;
} else if ( type.equals( TYPE_STRING ) ) {
@@ -190,11 +190,8 @@
}
-
-
public String[] getFieldCompletions(final String factType) {
- return this.getModelFields( factType );
-
+ return this.getModelFields( factType );
}
public String[] getOperatorCompletions(final String factType,
@@ -214,25 +211,21 @@
}
-
-
-
public String[] getFieldCompletionsForGlobalVariable(final String varName) {
- final String type = (String) this.getGlobalVariable( varName );
- return (String[]) this.getModelFields(type);
+ final String type = this.getGlobalVariable( varName );
+ return this.getModelFields(type);
}
public List<MethodInfo> getMethodInfosForGlobalVariable(final String varName) {
- final String type = (String) this.getGlobalVariable( varName );
+ final String type = this.getGlobalVariable( varName );
return this.methodInfos.get( type );
}
- private String[] toStringArray(final Set set) {
+ private String[] toStringArray(final Set<?> set) {
final String[] f = new String[set.size()];
int i = 0;
- for ( final Iterator iter = set.iterator(); iter.hasNext(); ) {
- f[i] = (String) iter.next();
- i++;
+ for ( final Iterator<?> iter = set.iterator(); iter.hasNext(); i++) {
+ f[i] = iter.next().toString();
}
return f;
}
@@ -288,7 +281,7 @@
key += "]";
}
- return DropDownData.create( (String[]) this.getDataEnumList(key) );
+ return DropDownData.create( this.getDataEnumList(key) );
} else if ( _typeFields != null ) {
// these enums are calculated on demand, server side...
@@ -342,7 +335,7 @@
ActionFieldValue val = currentValues[i];
if ( val.field.equals( typeField ) ) {
String key = type + "." + field + "[" + typeField + "=" + val.value + "]";
- return DropDownData.create( (String[]) this.getDataEnumList( key ) );
+ return DropDownData.create( this.getDataEnumList( key ) );
}
}
} else if ( _typeField != null ) {
@@ -369,7 +362,7 @@
}
}
- String[] vals = (String[]) this.getDataEnumList( type + "." + field );
+ String[] vals = this.getDataEnumList( type + "." + field );
return DropDownData.create( vals );
}
@@ -495,7 +488,7 @@
public List<String> getMethodNames(String factName) {
List<MethodInfo> infos = methodInfos.get( factName );
- List<String> methodList = new ArrayList<String>();;
+ List<String> methodList = new ArrayList<String>();
if ( infos != null ) {
for ( MethodInfo info : infos ) {
@@ -506,6 +499,19 @@
return methodList;
}
+ public List<String> getMethodFullNames(String factName) {
+ List<MethodInfo> infos = methodInfos.get( factName );
+ List<String> methodList = new ArrayList<String>();
+
+ if ( infos != null ) {
+ for ( MethodInfo info : infos ) {
+ methodList.add( info.getNameWithParameters() );
+ }
+ }
+
+ return methodList;
+ }
+
/*
* returns the type of parametric class
* List<String> a in a class called Toto
@@ -525,8 +531,6 @@
this.fieldParametersType.put(fieldName, type);
}
-
-
public String getGlobalVariable(String name){
return this.globalTypes.get(name);
}
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -2,26 +2,26 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
import org.drools.base.ClassTypeResolver;
import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsError;
import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.ParserError;
import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
import org.drools.guvnor.server.util.ClassMethodInspector;
import org.drools.guvnor.server.util.DataEnumLoader;
@@ -168,9 +168,8 @@
}
if (this.parser.hasErrors()) {
- for (final Iterator iter = this.parser.getErrors().iterator(); iter.hasNext();) {
- final ParserError element = (ParserError) iter.next();
- this.errors.add(element.getMessage());
+ for (final Iterator<DroolsError> iter = this.parser.getErrors().iterator(); iter.hasNext();) {
+ this.errors.add(iter.next().getMessage());
}
}
@@ -333,7 +332,6 @@
this.errors.add("Class of field not found: " + fieldClass);
}
}
-
}
this.builder.addFieldsForType(declaredType, fieldNames.toArray(new String[fieldNames.size()]));
@@ -413,24 +411,19 @@
return clazz;
}
- private void loadClassFields(final Class clazz,
+ private void loadClassFields(final Class<?> clazz,
final String shortTypeName) throws IOException {
if (clazz == null) {
return;
}
final ClassFieldInspector inspector = new ClassFieldInspector(clazz);
- Set<String> fieldSet = new HashSet<String>();
+ Set<String> fieldSet = new TreeSet<String>();
fieldSet.addAll(inspector.getFieldNames().keySet());
// add the "this" field. This won't come out from the inspector
fieldSet.add("this");
- String [] fields = fieldSet.toArray(new String []{});
- Arrays.sort(fields);
-
- fields = removeIrrelevantFields(fields);
-
- this.builder.addFieldsForType(shortTypeName, fields);
+ this.builder.addFieldsForType(shortTypeName, removeIrrelevantFields(fieldSet));
Method[] methods = clazz.getMethods();
List<String> modifierStrings = new ArrayList<String>();
@@ -442,12 +435,12 @@
this.builder.addModifiersForType(shortTypeName, modifiers);
- // remove this back out because there is no type for it. We add it explicity
+ // remove this back out because there is no type for it. We add it explicitly
fieldSet.remove("this");
this.builder.addFieldType(shortTypeName + ".this", SuggestionCompletionEngine.TYPE_OBJECT,clazz);
for (String field : fieldSet) {
- final Class type = inspector.getFieldTypes().get(field);
+ final Class<?> type = inspector.getFieldTypes().get(field);
final String fieldType = getFieldType(type);
this.builder.addFieldType(shortTypeName + "." + field, fieldType,type);
Field f = inspector.getFieldTypesField().get(field);
@@ -467,17 +460,14 @@
* This will remove the unneeded "fields" that come from java.lang.Object
* these are really not needed for the modeller.
*/
- String[] removeIrrelevantFields(final String[] fields) {
- final List result = new ArrayList();
- for (int i = 0; i < fields.length; i++) {
- final String field = fields[i];
- if (field.equals("class") || field.equals("hashCode") || field.equals("toString")) {
- // ignore
- } else {
+ String[] removeIrrelevantFields(Collection<String> fields) {
+ final List<String> result = new ArrayList<String>();
+ for (String field : fields) {
+ if (!(field.equals("class") || field.equals("hashCode") || field.equals("toString"))) {
result.add(field);
}
}
- return (String[]) result.toArray(new String[result.size()]);
+ return result.toArray(new String[result.size()]);
}
/**
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/ClassMethodInspector.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/ClassMethodInspector.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/server/util/ClassMethodInspector.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -35,10 +35,12 @@
if ( isNotGetterOrSetter( methodName ) && isReasonableMethod( clazz,
methodName ) && Modifier.isPublic( modifiers ) ) {
- Class< ? >[] listParam = aMethod.getParameterTypes();
+ Class<?>[] listParam = aMethod.getParameterTypes();
+
MethodInfo info = new MethodInfo( methodName,
- solveParams( listParam ) );
+ solveParams( listParam ),
+ aMethod.getReturnType() );
this.methods.add( info );
}
}
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -109,8 +109,8 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.TypeResolver#resolveType(java.lang.String)
*/
- public Class resolveType(String className) throws ClassNotFoundException {
- Class clazz = null;
+ public Class<?> resolveType(String className) throws ClassNotFoundException {
+ Class<?> clazz = null;
boolean isArray = false;
final StringBuilder arrayClassName = new StringBuilder();
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -1,5 +1,8 @@
package org.drools.guvnor.client.modeldriven.ui;
+import java.util.Iterator;
+import java.util.List;
+
import org.drools.guvnor.client.common.DirtyableComposite;
import org.drools.guvnor.client.messages.Constants;
import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
@@ -14,15 +17,19 @@
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 String currentType = null;
+
+
public ExpressionBuilder(RuleModeller modeller, String expression) {
super();
if (expression == null || expression.isEmpty()) {
@@ -57,7 +64,6 @@
} else {
parseExpression(expression);
}
-
}
protected Widget getWidgetFor(String value) {
@@ -66,13 +72,28 @@
}
if (value.startsWith(VARIABLE_VALUE_PREFIX)) {
FactPattern fact = getRuleModel().getBoundFact(value.substring(VARIABLE_VALUE_PREFIX.length() + 1));
- String[] methods = getCompletions().getFieldCompletions(fact.factType);
+
+ setCurrentType(fact.factType);
ListBox lb = new ListBox();
lb.setVisibleItemCount(1);
- for (String method : methods) {
- lb.addItem(method);
+ List<String> methodNames = getCompletions().getMethodFullNames(fact.factType);
+
+ for (String field : getCompletions().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);
+ }
}
+
return lb;
} else if (value.startsWith(GLOBAL_COLLECTION_VALUE_PREFIX)) {
return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
@@ -94,4 +115,12 @@
return modeller.getSuggestionCompletions();
}
+ public String getCurrentType() {
+ return currentType;
+ }
+
+ private void setCurrentType(String currentType) {
+ this.currentType = currentType;
+ }
+
}
Modified: labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java 2010-01-21 20:59:42 UTC (rev 31186)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/test/java/org/drools/guvnor/server/rules/BRMSSuggestionCompletionLoaderTest.java 2010-01-21 22:05:56 UTC (rev 31187)
@@ -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]);
}
More information about the jboss-svn-commits
mailing list