[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