[jboss-svn-commits] JBL Code SVN: r33459 - labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jun 11 17:54:53 EDT 2010


Author: baunax
Date: 2010-06-11 17:54:53 -0400 (Fri, 11 Jun 2010)
New Revision: 33459

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeEvent.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeHandler.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeEvent.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeHandler.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionChangeHandlers.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionTypeChangeHandlers.java
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
Log:
GUVNOR-559 Allow to use the Expression Builder on the left side of a constraints
	- Added "change type" and "change" events

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-06-11 21:48:18 UTC (rev 33458)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -1,27 +1,20 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
+import static org.drools.ide.common.client.modeldriven.brl.ExpressionPartHelper.getExpressionPartForField;
+import static org.drools.ide.common.client.modeldriven.brl.ExpressionPartHelper.getExpressionPartForGlobalVariable;
+import static org.drools.ide.common.client.modeldriven.brl.ExpressionPartHelper.getExpressionPartForMethod;
+
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.drools.guvnor.client.common.SmallLabel;
 import org.drools.guvnor.client.messages.Constants;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.Widget;
-import org.drools.guvnor.client.common.SmallLabel;
-import org.drools.ide.common.client.modeldriven.MethodInfo;
 import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine;
-import org.drools.ide.common.client.modeldriven.brl.ExpressionCollection;
 import org.drools.ide.common.client.modeldriven.brl.ExpressionCollectionIndex;
-import org.drools.ide.common.client.modeldriven.brl.ExpressionField;
 import org.drools.ide.common.client.modeldriven.brl.ExpressionFieldVariable;
 import org.drools.ide.common.client.modeldriven.brl.ExpressionFormLine;
-import org.drools.ide.common.client.modeldriven.brl.ExpressionGlobalVariable;
 import org.drools.ide.common.client.modeldriven.brl.ExpressionMethod;
 import org.drools.ide.common.client.modeldriven.brl.ExpressionPart;
 import org.drools.ide.common.client.modeldriven.brl.ExpressionText;
@@ -29,338 +22,348 @@
 import org.drools.ide.common.client.modeldriven.brl.FactPattern;
 import org.drools.ide.common.client.modeldriven.brl.RuleModel;
 
-public class ExpressionBuilder extends RuleModellerWidget {
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Widget;
 
-    private static final String DELETE_VALUE = "_delete_";
-    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 HorizontalPanel panel = new HorizontalPanel();
-    private ExpressionFormLine expression;
-    private boolean readOnly;
+public class ExpressionBuilder extends RuleModellerWidget implements HasExpressionTypeChangeHandlers, HasExpressionChangeHandlers {
 
-    public ExpressionBuilder(RuleModeller modeller,
-            ExpressionFormLine expression) {
-        this(modeller, expression, false);
-    }
+	private static final String DELETE_VALUE = "_delete_";
+	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 HorizontalPanel panel = new HorizontalPanel();
+	private ExpressionFormLine expression;
+	private boolean readOnly;
 
-    public ExpressionBuilder(RuleModeller modeller,
-            ExpressionFormLine expression, Boolean readOnly) {
-        super(modeller);
+	public ExpressionBuilder(RuleModeller modeller, ExpressionFormLine expression) {
+		this(modeller, expression, false);
+	}
 
-        if (readOnly == null){
-            this.readOnly = !modeller.getSuggestionCompletions().containsFactType(modeller.getSuggestionCompletions().getFactNameFromType(this.expression.getRootExpression().getClassType()));
-        }else{
-            this.readOnly = readOnly;
-        }
+	public ExpressionBuilder(RuleModeller modeller, ExpressionFormLine expression, Boolean readOnly) {
+		super(modeller);
 
-        panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
+		if (readOnly == null) {
+			this.readOnly = !modeller.getSuggestionCompletions().containsFactType(
+					modeller.getSuggestionCompletions().getFactNameFromType(
+							this.expression.getRootExpression().getClassType()));
+		} else {
+			this.readOnly = readOnly;
+		}
 
-        this.expression = expression;
-        if (expression == null || expression.getText().length() == 0) {
-            if (this.readOnly) {
-                panel.add(new SmallLabel("<b>-</b>"));
-            } else {
-                panel.add(createStartPointWidget());
-            }
-        } else {
-            if (this.readOnly) {
-                panel.add(new SmallLabel("<b>" + expression.getText() + "</b>"));
-            } else {
-                panel.add(new SmallLabel("<b>" + expression.getText() + ".</b>"));
-                panel.add(getWidgetForCurrentType());
-            }
-        }
-        initWidget(panel);
-    }
+		panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
 
-    private Widget createStartPointWidget() {
-        ListBox startPoint = new ListBox();
-        panel.add(startPoint);
+		this.expression = expression;
+		if (expression == null || expression.isEmpty()) {
+			if (this.readOnly) {
+				panel.add(new SmallLabel("<b>-</b>"));
+			} else {
+				panel.add(createStartPointWidget());
+			}
+		} else {
+			if (this.readOnly) {
+				panel.add(new SmallLabel("<b>" + expression.getText() + "</b>"));
+			} else {
+				panel.add(new SmallLabel("<b>" + expression.getText() + ".</b>"));
+				panel.add(getWidgetForCurrentType());
+			}
+		}
+		initWidget(panel);
+	}
 
-        startPoint.addItem(constants.ChooseDotDotDot(), "");
+	private Widget createStartPointWidget() {
+		ListBox startPoint = new ListBox();
+		panel.add(startPoint);
 
-        //TODO {baunax} uncomment when global collections is implemented.
-//		for (String gc : getCompletionEngine().getGlobalCollections()) {
-//			startPoint.addItem(gc, GLOBAL_COLLECTION_VALUE_PREFIX + "." + gc);
-//		}
+		startPoint.addItem(constants.ChooseDotDotDot(), "");
 
-        for (String gv : getCompletionEngine().getGlobalVariables()) {
-            startPoint.addItem(gv, GLOBAL_VARIABLE_VALUE_PREFIX + "." + gv);
-        }
+		// TODO {baunax} uncomment when global collections is implemented.
+		// for (String gc : getCompletionEngine().getGlobalCollections()) {
+		// startPoint.addItem(gc, GLOBAL_COLLECTION_VALUE_PREFIX + "." + gc);
+		// }
 
-        for (String v : getRuleModel().getBoundFacts()) {
-            startPoint.addItem(v, VARIABLE_VALUE_PREFIX + "." + v);
-        }
+		for (String gv : getCompletionEngine().getGlobalVariables()) {
+			startPoint.addItem(gv, GLOBAL_VARIABLE_VALUE_PREFIX + "." + gv);
+		}
 
-        startPoint.setVisibleItemCount(1);
-        startPoint.addChangeListener(new ChangeListener() {
+		for (String v : getRuleModel().getBoundFacts()) {
+			startPoint.addItem(v, VARIABLE_VALUE_PREFIX + "." + v);
+		}
 
-            public void onChange(Widget sender) {
-                ListBox lb = (ListBox) sender;
-                int index = lb.getSelectedIndex();
-                if (index > 0) {
-                    ExpressionBuilder.this.makeDirty();
-                    startPointChange(lb.getValue(index));
-                }
-            }
-        });
-        return startPoint;
-    }
+		startPoint.setVisibleItemCount(1);
+		startPoint.addChangeHandler(new ChangeHandler() {
 
-    private void startPointChange(String value) {
-        setModified(true);
-        panel.clear();
-        Widget w;
-        int dotPos = value.indexOf('.');
-        String prefix = value.substring(0, dotPos);
-        String attrib = value.substring(dotPos + 1);
-        if (prefix.equals(VARIABLE_VALUE_PREFIX)) {
-            FactPattern fact = getRuleModel().getBoundFact(attrib);
-            ExpressionPart variable;
-            if (fact!=null){
-                variable = new ExpressionVariable(fact);
-            }else{
-               variable = new ExpressionFieldVariable(attrib);
-            }
-            expression.appendPart(variable);
+			public void onChange(ChangeEvent event) {
+				ListBox lb = (ListBox) event.getSource();
+				int index = lb.getSelectedIndex();
+				if (index > 0) {
+					ExpressionBuilder.this.makeDirty();
+					startPointChange(lb.getValue(index));
+				}
+			}
+		});
+		return startPoint;
+	}
 
-        } else if (prefix.equals(GLOBAL_VARIABLE_VALUE_PREFIX)) {
-            String globalVarType = getCompletionEngine().getGlobalVariable(attrib);
-            ExpressionGlobalVariable variable = new ExpressionGlobalVariable(attrib, globalVarType, globalVarType);
-            expression.appendPart(variable);
-        }
-        w = getWidgetForCurrentType();
+	@Override
+	public void makeDirty() {
+		super.makeDirty();
+		setModified(true);
+	}
 
-        if (!expression.isEmpty()) {
-            panel.add(new SmallLabel("<b>"+expression.getText()+".</b>"));
-        }
-        if (w != null) {
-            panel.add(w);
-        }
+	private void startPointChange(String value) {
+		setModified(true);
+		panel.clear();
+		Widget w;
+		int dotPos = value.indexOf('.');
+		String prefix = value.substring(0, dotPos);
+		String attrib = value.substring(dotPos + 1);
+		if (prefix.equals(VARIABLE_VALUE_PREFIX)) {
+			FactPattern fact = getRuleModel().getBoundFact(attrib);
+			ExpressionPart variable;
+			if (fact != null) {
+				variable = new ExpressionVariable(fact);
+			} else {
+				//TODO {baunax} fix it!!! to make recursive
+				variable = new ExpressionFieldVariable(attrib);
+			}
+			expression.appendPart(variable);
 
-        // panel.add(getWidgetFor(startPoint.getValue(index)));
-        // ExpressionBuilder.this.expression.appendText(v);
-    }
+		} else if (prefix.equals(GLOBAL_VARIABLE_VALUE_PREFIX)) {
+			expression.appendPart(getExpressionPartForGlobalVariable(getCompletionEngine(), attrib));
+		}
+		w = getWidgetForCurrentType();
 
-    private Widget getWidgetForCurrentType() {
-        if (expression.isEmpty()) {
-            return createStartPointWidget();
-        }
-        String factName = getCompletionEngine().getFactNameFromType(
-                getCurrentClassType());
-        if (factName != null) {
-            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());
-            }
+		if (!expression.isEmpty()) {
+			panel.add(new SmallLabel("<b>" + expression.getText() + ".</b>"));
+		}
+		if (w != null) {
+			panel.add(w);
+		}
+		fireExpressionChangeEvent();
+		fireExpressionTypeChangeEvent();
+	}
 
-            lb.addChangeListener(new ChangeListener() {
+	private Widget getWidgetForCurrentType() {
+		if (expression.isEmpty()) {
+			return createStartPointWidget();
+		}
+		
+		ChangeHandler ch = new ChangeHandler() {
+			public void onChange(ChangeEvent event) {
+				ListBox box = (ListBox) event.getSource();
+				panel.remove(box);
+				if (box.getSelectedIndex() > 0) {
+					onChangeSelection(box.getValue(box.getSelectedIndex()));
+				}
+			}
+		};
+		
+		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.addChangeHandler(ch);
+		return lb;
+	}
 
-                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 (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() {
+	private void onCollectionChange(String value) {
+		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"));
 
-                public void onChange(Widget sender) {
-                    ListBox box = (ListBox) sender;
-                    panel.remove(box);
-                    if (box.getSelectedIndex() > 0) {
-                        onChangeSelection(box.getValue(box.getSelectedIndex()));
-                    }
-                }
-            });
-            return lb;
-        }
-//		return null;
-    }
+				collectionIndex.putParam("index", index);
+				expression.appendPart(collectionIndex);
+			}
+		}
+	}
 
-    private void onCollectionChange(String value) {
-        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"));
+	private void onChangeSelection(String value) {
+		setModified(true);
+		String oldType = getCurrentGenericType();
+		String prevFactName = null;
+		if (DELETE_VALUE.equals(value)) {
+			expression.removeLast();
+		} else if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
+			onCollectionChange(value);
+		} else if (SuggestionCompletionEngine.TYPE_STRING.equals(getCurrentGenericType())) {
+			if ("size".equals(value)) {
+				expression.appendPart(new ExpressionMethod("size", "int", SuggestionCompletionEngine.TYPE_NUMERIC));
+			} else if ("isEmpty".equals(value)) {
+				expression.appendPart(new ExpressionText(".size() == 0", "", SuggestionCompletionEngine.TYPE_NUMERIC));
+			}
+		} else {
+			int dotPos = value.indexOf('.');
+			String prefix = value.substring(0, dotPos);
+			String attrib = value.substring(dotPos + 1);
 
-                collectionIndex.putParam("index", index);
-                expression.appendPart(collectionIndex);
-            }
-        }
-    }
+			prevFactName = getCompletionEngine().getFactNameFromType(getCurrentClassType());
+			// String genericType = SuggestionCompletionEngine.TYPE_OBJECT;
+			if (FIElD_VALUE_PREFIX.equals(prefix)) {
+				expression.appendPart(getExpressionPartForField(getCompletionEngine(), prevFactName, attrib));
+			} else if (METHOD_VALUE_PREFIX.equals(prefix)) {
+				expression.appendPart(getExpressionPartForMethod(getCompletionEngine(), prevFactName, attrib));
+			}
+		}
+		Widget w = getWidgetForCurrentType();
 
-    private void onChangeSelection(String value) {
-        setModified(true);
+		panel.clear();
+		if (!expression.isEmpty()) {
+			panel.add(new SmallLabel("<b>" + expression.getText() + ".</b>"));
+		}
+		if (w != null) {
+			panel.add(w);
+		}
+		fireExpressionChangeEvent();
+		fireExpressionTypeChangeEvent(oldType);
+	}
 
-        String prevFactName = null;
-        if (DELETE_VALUE.equals(value)) {
-            expression.removeLast();
-        } else if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
-            onCollectionChange(value);
-        } else if (SuggestionCompletionEngine.TYPE_STRING.equals(getCurrentGenericType())) {
-            if ("size".equals(value)) {
-                expression.appendPart(new ExpressionMethod("size", "int", SuggestionCompletionEngine.TYPE_NUMERIC));
-            } else if ("isEmpty".equals(value)) {
-                expression.appendPart(new ExpressionText(".size() == 0", "", SuggestionCompletionEngine.TYPE_NUMERIC));
-            }
-        } else {
-            int dotPos = value.indexOf('.');
-            String prefix = value.substring(0, dotPos);
-            String attrib = value.substring(dotPos + 1);
+	private Map<String, String> getCompletionsForCurrentType() {
+		Map<String, String> completions = new LinkedHashMap<String, String>();
 
-            prevFactName = getCompletionEngine().getFactNameFromType(
-                    getCurrentClassType());
-//			String genericType = SuggestionCompletionEngine.TYPE_OBJECT;
-            if (FIElD_VALUE_PREFIX.equals(prefix)) {
-                String fieldClassName = getCompletionEngine().getFieldClassName(prevFactName, attrib);
-                String fieldGenericType = getCompletionEngine().getFieldType(prevFactName, attrib);
-                if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(fieldGenericType)) {
-                    String fieldParametricType = getCompletionEngine().getParametricFieldType(prevFactName, attrib);
-                    expression.appendPart(new ExpressionCollection(attrib, fieldClassName, fieldGenericType, fieldParametricType));
-                } else {
-                    expression.appendPart(new ExpressionField(attrib, fieldClassName, fieldGenericType));
-                }
-            } else if (METHOD_VALUE_PREFIX.equals(prefix)) {
-                MethodInfo mi = getCompletionEngine().getMethodinfo(prevFactName, attrib);
-                if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(mi.getGenericType())) {
-                    expression.appendPart(new ExpressionCollection(attrib, mi.getReturnClassType(), mi.getGenericType(), mi.getParametricReturnType()));
-                } else {
-                    expression.appendPart(new ExpressionMethod(mi.getName(), mi.getReturnClassType(), mi.getGenericType()));
-                }
-            }
-        }
-        Widget w = getWidgetForCurrentType();
+		if (SuggestionCompletionEngine.TYPE_FINAL_OBJECT.equals(getCurrentGenericType())) {
+			return completions;
+		}
 
-        panel.clear();
-        if (!expression.isEmpty()) {
-            panel.add(new SmallLabel("<b>"+expression.getText()+".</b>"));
-        }
-        if (w != null) {
-            panel.add(w);
-        }
-    }
+		if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
+			completions.put("size()", "size");
+			completions.put("first()", "first");
+			completions.put("last()", "last");
+			completions.put("isEmpty()", "isEmpty");
+			return completions;
+		}
 
-    private Map<String, String> getCompletionsForCurrentType() {
-        Map<String, String> completions = new LinkedHashMap<String, String>();
+		if (SuggestionCompletionEngine.TYPE_STRING.equals(getCurrentGenericType())) {
+			completions.put("size()", "size");
+			completions.put("isEmpty()", "isEmpty");
+			return completions;
+		}
 
-        if (SuggestionCompletionEngine.TYPE_FINAL_OBJECT.equals(getCurrentGenericType())) {
-            return completions;
-        }
+		if (SuggestionCompletionEngine.TYPE_BOOLEAN.equals(getCurrentGenericType())
+				|| SuggestionCompletionEngine.TYPE_NUMERIC.equals(getCurrentGenericType())
+				|| SuggestionCompletionEngine.TYPE_DATE.equals(getCurrentGenericType())
+				|| SuggestionCompletionEngine.TYPE_OBJECT.equals(getCurrentGenericType())) {
+			return completions;
+		}
 
-        if (SuggestionCompletionEngine.TYPE_COLLECTION.equals(getCurrentGenericType())) {
-            completions.put("size()", "size");
-            completions.put("first()", "first");
-            completions.put("last()", "last");
-            completions.put("isEmpty()", "isEmpty");
-            return completions;
-        }
+		String factName = getCompletionEngine().getFactNameFromType(getCurrentClassType());
+		if (factName != null) {
+			// we currently only support 0 param method calls
+			List<String> methodNames = getCompletionEngine().getMethodFullNames(factName, 0);
 
-        if (SuggestionCompletionEngine.TYPE_STRING.equals(getCurrentGenericType())) {
-            completions.put("size()", "size");
-            completions.put("isEmpty()", "isEmpty");
-            return completions;
-        }
+			for (String field : getCompletionEngine().getFieldCompletions(factName)) {
+				boolean changed = false;
+				for (Iterator<String> i = methodNames.iterator(); i.hasNext();) {
+					String method = i.next();
+					if (method.startsWith(field)) {
+						completions.put(method, METHOD_VALUE_PREFIX + "." + method);
+						i.remove();
+						changed = true;
+					}
+				}
+				if (!changed) {
+					completions.put(field, FIElD_VALUE_PREFIX + "." + field);
+				}
+			}
+		}
+		// else {We don't know anything about this type, so return empty map}
+		return completions;
+	}
 
-        if (SuggestionCompletionEngine.TYPE_BOOLEAN.equals(getCurrentGenericType())
-                || SuggestionCompletionEngine.TYPE_NUMERIC.equals(getCurrentGenericType())
-                || SuggestionCompletionEngine.TYPE_DATE.equals(getCurrentGenericType())
-                || SuggestionCompletionEngine.TYPE_OBJECT.equals(getCurrentGenericType())) {
-            return completions;
-        }
+	// private String getCurrentPartName() {
+	// return expression.getCurrentName();
+	// }
 
-        String factName = getCompletionEngine().getFactNameFromType(getCurrentClassType());
-        if (factName != null) {
-            //we currently only support 0 param method calls
-            List<String> methodNames = getCompletionEngine().getMethodFullNames(factName, 0);
+	private RuleModel getRuleModel() {
+		return this.getModeller().getModel();
+	}
 
-            for (String field : getCompletionEngine().getFieldCompletions(
-                    factName)) {
-                boolean changed = false;
-                for (Iterator<String> i = methodNames.iterator(); i.hasNext();) {
-                    String method = i.next();
-                    if (method.startsWith(field)) {
-                        completions.put(method, METHOD_VALUE_PREFIX + "." + method);
-                        i.remove();
-                        changed = true;
-                    }
-                }
-                if (!changed) {
-                    completions.put(field, FIElD_VALUE_PREFIX + "." + field);
-                }
-            }
-        }
-        //else {We don't know anything about this type, so return empty map}
-        return completions;
-    }
+	private SuggestionCompletionEngine getCompletionEngine() {
+		return this.getModeller().getSuggestionCompletions();
+	}
 
-    private String getCurrentPartName() {
-        return expression.getCurrentName();
-    }
+	private String getCurrentClassType() {
+		return expression.getClassType();
+	}
 
-    private RuleModel getRuleModel() {
-        return this.getModeller().getModel();
-    }
+	private String getCurrentGenericType() {
+		return expression.getGenericType();
+	}
 
-    private SuggestionCompletionEngine getCompletionEngine() {
-        return this.getModeller().getSuggestionCompletions();
-    }
+	private String getPreviousGenericType() {
+		return expression.getPreviousGenericType();
+	}
 
-    private String getCurrentClassType() {
-        return expression.getClassType();
-    }
+	private String getCurrentParametricType() {
+		return expression.getParametricType();
+	}
 
-    private String getCurrentGenericType() {
-        return expression.getGenericType();
-    }
+	// private String getPreviousClassType() {
+	// return expression.getPreviousType();
+	// }
+	//
+	// private ExpressionPart getRootExpression() {
+	// return expression.getRootExpression();
+	// }
 
-    private String getCurrentParametricType() {
-        return expression.getParametricType();
-    }
+	@Override
+	public boolean isReadOnly() {
+		return this.readOnly;
+	}
 
-    private String getPreviousClassType() {
-        return expression.getPreviousType();
-    }
+	/**
+	 * @see org.drools.guvnor.client.modeldriven.ui.HasExpressionTypeChangeHandlers#addExpressionTypeChangeHandler(org.drools.guvnor.client.modeldriven.ui.ExpressionTypeChangeHandler)
+	 */
+	public HandlerRegistration addExpressionTypeChangeHandler(ExpressionTypeChangeHandler handler) {
+		return addHandler(handler, ExpressionTypeChangeEvent.getType());
+	}
 
-    private ExpressionPart getRootExpression() {
-        return expression.getRootExpression();
-    }
-    
-    @Override
-    public boolean isReadOnly() {
-        return this.readOnly;
-    }
+	private void fireExpressionChangeEvent() {
+		fireEvent(new ExpressionChangeEvent());
+	}
+	
+	private void fireExpressionTypeChangeEvent() {
+		fireExpressionTypeChangeEvent(getPreviousGenericType());
+	}
+
+	private void fireExpressionTypeChangeEvent(String previousGenericType) {
+		String currentGenericType = getCurrentGenericType();
+		if ((previousGenericType == null || !previousGenericType.equals(currentGenericType)) 
+				|| currentGenericType != null) {
+			fireEvent(new ExpressionTypeChangeEvent(previousGenericType, currentGenericType));
+		}
+	}
+
+	public HandlerRegistration addExpressionChangeHandler(ExpressionChangeHandler handler) {
+		return addHandler(handler, ExpressionChangeEvent.getType());
+	}
 }

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeEvent.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -0,0 +1,35 @@
+package org.drools.guvnor.client.modeldriven.ui;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import com.google.gwt.event.shared.GwtEvent;
+
+public class ExpressionChangeEvent extends GwtEvent<ExpressionChangeHandler> {
+	private static final GwtEvent.Type<ExpressionChangeHandler> TYPE = new GwtEvent.Type<ExpressionChangeHandler>();
+	
+	@Override
+	protected void dispatch(ExpressionChangeHandler handler) {
+		handler.onExpressionChanged(this);
+	}
+
+	@Override
+	public GwtEvent.Type<ExpressionChangeHandler> getAssociatedType() {
+		return getType();
+	}
+	
+	public static final Type<ExpressionChangeHandler> getType() {
+		return TYPE;
+	}
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeEvent.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeHandler.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -0,0 +1,21 @@
+package org.drools.guvnor.client.modeldriven.ui;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import com.google.gwt.event.shared.EventHandler;
+
+public interface ExpressionChangeHandler extends EventHandler {
+	void onExpressionChanged(ExpressionChangeEvent event);
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionChangeHandler.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeEvent.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -0,0 +1,56 @@
+package org.drools.guvnor.client.modeldriven.ui;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import com.google.gwt.event.shared.GwtEvent;
+
+public class ExpressionTypeChangeEvent extends GwtEvent<ExpressionTypeChangeHandler> {
+	private static final GwtEvent.Type<ExpressionTypeChangeHandler> TYPE = new GwtEvent.Type<ExpressionTypeChangeHandler>();
+	private String oldType;
+	private String newType;
+
+	public ExpressionTypeChangeEvent(String oldType, String newType) {
+		super();
+		this.oldType = oldType;
+		this.newType = newType;
+	}
+	
+	public String getOldType() {
+		return oldType;
+	}
+
+	public String getNewType() {
+		return newType;
+	}
+
+	@Override
+	protected void dispatch(ExpressionTypeChangeHandler handler) {
+		
+		try {
+			handler.onExpressionTypeChanged(this);
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public GwtEvent.Type<ExpressionTypeChangeHandler> getAssociatedType() {
+		return getType();
+	}
+	
+	public static final Type<ExpressionTypeChangeHandler> getType() {
+		return TYPE;
+	}
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeEvent.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeHandler.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -0,0 +1,21 @@
+package org.drools.guvnor.client.modeldriven.ui;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import com.google.gwt.event.shared.EventHandler;
+
+public interface ExpressionTypeChangeHandler extends EventHandler {
+	void onExpressionTypeChanged(ExpressionTypeChangeEvent event);
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionTypeChangeHandler.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionChangeHandlers.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionChangeHandlers.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionChangeHandlers.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -0,0 +1,10 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.event.shared.HasHandlers;
+
+public interface HasExpressionChangeHandlers extends HasHandlers {
+
+	HandlerRegistration addExpressionChangeHandler(ExpressionChangeHandler handler);
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionChangeHandlers.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionTypeChangeHandlers.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionTypeChangeHandlers.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionTypeChangeHandlers.java	2010-06-11 21:54:53 UTC (rev 33459)
@@ -0,0 +1,10 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.event.shared.HasHandlers;
+
+public interface HasExpressionTypeChangeHandlers extends HasHandlers {
+
+	HandlerRegistration addExpressionTypeChangeHandler(ExpressionTypeChangeHandler handler);
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/HasExpressionTypeChangeHandlers.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF



More information about the jboss-svn-commits mailing list