[jboss-svn-commits] JBL Code SVN: r31213 - labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/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
Mon Jan 25 17:51:46 EST 2010


Author: baunax
Date: 2010-01-25 17:51:46 -0500 (Mon, 25 Jan 2010)
New Revision: 31213

Modified:
   labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
Log:
refactored ExpressionFormLine to each part be in its own class

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-25 22:50:56 UTC (rev 31212)
+++ labs/jbossrules/branches/guvnor_expressionEditor2_baunax_esteban/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-01-25 22:51:46 UTC (rev 31213)
@@ -1,11 +1,17 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.drools.guvnor.client.common.DirtyableComposite;
 import org.drools.guvnor.client.messages.Constants;
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+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.ExpressionVariable;
 import org.drools.guvnor.client.modeldriven.brl.FactPattern;
 import org.drools.guvnor.client.modeldriven.brl.RuleModel;
 
@@ -17,6 +23,7 @@
 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";
@@ -27,21 +34,21 @@
 	private FlowPanel panel = new FlowPanel();
 
 	private RuleModeller modeller;
-	private String currentType = null;
+	private ExpressionFormLine expression;
 	
-	
-	public ExpressionBuilder(RuleModeller modeller, String expression) {
+	public ExpressionBuilder(RuleModeller modeller, ExpressionFormLine expression) {
 		super();
-		if (expression == null || expression.isEmpty()) {
+		this.expression = expression;
+		if (expression == null || expression.getText().isEmpty()) {
 			final ListBox startPoint = new ListBox();
 			panel.add(startPoint);
 			this.modeller = modeller;
-			startPoint.addItem(constants.ChooseDotDotDot(), ".");
-			for (String gc : getCompletions().getGlobalCollections()) {
+			startPoint.addItem(constants.ChooseDotDotDot(), "");
+			for (String gc : getCompletionEngine().getGlobalCollections()) {
 				startPoint.addItem(gc, GLOBAL_COLLECTION_VALUE_PREFIX + "." + gc);
 			}
 
-			for (String gv : getCompletions().getGlobalVariables()) {
+			for (String gv : getCompletionEngine().getGlobalVariables()) {
 				startPoint.addItem(gv, GLOBAL_VARIABLE_VALUE_PREFIX + "." + gv);
 			}
 
@@ -54,9 +61,8 @@
 				public void onChange(Widget sender) {
 					int index = startPoint.getSelectedIndex();
 					if (index > 0) {
-						panel.clear();
-						panel.add(new Label(startPoint.getItemText(index) + "."));
-						panel.add(getWidgetFor(startPoint.getValue(index)));
+						ExpressionBuilder.this.makeDirty();
+						startPointChange(startPoint.getValue(index));
 					}
 				}
 			});
@@ -66,6 +72,98 @@
 		}
 	}
 
+	private void startPointChange(String value) {
+		panel.clear();
+		Widget w;
+		if (value.startsWith(VARIABLE_VALUE_PREFIX)) {
+			FactPattern fact = getRuleModel().getBoundFact(value.substring(VARIABLE_VALUE_PREFIX.length() + 1));
+			ExpressionVariable variable = new ExpressionVariable(fact);
+			expression.appendPart(variable);
+			w = getWidgetForCurrentType();
+			
+			panel.add(new Label(expression.getText()));
+			if (w != null) {
+				panel.add(new Label("."));
+				panel.add(w);
+			}
+		}
+		
+		
+//		panel.add(getWidgetFor(startPoint.getValue(index)));
+//		ExpressionBuilder.this.expression.appendText(v);
+	}
+	
+	private Widget getWidgetForCurrentType() {
+		ListBox lb = new ListBox();
+		lb.setVisibleItemCount(1);
+		lb.addItem(constants.ChooseDotDotDot(), "");
+		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;
+	}
+	
+	private void onChangeSelection(String value) {
+		int dotPos = value.indexOf('.');
+		String prefix = value.substring(0, dotPos);
+		String option = value.substring(dotPos + 1);
+		Widget w = null;
+		if (FIElD_VALUE_PREFIX.equals(prefix)) {
+			String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+			String fieldClassName = getCompletionEngine().getFieldClassName(factName, option);
+			expression.appendPart(new ExpressionField(option, fieldClassName));
+		} else if (METHOD_VALUE_PREFIX.equals(prefix)) {
+			String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+			String methodType = getCompletionEngine().getMethodType(factName, option);
+			expression.appendPart(new ExpressionMethod(
+					option.substring(0, option.indexOf('(')), 
+					methodType));
+		}
+		w = getWidgetForCurrentType();
+		panel.clear();
+		panel.add(new Label(expression.getText()));
+		if (w != null) {
+			panel.add(w);
+		}
+	}
+
+	private Map<String, String> getCompletionsForCurrentType() {
+		String factName = getCompletionEngine().getFactNameFromType(getCurrentType());
+		List<String> methodNames = getCompletionEngine().getMethodFullNames(factName);
+		Map<String, String> completions = new LinkedHashMap<String, String>();
+		
+		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);
+			}
+		}
+		return completions;
+	}
+	
+	private void parseExpression(ExpressionFormLine expression) {
+		
+	}
+
+	/*
 	protected Widget getWidgetFor(String value) {
 		if (value == null || value.isEmpty()) {
 			throw new IllegalArgumentException("value is empty");
@@ -73,13 +171,13 @@
 		if (value.startsWith(VARIABLE_VALUE_PREFIX)) {
 			FactPattern fact = getRuleModel().getBoundFact(value.substring(VARIABLE_VALUE_PREFIX.length() + 1));
 			
-			setCurrentType(fact.factType);
 			ListBox lb = new ListBox();
 			lb.setVisibleItemCount(1);
+			lb.addItem(constants.ChooseDotDotDot(), "");
 			
-			List<String> methodNames = getCompletions().getMethodFullNames(fact.factType);
+			List<String> methodNames = getCompletionEngine().getMethodFullNames(fact.factType);
 			
-			for (String field : getCompletions().getFieldCompletions(fact.factType)) {
+			for (String field : getCompletionEngine().getFieldCompletions(fact.factType)) {
 				boolean changed = false;
 				for (Iterator<String> i = methodNames.iterator(); i.hasNext();) {
 					String method = i.next();
@@ -94,33 +192,41 @@
 				}
 			}
 			
+			lb.addChangeListener(new ChangeListener() {
+				
+				public void onChange(Widget sender) {
+					ExpressionBuilder.this.makeDirty();
+					ListBox box = (ListBox) sender;
+					if (box.getSelectedIndex() > 0);
+					panel.remove(panel.getWidgetCount() - 1);
+					String v = box.getValue(box.getSelectedIndex());
+					panel.add(new Label(v.substring(v.indexOf('.') + 1)));
+					panel.add(getWidgetFor(v));
+				}
+			});
+			
 			return lb;
 		} else if (value.startsWith(GLOBAL_COLLECTION_VALUE_PREFIX)) {
 			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
 		} else if (value.startsWith(GLOBAL_VARIABLE_VALUE_PREFIX)) {
 			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
+		} else if (value.startsWith(METHOD_VALUE_PREFIX)) {
+			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
+		} else if (value.startsWith(FIElD_VALUE_PREFIX)) {
+			return new Label("GLOBAL_COLLECTION_VALUE_PREFIX not implemented");
 		}
 		throw new IllegalArgumentException("value has invalidad prefix: '" + value + "'");
-	}
+	}*/
 
-	private void parseExpression(String expression) {
-		throw new IllegalStateException("not implemented yet");
-	}
-
 	private RuleModel getRuleModel() {
 		return modeller.getModel();
 	}
 
-	private SuggestionCompletionEngine getCompletions() {
+	private SuggestionCompletionEngine getCompletionEngine() {
 		return modeller.getSuggestionCompletions();
 	}
 
 	public String getCurrentType() {
-		return currentType;
+		return expression.getType();
 	}
-
-	private void setCurrentType(String currentType) {
-		this.currentType = currentType;
-	}
-
 }



More information about the jboss-svn-commits mailing list