[jboss-svn-commits] JBL Code SVN: r17074 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/modeldriven/ui and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Dec 6 22:22:07 EST 2007
Author: michael.neale at jboss.com
Date: 2007-12-06 22:22:07 -0500 (Thu, 06 Dec 2007)
New Revision: 17074
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValueChanged.java
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-1367 Upgrading MVEL version
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValueChanged.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValueChanged.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValueChanged.java 2007-12-07 03:22:07 UTC (rev 17074)
@@ -0,0 +1,9 @@
+package org.drools.brms.client.common;
+
+/**
+ * Well this should be pretty obvious.
+ * @author Michael Neale
+ */
+public interface ValueChanged {
+ public void valueChanged(String newValue);
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValueChanged.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java 2007-12-07 03:21:11 UTC (rev 17073)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java 2007-12-07 03:22:07 UTC (rev 17074)
@@ -5,6 +5,7 @@
import org.drools.brms.client.common.FormStylePopup;
import org.drools.brms.client.common.InfoPopup;
import org.drools.brms.client.common.Lbl;
+import org.drools.brms.client.common.ValueChanged;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.modeldriven.brl.ActionFieldValue;
@@ -49,7 +50,7 @@
root.clear();
if (enums != null && enums.length > 0) {
root.add(ConstraintValueEditor.enumDropDown(value.value,
- new ConstraintValueEditor.ValueChanged() {
+ new ValueChanged() {
public void valueChanged(String newValue) {
value.value = newValue;
makeDirty();
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java 2007-12-07 03:21:11 UTC (rev 17073)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java 2007-12-07 03:22:07 UTC (rev 17074)
@@ -24,6 +24,7 @@
import org.drools.brms.client.common.FormStylePopup;
import org.drools.brms.client.common.InfoPopup;
import org.drools.brms.client.common.Lbl;
+import org.drools.brms.client.common.ValueChanged;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.modeldriven.brl.FactPattern;
import org.drools.brms.client.modeldriven.brl.ISingleFieldConstraint;
@@ -360,9 +361,8 @@
}
- static interface ValueChanged {
- public void valueChanged(String newValue);
- }
-}
\ No newline at end of file
+
+}
+
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java 2007-12-07 03:21:11 UTC (rev 17073)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java 2007-12-07 03:22:07 UTC (rev 17074)
@@ -8,11 +8,13 @@
import java.util.List;
import java.util.Map;
+import org.drools.brms.client.common.DirtyableComposite;
import org.drools.brms.client.common.DirtyableFlexTable;
import org.drools.brms.client.common.ErrorPopup;
import org.drools.brms.client.common.FormStylePopup;
import org.drools.brms.client.common.GenericCallback;
import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.ValueChanged;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.modeldriven.testing.ExecutionTrace;
import org.drools.brms.client.modeldriven.testing.FactData;
@@ -23,6 +25,7 @@
import org.drools.brms.client.modeldriven.testing.VerifyFact;
import org.drools.brms.client.modeldriven.testing.VerifyField;
import org.drools.brms.client.modeldriven.testing.VerifyRuleFired;
+import org.drools.brms.client.modeldriven.ui.ConstraintValueEditor;
import org.drools.brms.client.packages.SuggestionCompletionCache;
import org.drools.brms.client.rpc.BuilderResult;
import org.drools.brms.client.rpc.RepositoryServiceFactory;
@@ -486,7 +489,50 @@
return h;
}
+ public static Widget editableCell(final ValueChanged changeEvent, String factType, String fieldName, String initialValue, SuggestionCompletionEngine sce) {
+ String key = factType + "." + fieldName;
+ String flType = (String) sce.fieldTypes.get(key);
+ if (flType.equals(SuggestionCompletionEngine.TYPE_NUMERIC)) {
+ TextBox box = editableTextBox(changeEvent, fieldName, initialValue);
+ box.addKeyboardListener( new KeyboardListener() {
+ public void onKeyDown(Widget arg0, char arg1, int arg2) {}
+ public void onKeyPress(Widget w, char c, int i) {
+ if (Character.isLetter( c ) ) {
+ ((TextBox) w).cancelKey();
+ }
+ }
+ public void onKeyUp(Widget arg0, char arg1, int arg2) {}
+ } );
+ return box;
+ } else if (flType.equals(SuggestionCompletionEngine.TYPE_BOOLEAN )) {
+ String[] c = new String[] {"true", "false"};
+ return ConstraintValueEditor.enumDropDown(initialValue, changeEvent, c);
+ } else {
+ String[] enums = (String[]) sce.dataEnumLists.get(key);
+ if (enums != null) {
+ return ConstraintValueEditor.enumDropDown(initialValue, changeEvent, enums);
+ } else {
+ return editableTextBox(changeEvent, fieldName, initialValue);
+ }
+ }
+
+ }
+
+ private static TextBox editableTextBox(final ValueChanged changed, String fieldName, String initialValue) {
+ final TextBox tb = new TextBox();
+ tb.setText(initialValue);
+ tb.setTitle("Value for: " + fieldName);
+ tb.addChangeListener(new ChangeListener() {
+ public void onChange(Widget w) {
+ changed.valueChanged(tb.getText());
+ }
+ });
+
+ return tb;
+ }
+
+
}
@@ -499,7 +545,7 @@
* For capturing input for all the facts of a given type.
* @author Michael Neale
*/
-class DataInputWidget extends Composite {
+class DataInputWidget extends DirtyableComposite {
private Grid outer;
@@ -657,7 +703,7 @@
for (int i = 0; i < d.fieldData.size(); i++) {
FieldData fd = (FieldData) d.fieldData.get(i);
int fldRow = ((Integer) fields.get(fd.name)).intValue();
- t.setWidget(fldRow, col, editableCell(fd));
+ t.setWidget(fldRow, col, editableCell(fd, d.type));
presentFields.remove(fd.name);
}
@@ -666,7 +712,7 @@
int fldRow = ((Integer) e.getValue()).intValue();
FieldData fd = new FieldData((String) e.getKey(), "");
d.fieldData.add(fd);
- t.setWidget(fldRow, col, editableCell(fd));
+ t.setWidget(fldRow, col, editableCell(fd, d.type));
}
}
@@ -683,24 +729,81 @@
}
+ /**
+ * This will provide a cell editor. It will filter non numerics, show choices etc as appropriate.
+ * @param fd
+ * @param factType
+ * @return
+ */
+ private Widget editableCell(final FieldData fd, String factType) {
- private Widget editableCell(final FieldData fd) {
- final TextBox tb = new TextBox();
- tb.setText(fd.value);
- tb.setTitle("Value for: " + fd.name);
- tb.addChangeListener(new ChangeListener() {
- public void onChange(Widget w) {
- fd.value = tb.getText();
- }
- });
+ return ScenarioWidget.editableCell(new ValueChanged() {
+ public void valueChanged(String newValue) {
+ fd.value = newValue;
+ makeDirty();
+ }
+ }, factType, fd.name, fd.value, sce);
+// String key = factType + "." + fd.name;
+// String flType = (String) this.sce.fieldTypes.get(key);
+// if (flType.equals(SuggestionCompletionEngine.TYPE_NUMERIC)) {
+// TextBox box = editableTextBox(fd);
+// box.addKeyboardListener( new KeyboardListener() {
+// public void onKeyDown(Widget arg0, char arg1, int arg2) {}
+// public void onKeyPress(Widget w, char c, int i) {
+// if (Character.isLetter( c ) ) {
+// ((TextBox) w).cancelKey();
+// }
+// }
+// public void onKeyUp(Widget arg0, char arg1, int arg2) {}
+// } );
+// return box;
+// } else if (flType.equals(SuggestionCompletionEngine.TYPE_BOOLEAN )) {
+// String[] c = new String[] {"true", "false"};
+// return ConstraintValueEditor.enumDropDown(fd.value, new ValueChanged() {
+// public void valueChanged(String newValue) {
+// fd.value = newValue;
+// makeDirty();
+// }
+// }, c);
+//
+// } else {
+// String[] enums = (String[]) sce.dataEnumLists.get(key);
+// if (enums != null) {
+// return ConstraintValueEditor.enumDropDown(fd.value, new ValueChanged() {
+// public void valueChanged(String newValue) {
+// fd.value = newValue;
+// makeDirty();
+// }
+// }, enums);
+//
+// } else {
+// return editableTextBox(fd);
+// }
+// }
- //add stuff to check for numerics
- return tb;
+
}
+// private TextBox editableTextBox(final FieldData fd) {
+// final TextBox tb = new TextBox();
+// tb.setText(fd.value);
+// tb.setTitle("Value for: " + fd.name);
+// tb.addChangeListener(new ChangeListener() {
+// public void onChange(Widget w) {
+// fd.value = tb.getText();
+// }
+// });
+//
+// return tb;
+// }
+
+
+
+
+
}
class ConfigWidget extends Composite {
@@ -887,14 +990,17 @@
class VerifyFactWidget extends Composite {
private Grid outer;
private boolean showResults;
+ private String type;
+ private SuggestionCompletionEngine sce;
public VerifyFactWidget(final VerifyFact vf, final Scenario sc, final SuggestionCompletionEngine sce, boolean showResults) {
outer = new Grid(2, 1);
outer.getCellFormatter().setStyleName(0, 0, "modeller-fact-TypeHeader");
outer.getCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE );
outer.setStyleName("modeller-fact-pattern-Widget");
+ this.sce = sce;
HorizontalPanel ab = new HorizontalPanel();
- final String type = (String) sc.getVariableTypes().get(vf.name);
+ type = (String) sc.getVariableTypes().get(vf.name);
ab.add(new Label(type + " [" + vf.name + "] has values:"));
this.showResults = showResults;
@@ -957,15 +1063,16 @@
data.setWidget(i, 2, opr);
- final TextBox input = new TextBox();
- input.setText(fld.expected);
- input.addChangeListener(new ChangeListener() {
- public void onChange(Widget w) {
- fld.expected = input.getText();
- }
- });
- data.setWidget(i, 3, input);
+ Widget cellEditor = ScenarioWidget.editableCell(new ValueChanged() {
+ public void valueChanged(String newValue) {
+ fld.expected = newValue;
+ }
+
+ }, type, fld.fieldName, fld.expected, sce);
+
+ data.setWidget(i, 3, cellEditor);
+
Image del = new ImageButton("images/delete_item_small.gif", "Remove this field expectation.", new ClickListener() {
public void onClick(Widget w) {
if (Window.confirm("Are you sure you want to remove this field expectation?")) {
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java 2007-12-07 03:21:11 UTC (rev 17073)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java 2007-12-07 03:22:07 UTC (rev 17074)
@@ -67,6 +67,7 @@
import org.drools.brms.server.util.BRMSSuggestionCompletionLoader;
import org.drools.brms.server.util.MetaDataMapper;
import org.drools.brms.server.util.TableDisplayHandler;
+import org.drools.common.AbstractRuleBase;
import org.drools.common.DroolsObjectInputStream;
import org.drools.common.InternalWorkingMemory;
import org.drools.compiler.DrlParser;
@@ -1036,37 +1037,48 @@
@Restrict("#{identity.loggedIn}")
public ScenarioRunResult runScenario(String packageName, Scenario scenario)
throws SerializableException {
-
PackageItem item = this.repository.loadPackage(packageName);
- if (item.isBinaryUpToDate() && this.ruleBaseCache.containsKey(item.getUUID())) {
- return runScenario(scenario, item);
- } else {
- //we have to build the package, and try again.
- if (item.isBinaryUpToDate()) {
- this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item));
- return runScenario(scenario, item);
- } else {
- BuilderResult[] errs = this.buildPackage(null, false, item);
- if (errs == null || errs.length == 0) {
- this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item));
- return runScenario( scenario, item);
- } else {
- return new ScenarioRunResult(errs, null);
- }
- }
- }
+ //nasty classloader needed to make sure we use the same tree the whole time.
+ ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
+
+ try {
+ if (item.isBinaryUpToDate() && this.ruleBaseCache.containsKey(item.getUUID())) {
+ RuleBase rb = this.ruleBaseCache.get(item.getUUID());
+ AbstractRuleBase arb = (AbstractRuleBase) rb;
+ //load up the existing class loader from before
+ ClassLoader cl = arb.getConfiguration().getClassLoader();
+ Thread.currentThread().setContextClassLoader(cl);
+ return runScenario(scenario, item, cl);
+ } else {
+ //load up the classloader we are going to use
+ List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
+ ClassLoader cl = BRMSPackageBuilder.createClassLoader(jars);
+ Thread.currentThread().setContextClassLoader(cl);
+
+ //we have to build the package, and try again.
+ if (item.isBinaryUpToDate()) {
+ this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item, cl));
+ return runScenario(scenario, item, cl);
+ } else {
+ BuilderResult[] errs = this.buildPackage(null, false, item);
+ if (errs == null || errs.length == 0) {
+ this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item, cl));
+ return runScenario( scenario, item, cl);
+ } else {
+ return new ScenarioRunResult(errs, null);
+ }
+ }
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalCL);
+ }
}
- private RuleBase loadRuleBase(PackageItem item) throws DetailedSerializableException {
+ private RuleBase loadRuleBase(PackageItem item, ClassLoader cl) throws DetailedSerializableException {
try {
- List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
- ClassLoader cl = BRMSPackageBuilder.createClassLoader(jars);
RuleBase rb = RuleBaseFactory.newRuleBase(new RuleBaseConfiguration(cl));
-
-
- DroolsObjectInputStream in = new DroolsObjectInputStream(new ByteArrayInputStream(item.getCompiledPackageBytes()),
- cl);
+ DroolsObjectInputStream in = new DroolsObjectInputStream(new ByteArrayInputStream(item.getCompiledPackageBytes()), cl);
Package bin = (Package) in.readObject();
in.close();
rb.addPackage(bin);
@@ -1081,16 +1093,15 @@
}
private ScenarioRunResult runScenario(
- Scenario scenario, PackageItem item)
+ Scenario scenario, PackageItem item, ClassLoader cl)
throws DetailedSerializableException {
- //TODO: probably could avoid loading the classes by passing cl in.
+
RuleBase rb = ruleBaseCache.get(item.getUUID());
Package bin = rb.getPackages()[0];
- List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
- ClassLoader cl = BRMSPackageBuilder.createClassLoader(jars);
+
ClassTypeResolver res = new ClassTypeResolver(bin.getImports(), cl);
try {
- new ScenarioRunner(scenario, res, (InternalWorkingMemory) rb.newStatefulSession(false), cl);
+ new ScenarioRunner(scenario, res, (InternalWorkingMemory) rb.newStatefulSession(false));
return new ScenarioRunResult(null, scenario);
} catch (ClassNotFoundException e) {
log.error(e);
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-12-07 03:21:11 UTC (rev 17073)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-12-07 03:22:07 UTC (rev 17074)
@@ -1532,7 +1532,7 @@
}
- public void FIXME_testRunScenarioWithJar() throws Exception {
+ public void testRunScenarioWithJar() throws Exception {
ServiceImplementation impl = getService();
RulesRepository repo = impl.repository;
@@ -1548,7 +1548,7 @@
AssetItem asset = pkg.addAsset("testRule", "");
asset.updateFormat(AssetFormats.DRL);
- asset.updateContent("rule 'MyGoodRule' \n when Board() then System.err.println(42); \n end");
+ asset.updateContent("rule 'MyGoodRule' \n dialect 'mvel' \n when Board() then System.err.println(42); \n end");
asset.checkin("");
repo.save();
@@ -1577,7 +1577,23 @@
assertTrue(vr.wasSuccessful());
+ res = impl.runScenario(pkg.getName(), sc);
+ assertEquals(null, res.errors);
+ assertNotNull(res.scenario);
+ assertTrue(vf.wasSuccessful());
+ assertTrue(vr.wasSuccessful());
+ impl.ruleBaseCache.clear();
+
+ res = impl.runScenario(pkg.getName(), sc);
+ assertEquals(null, res.errors);
+ assertNotNull(res.scenario);
+ assertTrue(vf.wasSuccessful());
+ assertTrue(vr.wasSuccessful());
+
+
+
+
}
private ServiceImplementation getService() throws Exception {
More information about the jboss-svn-commits
mailing list