[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