[jboss-svn-commits] JBL Code SVN: r31366 - in labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban: drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 2 16:52:51 EST 2010


Author: baunax
Date: 2010-02-02 16:52:50 -0500 (Tue, 02 Feb 2010)
New Revision: 31366

Added:
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/CopyExpressionVisitor.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollectionIndex.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionText.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitable.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitor.java
Modified:
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollection.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionField.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionFormLine.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionMethod.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionPart.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVariable.java
   labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
Log:
- added collection support to ExpressionBuilder

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/SuggestionCompletionEngine.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -547,9 +547,12 @@
      * @return
      */
     public String getFactNameFromType(String type) {
+    	if (type == null) {
+    		return null;
+    	}
     	if (modelFields.containsKey(type)) {
     		return type;
-    	}
+    	} 
     	for (Map.Entry<String, ModelField[]> entry : modelFields.entrySet()) {
 			for (ModelField mf : entry.getValue()) {
 				if ("this".equals(mf.getName()) && type.equals(mf.getClassName())) {

Added: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/CopyExpressionVisitor.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/CopyExpressionVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/CopyExpressionVisitor.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -0,0 +1,79 @@
+package org.drools.guvnor.client.modeldriven.brl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CopyExpressionVisitor implements ExpressionVisitor {
+
+	private ExpressionPart root;
+	private ExpressionPart curr;
+	
+	public ExpressionPart copy(ExpressionPart part) {
+		root = null;
+		curr = null;
+		part.accept(this);
+		return root;
+	}
+	
+	public void visit(ExpressionPart part) {
+		throw new RuntimeException("can't copy an abstract class: " + ExpressionPart.class.getName());
+	}
+
+	public void visit(ExpressionField part) {
+		add(new ExpressionField(part.getName(), part.getClassType(), part.getGenericType(), part.getParametricType()));
+		moveNext();
+	}
+
+	public void visit(ExpressionMethod part) {
+		ExpressionMethod method = new ExpressionMethod(part.getName(), part.getClassType(), part.getGenericType(), part.getParametricType());
+		copyMethodParams(part, method);
+		add(method);
+		moveNext();
+	}
+
+	public void visit(ExpressionVariable part) {
+		add(new ExpressionVariable(part.getFact()));
+		moveNext();
+	}
+
+	public void visit(ExpressionCollection part) {
+		add(new ExpressionCollection(part.getName(), part.getClassType(), part.getGenericType(), part.getParametricType()));
+		moveNext();
+	}
+
+	public void visit(ExpressionCollectionIndex part) {
+		ExpressionCollectionIndex method = new ExpressionCollectionIndex(part.getName(), part.getClassType(), part.getGenericType(), part.getParametricType());
+		copyMethodParams(part, method);
+		add(method);
+		moveNext();
+	}
+
+	public void visit(ExpressionText part) {
+		add(new ExpressionText(part.getName()));
+		moveNext();
+	}
+
+	private void copyMethodParams(ExpressionMethod part, ExpressionMethod method) {
+		Map<String, ExpressionFormLine> params = new HashMap<String, ExpressionFormLine>();
+		for (Map.Entry<String, ExpressionFormLine> entry : part.getParams().entrySet()) {
+			params.put(entry.getKey(), new ExpressionFormLine(entry.getValue()));
+		}
+		method.setParams(params);
+	}
+	
+	private void moveNext() {
+		if (curr.getNext() != null) {
+			curr.getNext().accept(this);
+		}
+	}
+
+	private void add(ExpressionPart p) {
+		if (root == null) {
+			root = p;
+			curr = p;
+		} else {
+			curr.setNext(p);
+			curr = p;
+		}
+	}
+}


Property changes on: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/CopyExpressionVisitor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollection.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollection.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollection.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -13,7 +13,12 @@
 
 	@Override
 	public String getText() {
-		return getName();
+		return "." + getName() + (getNext() == null ? "" : getNext().getText());
 	}
+	
+	@Override
+	public void accept(ExpressionVisitor visitor) {
+		super.accept(visitor);
+	}
 
 }

Added: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollectionIndex.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollectionIndex.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollectionIndex.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -0,0 +1,29 @@
+package org.drools.guvnor.client.modeldriven.brl;
+
+public class ExpressionCollectionIndex extends ExpressionMethod {
+
+	protected ExpressionCollectionIndex() {}
+	
+	public ExpressionCollectionIndex(String name, String classType,
+			String genericType, String parametricType) {
+		super(name, classType, genericType, parametricType);
+	}
+
+	public ExpressionCollectionIndex(String name, String returnClassType,
+			String returnGenericType) {
+		super(name, returnClassType, returnGenericType);
+	}
+	
+	@Override
+	public String getText() {
+		return "["  + paramsToString() + "]"
+				+ (getNext() == null ? "" : getNext().getText());
+	}
+	
+	@Override
+	public void accept(ExpressionVisitor visitor) {
+		super.accept(visitor);
+	}
+
+
+}


Property changes on: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionCollectionIndex.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionField.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionField.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionField.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -9,8 +9,17 @@
 		super(fieldName, fieldClassType, fieldGenericType);
 	}
 
+	public ExpressionField(String fieldName, String fieldClassType, String fieldGenericType, String parametricType) {
+		super(fieldName, fieldClassType, fieldGenericType, parametricType);
+	}
+	
 	@Override
 	public String getText() {
 		return "." + getName() + (getNext() == null ? "" : getNext().getText());
 	}
+
+	@Override
+	public void accept(ExpressionVisitor visitor) {
+		super.accept(visitor);
+	}
 }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionFormLine.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionFormLine.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionFormLine.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -2,12 +2,24 @@
 
 import java.util.LinkedList;
 
-public class ExpressionFormLine implements IAction, IPattern {
+public class ExpressionFormLine implements IAction, IPattern, Cloneable {
 	
     private LinkedList<ExpressionPart> parts = new LinkedList<ExpressionPart>() ;
     
     public ExpressionFormLine() {}
 
+    public ExpressionFormLine(ExpressionPart part) {
+    	appendPart(part);
+    }
+    
+	public ExpressionFormLine(ExpressionFormLine other) {
+		CopyExpressionVisitor copier = new CopyExpressionVisitor();
+		
+		for (ExpressionPart exp = copier.copy(other.getRootExpression()); exp != null; exp = exp.getNext()) {
+			parts.add(exp);
+		}
+	}
+
 	public String getText() {
 		return parts.isEmpty() ? "" : parts.getFirst().getText();
 	}
@@ -35,13 +47,21 @@
 	
 	public String getPreviousType() {
 		ExpressionPart last = getPreviousPart();
-		return last.getPrevious() == null ? null : last.getPrevious().getType(); 
+		return last.getPrevious() == null ? null : last.getPrevious().getClassType(); 
 	}
 	
-	public String getType() {
-		return parts.getLast().getType();
+	public String getClassType() {
+		return parts.getLast().getClassType();
 	}
+	
+	public String getGenericType() {
+		return parts.getLast().getGenericType();
+	}
 
+	public String getParametricType() {
+		return parts.getLast().getParametricType();
+	}
+	
 	public boolean isEmpty() {
 		return parts.isEmpty();
 	}
@@ -54,4 +74,8 @@
 		ExpressionPart previousPart = getPreviousPart();
 		return previousPart == null ? null : previousPart.getName(); 
 	}
+
+	public ExpressionPart getRootExpression() {
+		return parts.getFirst();
+	}
 }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionMethod.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionMethod.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionMethod.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -5,39 +5,51 @@
 
 public class ExpressionMethod extends ExpressionPart {
 
-	private Map<String, ExpressionPart> params = new LinkedHashMap<String, ExpressionPart>();
+	private Map<String, ExpressionFormLine> params = new LinkedHashMap<String, ExpressionFormLine>();
 
-	@SuppressWarnings("unused")
-	private ExpressionMethod() {}
+	protected ExpressionMethod() {}
 	
 	public ExpressionMethod(String methodName, String returnClassType, String returnGenericType) {
 		super(methodName, returnClassType, returnGenericType);
 	}
 
-	public Map<String, ExpressionPart> getParams() {
+	public ExpressionMethod(String name, String classType, String genericType,
+			String parametricType) {
+		super(name, classType, genericType, parametricType);
+	}
+
+	public Map<String, ExpressionFormLine> getParams() {
 		return params;
 	}
 
-	public void setParams(Map<String, ExpressionPart> params) {
-		this.params = params;
+	public void setParams(Map<String, ExpressionFormLine> params) {
+		this.params.putAll(params);
 	}
+	
+	public void putParam(String name, ExpressionFormLine expression) {
+		this.params.put(name, expression);
+	}
 
 	@Override
 	public String getText() {
-		return "." + getName() + paramsToString()
+		return "." + getName() + "(" + paramsToString() + ")"
 				+ (getNext() == null ? "" : getNext().getText());
 	}
 
-	private String paramsToString() {
+	protected String paramsToString() {
 		if (params.isEmpty()) {
-			return "()";
+			return "";
 		}
 		String sep = ", ";
 		StringBuilder s = new StringBuilder();
-		for (ExpressionPart expr : params.values()) {
+		for (ExpressionFormLine expr : params.values()) {
 			s.append(sep).append(expr.getText());
 		}
-		return "(" + s.substring(sep.length()) + ")";
+		return s.substring(sep.length());
 	}
 	
+	@Override
+	public void accept(ExpressionVisitor visitor) {
+		super.accept(visitor);
+	}
 }

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionPart.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionPart.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionPart.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -1,6 +1,6 @@
 package org.drools.guvnor.client.modeldriven.brl;
 
-public abstract class ExpressionPart implements IPattern, IAction {
+public abstract class ExpressionPart implements IPattern, IAction, ExpressionVisitable {
 	private ExpressionPart prev;
 	private ExpressionPart next;
 	private String name;
@@ -28,7 +28,7 @@
 	
 	public abstract String getText();
 
-	public final String getType() {
+	public final String getClassType() {
 		return classType;
 	}
 	
@@ -66,4 +66,8 @@
 	public String toString() {
 		return getText();
 	}
+	
+	public void accept(ExpressionVisitor visitor) {
+		visitor.visit(this);
+	}
 }

Added: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionText.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionText.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionText.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -0,0 +1,18 @@
+package org.drools.guvnor.client.modeldriven.brl;
+
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+
+public class ExpressionText extends ExpressionPart {
+
+	protected ExpressionText() {}
+
+	public ExpressionText(String name) {
+		super(name, "java.lang.String", SuggestionCompletionEngine.TYPE_STRING);
+	}
+
+	@Override
+	public String getText() {
+		return getName() + (getNext() == null ? "" : getNext().getClass());
+	}
+
+}


Property changes on: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionText.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVariable.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVariable.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVariable.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -23,4 +23,9 @@
 	public FactPattern getFact() {
 		return fact;
 	}
+	
+	@Override
+	public void accept(ExpressionVisitor visitor) {
+		super.accept(visitor);
+	}
 }

Added: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitable.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitable.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitable.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -0,0 +1,5 @@
+package org.drools.guvnor.client.modeldriven.brl;
+
+public interface ExpressionVisitable {
+	void accept(ExpressionVisitor visitor);
+}


Property changes on: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitable.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitor.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitor.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -0,0 +1,11 @@
+package org.drools.guvnor.client.modeldriven.brl;
+
+public interface ExpressionVisitor {
+	void visit(ExpressionPart part);
+	void visit(ExpressionField part);
+	void visit(ExpressionMethod part);
+	void visit(ExpressionVariable part);
+	void visit(ExpressionCollection part);
+	void visit(ExpressionCollectionIndex part);
+	void visit(ExpressionText part);
+}


Property changes on: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ExpressionVisitor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
===================================================================
--- labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-02-02 18:59:48 UTC (rev 31365)
+++ labs/jbossrules/branches/guvnor_expressionEditor3_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-02-02 21:52:50 UTC (rev 31366)
@@ -10,9 +10,12 @@
 import org.drools.guvnor.client.modeldriven.MethodInfo;
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.guvnor.client.modeldriven.brl.ExpressionCollection;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionCollectionIndex;
 import org.drools.guvnor.client.modeldriven.brl.ExpressionField;
 import org.drools.guvnor.client.modeldriven.brl.ExpressionFormLine;
 import org.drools.guvnor.client.modeldriven.brl.ExpressionMethod;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionPart;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionText;
 import org.drools.guvnor.client.modeldriven.brl.ExpressionVariable;
 import org.drools.guvnor.client.modeldriven.brl.FactPattern;
 import org.drools.guvnor.client.modeldriven.brl.RuleModel;
@@ -111,7 +114,7 @@
 			return createStartPointWidget();
 		}
 		String factName = getCompletionEngine().getFactNameFromType(
-				getCurrentType());
+				getCurrentClassType());
 		if (factName != null) {
 			ListBox lb = new ListBox();
 			lb.setVisibleItemCount(1);
@@ -132,41 +135,65 @@
 				}
 			});
 			return lb;
-		} else if (isCollection()) {
+		} else {//if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
 			ListBox lb = new ListBox();
 			lb.setVisibleItemCount(1);
 			lb.addItem(constants.ChooseDotDotDot(), "");
+			lb.addItem("<==" + constants.DeleteItem(), DELETE_VALUE);
+			for (Map.Entry<String, String> entry : getCompletionsForCurrentType().entrySet()) {
+				lb.addItem(entry.getKey(), entry.getValue());
+			}
+			lb.addChangeListener(new ChangeListener() {
+				public void onChange(Widget sender) {
+					ListBox box = (ListBox) sender;
+					panel.remove(box);
+					if (box.getSelectedIndex() > 0) {
+						onChangeSelection(box.getValue(box.getSelectedIndex()));
+					}
+				}
+			});
 			return lb;
-		} else if (isDate()) {
-			
 		}
-		return null;
+//		return null;
 	}
 
-	private boolean isDate() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	private boolean isCollection() {
-		String previousType = expression.getPreviousType();
-		String factName = getCompletionEngine().getFactNameFromType(
-				previousType);
-		return true;
-	}
-
 	private void onChangeSelection(String value) {
 		String prevFactName = null;
 		if (DELETE_VALUE.equals(value)) {
 			expression.removeLast();
+		} else if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
+			if ("size".contains(value)) {
+				expression.appendPart(new ExpressionMethod("size", "int", SuggestionCompletionEngine.TYPE_NUMERIC));
+			} else if ("isEmpty".equals(value)) {
+				expression.appendPart(new ExpressionMethod("isEmpty", "boolean", SuggestionCompletionEngine.TYPE_BOOLEAN));
+			} else {
+				ExpressionCollectionIndex collectionIndex;
+				String factName = getCompletionEngine().getFactNameFromType(getCurrentParametricType());
+				if (getCurrentParametricType() != null && factName != null) {
+					collectionIndex = new ExpressionCollectionIndex("get", getCurrentParametricType(), factName);
+				} else {
+					collectionIndex = new ExpressionCollectionIndex("get", "java.lang.Object", SuggestionCompletionEngine.TYPE_OBJECT);
+				}
+				if ("first".equals(value)) {
+					collectionIndex.putParam("index", new ExpressionFormLine(new ExpressionText("0")));
+					expression.appendPart(collectionIndex);
+				} else if ("last".equals(value)) {
+					ExpressionFormLine index = new ExpressionFormLine(expression);
+					index.appendPart(new ExpressionMethod("size", "int", SuggestionCompletionEngine.TYPE_NUMERIC));
+					index.appendPart(new ExpressionText("-1"));
+					
+					collectionIndex.putParam("index", index);
+					expression.appendPart(collectionIndex);
+				} 
+			}
 		} else {
 			int dotPos = value.indexOf('.');
 			String prefix = value.substring(0, dotPos);
 			String attrib = value.substring(dotPos + 1);
 
 			prevFactName = getCompletionEngine().getFactNameFromType(
-					getCurrentType());
-			String genericType = SuggestionCompletionEngine.TYPE_OBJECT;
+					getCurrentClassType());
+//			String genericType = SuggestionCompletionEngine.TYPE_OBJECT;
 			if (FIElD_VALUE_PREFIX.equals(prefix)) {
 				String fieldClassName = getCompletionEngine().getFieldClassName(prevFactName, attrib);
 				String fieldGenericType = getCompletionEngine().getFieldType(prevFactName, attrib);
@@ -198,7 +225,31 @@
 
 	private Map<String, String> getCompletionsForCurrentType() {
 		Map<String, String> completions = new LinkedHashMap<String, String>();
-		String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+		
+		if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
+			completions.put("size()", "size");
+			completions.put("first()","first");
+			completions.put("last()", "last");
+			completions.put("isEmpty()", "isEmpty");
+			return completions;
+		}
+		
+		if (SuggestionCompletionEngine.TYPE_STRING.equals(getCurrentGenericType())) {
+			completions.put("size()", METHOD_VALUE_PREFIX + "size");
+			completions.put("isEmpty()", METHOD_VALUE_PREFIX + "isEmpty");
+			return completions;
+		}
+		
+		if (SuggestionCompletionEngine.TYPE_BOOLEAN.equals(getCurrentGenericType()) || 
+				SuggestionCompletionEngine.TYPE_NUMERIC.equals(getCurrentGenericType()) ||
+				SuggestionCompletionEngine.TYPE_DATE.equals(getCurrentGenericType()) ||
+				SuggestionCompletionEngine.TYPE_OBJECT.equals(getCurrentGenericType())) {
+			completions.put("size()", METHOD_VALUE_PREFIX + "size");
+			completions.put("isEmpty()", METHOD_VALUE_PREFIX + "isEmpty");
+			return completions;
+		}
+		
+		String factName = getCompletionEngine().getFactNameFromType(getCurrentClassType());
 		if (factName != null) {
 			List<String> methodNames = getCompletionEngine()
 					.getMethodFullNames(factName);
@@ -209,8 +260,7 @@
 				for (Iterator<String> i = methodNames.iterator(); i.hasNext();) {
 					String method = i.next();
 					if (method.startsWith(field)) {
-						completions.put(method, METHOD_VALUE_PREFIX + "."
-								+ method);
+						completions.put(method, METHOD_VALUE_PREFIX + "." + method);
 						i.remove();
 						changed = true;
 					}
@@ -220,7 +270,7 @@
 				}
 			}
 		} else {
-			String prevFactName = getCompletionEngine().getFactNameFromType(getPreviousType());
+			String prevFactName = getCompletionEngine().getFactNameFromType(getPreviousClassType());
 			if (prevFactName != null) {
 //				getCompletionEngine().get
 			}
@@ -240,11 +290,23 @@
 		return modeller.getSuggestionCompletions();
 	}
 
-	public String getCurrentType() {
-		return expression.getType();
+	private String getCurrentClassType() {
+		return expression.getClassType();
 	}
 	
-	public String getPreviousType() {
+	private String getCurrentGenericType() {
+		return expression.getGenericType();
+	}
+	
+	private String getCurrentParametricType() {
+		return expression.getParametricType();
+	}
+	
+	private String getPreviousClassType() {
 		return expression.getPreviousType();
 	}
+	
+	private ExpressionPart getRootExpression() {
+		return expression.getRootExpression();
+	}
 }



More information about the jboss-svn-commits mailing list