[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