[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(" <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(" <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