[jboss-svn-commits] JBL Code SVN: r17032 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Dec 5 02:38:03 EST 2007


Author: michael.neale at jboss.com
Date: 2007-12-05 02:38:03 -0500 (Wed, 05 Dec 2007)
New Revision: 17032

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/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-1271 blocked with a shadow proxy problem

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-05 07:37:13 UTC (rev 17031)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java	2007-12-05 07:38:03 UTC (rev 17032)
@@ -13,7 +13,6 @@
 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.LoadingPopup;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.testing.ExecutionTrace;
 import org.drools.brms.client.modeldriven.testing.FactData;
@@ -25,15 +24,14 @@
 import org.drools.brms.client.modeldriven.testing.VerifyField;
 import org.drools.brms.client.modeldriven.testing.VerifyRuleFired;
 import org.drools.brms.client.packages.SuggestionCompletionCache;
+import org.drools.brms.client.rpc.BuilderResult;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.ScenarioRunResult;
-import org.drools.brms.client.ruleeditor.RuleValidatorWrapper;
 
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.AbsolutePanel;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
@@ -48,9 +46,11 @@
 import com.google.gwt.user.client.ui.KeyboardListener;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.ScrollPanel;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
 
 public class ScenarioWidget extends Composite {
 
@@ -551,14 +551,19 @@
 
 	private Image getNewFieldButton(final List defList) {
 		Image newField = new ImageButton("images/add_field_to_fact.gif", "Add a field");
-        newField.addClickListener(new ClickListener() {
+        newField.addClickListener(addFieldCL(defList));
+		return newField;
+	}
+
+	private ClickListener addFieldCL(final List defList) {
+		return new ClickListener() {
 			public void onClick(Widget w) {
 
 				//build up a list of what we have got, don't want to add it twice
 				HashSet existingFields = new HashSet();
 				if (defList.size() > 0) {
 					FactData d = (FactData) defList.get(0);
-					for (Iterator iterator = defList.iterator(); iterator.hasNext();) {
+					for (Iterator iterator = d.fieldData.iterator(); iterator.hasNext();) {
 						FieldData f = (FieldData) iterator.next();
 						existingFields.add(f.name);
 					}
@@ -588,8 +593,7 @@
 				pop.setPopupPosition(w.getAbsoluteLeft(), w.getAbsoluteTop());
 				pop.show();
 			}
-		});
-		return newField;
+		};
 	}
 
 	private FlexTable render(final List defList) {
@@ -667,10 +671,13 @@
         }
 
         if (fields.size() == 0) {
-        	HorizontalPanel h = new HorizontalPanel();
-        	h.add(new HTML("<i><small>Add fields:</small></i>"));
-        	h.add(getNewFieldButton(defList));
-        	t.setWidget(1, 1, h);
+        	//HorizontalPanel h = new HorizontalPanel();
+        	Button b = new Button("Add a field");
+        	b.addClickListener(addFieldCL(defList));
+
+        	//h.add(new HTML("<i><small>Add fields:</small></i>"));
+        	//h.add(getNewFieldButton(defList));
+        	t.setWidget(1, 1, b);
         }
         return t;
 	}
@@ -1140,46 +1147,155 @@
 	}
 }
 
+/**
+ * Runs the test, plus shows a summary view of the results.
+ */
 class TestRunnerWidget extends Composite {
+
+	FlexTable results = new FlexTable();
+	Grid layout = new Grid(2, 1);
+
+	private HorizontalPanel busy = new HorizontalPanel();
+	private HorizontalPanel actions = new HorizontalPanel();
+
 	public TestRunnerWidget(final ScenarioWidget parent, final String packageName) {
-		HorizontalPanel h = new HorizontalPanel();
+
 		final Button run = new Button("Run scenario");
-		final HorizontalPanel busy = new HorizontalPanel();
-		busy.setVisible(false);
-		busy.add(new Image("images/busy.gif"));
-		busy.add(new HTML("&nbsp;&nbsp;<i><small><b>Building and running scenario, please wait...</b></small></i>"));
+		run.setTitle("Run this scenario. This will build the package if it is not already built (which may take some time).");
 		run.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
-				busy.setVisible(true);
-				run.setVisible(false);
+				layout.setWidget(0, 0, busy);
 				RepositoryServiceFactory.getService().runScenario(parent.asset.metaData.packageName, (Scenario) parent.asset.content, new GenericCallback () {
 					public void onSuccess(Object data) {
+						layout.setWidget(0, 0, actions);
+						layout.setWidget(0, 1, results);
+						busy.setVisible(false);
+						actions.setVisible(true);
 						ScenarioRunResult result = (ScenarioRunResult) data;
 						if (result.errors != null) {
-							
-							RuleValidatorWrapper.showBuilderErrors(result.errors);
+							showErrors(result.errors);
 						} else {
-							parent.asset.content = result.scenario;
-							parent.showResults = true;
-							parent.renderEditor();
-
+							showResults(parent, result);
 						}
-						busy.setVisible(false);
-						run.setVisible(true);
 					}
 				});
+			}
+		});
 
+		actions.add(run);
+		busy.add(new Image("images/busy.gif"));
+		busy.add(new HTML("&nbsp;&nbsp;<i><small>Building and running scenario, please wait...</small></i>"));
+		layout.setWidget(0, 0, actions);
+		//layout.add(results);
 
+		initWidget(layout);
+	}
+
+
+	private void showErrors(BuilderResult[] rs) {
+		results.clear();
+		results.setVisible(true);
+
+        FlexTable errTable = new FlexTable();
+        errTable.setStyleName( "build-Results" );
+        for ( int i = 0; i < rs.length; i++ ) {
+            int row = i;
+            final BuilderResult res = rs[i];
+            errTable.setWidget( row, 0, new Image("images/error.gif"));
+            if( res.assetFormat.equals( "package" )) {
+                errTable.setText( row, 1, "[package configuration problem] " + res.message );
+            } else {
+                errTable.setText( row, 1, "[" + res.assetName + "] " + res.message );
+            }
+
+        }
+        ScrollPanel scroll = new ScrollPanel(errTable);
+
+        scroll.setWidth( "100%" );
+        results.setWidget(0, 0, scroll);
+
+	}
+
+	private void showResults(final ScenarioWidget parent,
+			ScenarioRunResult result) {
+		results.clear();
+		results.setVisible(true);
+
+		parent.asset.content = result.scenario;
+		parent.showResults = true;
+		parent.renderEditor();
+
+		int failures = 0;
+		int total = 0;
+		VerticalPanel resultsDetail = new VerticalPanel();
+
+		for (Iterator iterator = result.scenario.fixtures.iterator(); iterator.hasNext();) {
+			Fixture f = (Fixture) iterator.next();
+			if (f instanceof VerifyRuleFired) {
+				total++;
+				VerifyRuleFired vr = (VerifyRuleFired)f;
+				HorizontalPanel h = new HorizontalPanel();
+				if (!vr.successResult.booleanValue()) {
+					h.add(new Image("images/warning.gif"));
+					failures++;
+				} else {
+					h.add(new Image("images/test_passed.png"));
+				}
+				h.add(new Label(vr.explanation));
+				resultsDetail.add(h);
+			} else if (f instanceof VerifyFact) {
+				VerifyFact vf = (VerifyFact)f;
+				for (Iterator it = vf.fieldValues.iterator(); it.hasNext();) {
+					total++;
+					VerifyField vfl = (VerifyField) it.next();
+					HorizontalPanel h = new HorizontalPanel();
+					if (!vfl.successResult.booleanValue()) {
+						h.add(new Image("images/warning.gif"));
+						failures++;
+					} else {
+						h.add(new Image("images/test_passed.png"));
+					}
+					h.add(new Label(vfl.explanation));
+					resultsDetail.add(h);
+				}
+
 			}
-		});
-		h.add(run);
-		h.add(busy);
-		initWidget(h);
+
+		}
+
+		results.setWidget(0, 0, new Label("Results:"));
+		results.setWidget(0, 1, greenBarGoodness(failures, total));
+		results.setWidget(1, 0, new Label("Summary:"));
+		results.setWidget(1, 1, resultsDetail);
+
+
 	}
 
-	void runScenario(final ScenarioWidget parent, final HorizontalPanel busy) {
+	private Widget greenBarGoodness(float failures, float total) {
+		Grid g = new Grid(1, 100);
+		g.setStyleName("testBar");
+		CellFormatter cf = g.getCellFormatter();
+		float num = ((total - failures) / total) * 50;
+		for (int i = 0; i < 50; i++) {
+			if (i < num) {
+				cf.setStyleName(0, i, "testSuccessBackground");
+			} else {
+				cf.setStyleName(0, i, "testFailureBackground");
+			}
+		}
+		VerticalPanel vert = new VerticalPanel();
 
+		int percent = (int) (((total - failures) / total) * 100);
+		Widget p = new HTML("<i><small>" + (int)failures + " out of " + (int)total + " expectations were met. (" + percent + "%) </small></i>");
+		vert.add(p);
+		vert.add(g);
+
+		vert.setStyleName("successBar");
+		return vert;
 	}
 
 
+
+
+
 }

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-05 07:37:13 UTC (rev 17031)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-12-05 07:38:03 UTC (rev 17032)
@@ -40,6 +40,7 @@
 
 import org.apache.log4j.Logger;
 import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassTypeResolver;
 import org.drools.brms.client.common.AssetFormats;
@@ -1059,8 +1060,13 @@
 
 	private RuleBase loadRuleBase(PackageItem item)  throws DetailedSerializableException {
 		try {
-			RuleBase rb = RuleBaseFactory.newRuleBase();
-			DroolsObjectInputStream in = new DroolsObjectInputStream(new ByteArrayInputStream(item.getCompiledPackageBytes()));
+			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);
 			Package bin = (Package) in.readObject();
 			in.close();
 			rb.addPackage(bin);
@@ -1077,12 +1083,14 @@
 	private ScenarioRunResult runScenario(
 			Scenario scenario, PackageItem item)
 			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);
-		ClassTypeResolver res = new ClassTypeResolver(bin.getImports(), BRMSPackageBuilder.createClassLoader(jars));
+		ClassLoader cl = BRMSPackageBuilder.createClassLoader(jars);
+		ClassTypeResolver res = new ClassTypeResolver(bin.getImports(), cl);
 		try {
-			new ScenarioRunner(scenario, res, (InternalWorkingMemory) rb.newStatefulSession());
+			new ScenarioRunner(scenario, res, (InternalWorkingMemory) rb.newStatefulSession(false), cl);
 			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-05 07:37:13 UTC (rev 17031)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-12-05 07:38:03 UTC (rev 17032)
@@ -1532,6 +1532,54 @@
 
 	}
 
+	public void FIXME_testRunScenarioWithJar() throws Exception {
+		ServiceImplementation impl = getService();
+		RulesRepository repo = impl.repository;
+
+		// create our package
+		PackageItem pkg = repo.createPackage("testRunScenarioWithJar", "");
+		AssetItem model = pkg.addAsset("MyModel", "");
+		model.updateFormat(AssetFormats.MODEL);
+		model.updateBinaryContentAttachment(this.getClass()
+				.getResourceAsStream("/billasurf.jar"));
+		model.checkin("");
+
+		pkg.updateHeader("import com.billasurf.Board");
+
+		AssetItem asset = pkg.addAsset("testRule", "");
+		asset.updateFormat(AssetFormats.DRL);
+		asset.updateContent("rule 'MyGoodRule' \n when Board() then System.err.println(42); \n end");
+		asset.checkin("");
+		repo.save();
+
+		Scenario sc = new Scenario();
+		FactData person = new FactData();
+		person.name = "p";
+		person.type = "Board";
+		person.fieldData.add(new FieldData("cost", "42"));
+
+
+		sc.fixtures.add(person);
+		sc.fixtures.add(new ExecutionTrace());
+		VerifyRuleFired vr = new VerifyRuleFired("MyGoodRule", 1, null);
+		sc.fixtures.add(vr);
+
+		VerifyFact vf = new VerifyFact();
+		vf.name = "p";
+
+		vf.fieldValues.add(new VerifyField("cost", "42", "=="));
+		sc.fixtures.add(vf);
+
+		ScenarioRunResult res = impl.runScenario(pkg.getName(), sc);
+		assertEquals(null, res.errors);
+		assertNotNull(res.scenario);
+		assertTrue(vf.wasSuccessful());
+		assertTrue(vr.wasSuccessful());
+
+
+
+	}
+
 	private ServiceImplementation getService() throws Exception {
 		ServiceImplementation impl = new ServiceImplementation();
 




More information about the jboss-svn-commits mailing list