[jboss-svn-commits] JBL Code SVN: r19420 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt and 17 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 4 13:08:32 EDT 2008


Author: tirelli
Date: 2008-04-04 13:08:31 -0400 (Fri, 04 Apr 2008)
New Revision: 19420

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/header.css
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/header_logo.gif
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/welcome.html
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/GuidedDTDRLPersistence.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/ScenarioXMLPersistence.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/GuidedDTDRLPersistenceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/ScenarioXMLPersistenceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.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/modeldriven/ui/FactPatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/BulkRunResultWidget.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/client/ruleeditor/DSLRuleEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/jboss/seam/remoting/gwt/GWTToSeamAdapter.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-1545: merging changes from revisions #19227-#19386 from mic's branch into trunk

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -11,6 +11,7 @@
 
     private static final String NOLOOP   = "no-loop";
     private static final String SALIENCE = "salience";
+    private static final String ENABLED  = "enabled";
 
     public RuleAttribute(final String name,
                          final String value) {
@@ -32,7 +33,7 @@
         if ( NOLOOP.equals( attributeName ) ) {
             ret.append( " " );
             ret.append( this.value == null ? "true" : this.value );
-        } else if ( SALIENCE.equals( this.attributeName ) ) {
+        } else if ( SALIENCE.equals( this.attributeName ) || ENABLED.equals(this.attributeName) ) {
             ret.append( " " );
             ret.append( this.value );
         } else if ( this.value != null ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -53,6 +53,8 @@
 	 */
 	public int descriptionWidth = -1;
 
+	public String groupField;
+
 	//TODO: add in precondition(s)
 
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -28,6 +28,11 @@
 	 */
 	public Long numberOfRulesFired;
 
+	/**
+	 * A summary of the rules fired.
+	 */
+	public String[] rulesFired;
+
 	public ExecutionTrace() {}
 
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -17,18 +17,30 @@
     public String name;
     public String description;
 
+    /**
+     * This is true if it isn't a named fact, but it will just search working memory to verify.
+     */
+	public boolean anonymous = false;
 
+
     public VerifyFact() {}
-    public VerifyFact(String factName, List fieldValues) {
+    public VerifyFact(String factName, List fieldValues, boolean anonymous) {
         this.name = factName;
         this.fieldValues = fieldValues;
+        this.anonymous = anonymous;
     }
 
+    public VerifyFact(String factName, List fieldValues) {
+    	this(factName, fieldValues, false);
+    }
 
+
+
+
     public boolean wasSuccessful() {
         for (int i = 0; i < fieldValues.size(); i++) {
             VerifyField vf = (VerifyField) fieldValues.get(i);
-            if (! vf.successResult.booleanValue()) {
+            if (!vf.successResult.booleanValue()) {
                 return false;
             }
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/GuidedDTDRLPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/GuidedDTDRLPersistence.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/GuidedDTDRLPersistence.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -43,7 +43,7 @@
 			String desc = row[1];
 
 			RuleModel rm = new RuleModel();
-			rm.name = getName(dt.tableName, num, desc);
+			rm.name = getName(dt.tableName, num);
 
 			doAttribs(dt.attributeCols, row, rm);
 			doConditions(dt.attributeCols.size(), dt.conditionCols, row, rm);
@@ -185,8 +185,8 @@
 		}
 	}
 
-	String getName(String tableName, String num, String desc) {
-		return (validCell(desc)) ? num + "_" + desc : num + "_" + tableName;
+	String getName(String tableName, String num) {
+		return "Row " + num + " " + tableName;
 	}
 
 	boolean validCell(String c) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/ScenarioXMLPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/ScenarioXMLPersistence.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/ScenarioXMLPersistence.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -36,6 +36,7 @@
     	xt.alias("expect-fact", VerifyFact.class);
     	xt.alias("expect-field", VerifyField.class);
     	xt.alias("expect-rule", VerifyRuleFired.class);
+    	xt.omitField(ExecutionTrace.class, "rulesFired");
     }
 
     public static ScenarioXMLPersistence getInstance() {
@@ -46,7 +47,12 @@
 
     public String marshal(Scenario sc) {
     	if (sc.fixtures.size() > 1  && sc.fixtures.get(sc.fixtures.size() - 1) instanceof ExecutionTrace) {
-    		sc.fixtures.remove(sc.fixtures.size() - 1);
+    		Object f = sc.fixtures.get(sc.fixtures.size() - 2);
+
+    		if (f instanceof Expectation) {
+    			sc.fixtures.remove(sc.fixtures.size() - 1);
+    		}
+
     	}
     	return xt.toXML(sc);
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/ScenarioRunner.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -116,7 +116,9 @@
 					wm.fireAllRules(listener.getAgendaFilter(ruleList, scenario.inclusive),scenario.maxRuleFirings);
 					executionTrace.executionTimeResult = System.currentTimeMillis() - time;
 					executionTrace.numberOfRulesFired = listener.totalFires;
+					executionTrace.rulesFired = listener.getRulesFiredSummary();
 
+
 				} else if (fx instanceof Expectation) {
 						Expectation assertion = (Expectation) fx;
 						if (assertion instanceof VerifyFact) {
@@ -193,8 +195,29 @@
 
 	void verify(VerifyFact value) {
 
-		Object fact = this.populatedData.get(value.name);
-		if (fact == null) fact = this.globalData.get(value.name);
+
+		if (!value.anonymous) {
+			Object fact = this.populatedData.get(value.name);
+			if (fact == null) fact = this.globalData.get(value.name);
+			checkFact(value, fact);
+		} else {
+			Iterator obs = this.workingMemory.iterateObjects();
+			while(obs.hasNext()) {
+				Object fact = obs.next();
+				if (fact.getClass().getSimpleName().equals(value.name)) {
+					checkFact(value, fact);
+					if (value.wasSuccessful()) return;
+				}
+			}
+			for (Iterator iterator = value.fieldValues.iterator(); iterator.hasNext();) {
+				VerifyField vfl = (VerifyField) iterator.next();
+				vfl.successResult = Boolean.FALSE;
+				vfl.actualResult = "Not found";
+			}
+ 		}
+	}
+
+	private void checkFact(VerifyFact value, Object fact) {
 		for (int i = 0; i < value.fieldValues.size(); i++) {
 			VerifyField fld = (VerifyField) value.fieldValues.get(i);
 			Map<String, Object> st = new HashMap<String, Object>();
@@ -233,6 +256,8 @@
 		}
 	}
 
+
+
 	Object populateFields(FactData fact, Map<String, Object> factData, Object factObject) {
 		for (int i = 0; i < fact.fieldData.size(); i++) {
 			FieldData field = (FieldData) fact.fieldData.get(i);

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -5,7 +5,9 @@
 import java.io.ObjectOutput;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.drools.WorkingMemory;
 import org.drools.event.ActivationCancelledEvent;
@@ -153,8 +155,23 @@
 		return this.firingCounts;
 	}
 
+	/**
+	 * Return a list of the rules fired, for display purposes.
+	 */
+	public String[] getRulesFiredSummary() {
+		String[] r = new String[firingCounts.size()];
+		int i = 0;
+		for (Iterator iterator = firingCounts.entrySet().iterator(); iterator.hasNext();) {
+			Entry<String, Integer> e = (Entry<String, Integer>) iterator.next();
+			r[i] = e.getKey() + " [" + e.getValue() + "]";
+			i++;
+		}
 
+		return r;
+	}
 
+
+
 }
 
 class NilConsequence implements Consequence {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -41,6 +41,8 @@
         assertEquals(1, eng.getGlobalVariables().length);
         assertEquals("p", eng.getGlobalVariables()[0]);
         assertEquals("Person", eng.globalTypes.get("p"));
+        String[] flds = (String[]) eng.fieldsForType.get("Person");
+        assertNotNull(flds);
 
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -54,6 +54,16 @@
                       drl );
     }
 
+    public void testAttr() {
+    	RuleModel m = new RuleModel();
+    	m.attributes = new RuleAttribute[1];
+    	m.attributes[0] = new RuleAttribute("enabled", "true");
+        final String drl = p.marshal( m );
+
+        assertTrue(drl.indexOf("enabled true") > 0);
+
+    }
+
     public void testMoreComplexRendering() {
         final RuleModel m = getComplexModel();
         String expected = "rule \"Complex Rule\"\n" +

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/GuidedDTDRLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/GuidedDTDRLPersistenceTest.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/GuidedDTDRLPersistenceTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -120,8 +120,8 @@
 
 	public void testName() {
 		GuidedDTDRLPersistence p = new GuidedDTDRLPersistence();
-		assertEquals("42_hey", p.getName("XXX", "42", "hey"));
-		assertEquals("42_XXX", p.getName("XXX", "42", ""));
+		assertEquals("Row 42 XXX", p.getName("XXX", "42"));
+		assertEquals("Row 42 YYY", p.getName("YYY", "42"));
 	}
 
 	public void testAttribs() {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/ScenarioXMLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/ScenarioXMLPersistenceTest.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/ScenarioXMLPersistenceTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -41,12 +41,13 @@
 		Scenario orig = getDemo();
 		sc.fixtures.add(new ExecutionTrace());
 
+		int origSize = orig.fixtures.size();
 
-		assertEquals(orig.fixtures.size() + 1, sc.fixtures.size());
+		assertEquals(origSize + 1, sc.fixtures.size());
 		String xml = ScenarioXMLPersistence.getInstance().marshal(sc);
 		Scenario sc_ = ScenarioXMLPersistence.getInstance().unmarshal(xml);
 
-		assertEquals(orig.fixtures.size(), sc_.fixtures.size());
+		assertEquals(origSize, sc_.fixtures.size());
 
 
 
@@ -55,6 +56,27 @@
 
 	}
 
+
+	public void testNewScenario() {
+        FactData d1 = new FactData("Driver", "d1", ls(new FieldData[] {new FieldData("age", "42"), new FieldData("name", "david")}), false);
+        Scenario sc = new Scenario();
+        sc.fixtures.add(d1);
+        sc.fixtures.add(new ExecutionTrace());
+
+        int size = sc.fixtures.size();
+
+		String xml = ScenarioXMLPersistence.getInstance().marshal(sc);
+		Scenario sc_ = ScenarioXMLPersistence.getInstance().unmarshal(xml);
+
+		assertEquals(size, sc_.fixtures.size());
+
+		sc = new Scenario();
+		sc.fixtures.add(new ExecutionTrace());
+		xml = ScenarioXMLPersistence.getInstance().marshal(sc);
+		sc_ = ScenarioXMLPersistence.getInstance().unmarshal(xml);
+		assertEquals(1, sc_.fixtures.size());
+	}
+
 	private Scenario getDemo() {
         //Sample data
         FactData d1 = new FactData("Driver", "d1", ls(new FieldData[] {new FieldData("age", "42"), new FieldData("name", "david")}), false);

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -295,8 +295,7 @@
 	}
 
 	public Iterator iterateObjects() {
-		// TODO Auto-generated method stub
-		return null;
+		return this.facts.iterator();
 	}
 
 	public Iterator iterateObjects(ObjectFilter filter) {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/ScenarioRunnerTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -232,6 +232,43 @@
 
     }
 
+    public void testVerifyAnonymousFacts() throws Exception {
+    	MockWorkingMemory wm = new MockWorkingMemory();
+        ScenarioRunner runner = new ScenarioRunner( new Scenario(),
+                null,
+                wm );
+
+        Cheese c = new Cheese();
+        c.setPrice(42);
+        c.setType("stilton");
+
+        wm.facts.add(c);
+
+        VerifyFact vf = new VerifyFact("Cheese", new ArrayList(), true);
+        vf.fieldValues.add(new VerifyField("price", "42", "=="));
+        vf.fieldValues.add(new VerifyField("type", "stilton", "=="));
+
+        runner.verify(vf);
+
+        assertTrue(vf.wasSuccessful());
+
+        vf = new VerifyFact("Person", new ArrayList(), true);
+        vf.fieldValues.add(new VerifyField("age", "42", "=="));
+
+        runner.verify(vf);
+
+        assertFalse(vf.wasSuccessful());
+
+        vf = new VerifyFact("Cheese", new ArrayList(), true);
+        vf.fieldValues.add(new VerifyField("price", "43", "=="));
+        vf.fieldValues.add(new VerifyField("type", "stilton", "=="));
+
+        runner.verify(vf);
+
+        assertFalse(vf.wasSuccessful());
+
+    }
+
     public void testVerifyFactsWithOperator() throws Exception {
         ScenarioRunner runner = new ScenarioRunner( new Scenario(),
                                                     null,
@@ -671,9 +708,13 @@
 
         Thread.sleep( 50 );
 
+
+
         assertTrue( (new Date()).after( sc.lastRunResult ) );
         assertTrue( executionTrace.executionTimeResult != null );
 
+        assertTrue(executionTrace.rulesFired.length > 0);
+
     }
 
     public void testIntgerationStateful() throws Exception {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/TestingEventListenerTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -86,6 +86,12 @@
         assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule1"));
         assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule2"));
         assertEquals(new Integer(1), (Integer) ls.firingCounts.get("rule3"));
+
+        String[] summary = ls.getRulesFiredSummary();
+        assertEquals(3, summary.length);
+        assertNotNull(summary[0]);
+        assertFalse(summary[1].equals(""));
+
         assertEquals(1, list.size());
 	}
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -42,7 +42,7 @@
 
     public void setUserName(String userName) {
         StringBuffer content = new StringBuffer();
-        content.append( "<div id='user_info' class='headerBarblue'>" );
+        content.append( "<div class='headerUserInfo'>" );
         content.append( "<small>Welcome: &nbsp;" + userName );
         content.append( "&nbsp;&nbsp;&nbsp;<a href='logout.jsp'>[Sign Out]</a></small>" );
         content.append( "</div>" );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -43,7 +43,7 @@
     	Window w = new Window();
     	w.setTitle("Error");
     	w.setWidth(500);
-    	w.setHeight((longMessage != null) ? 500 : 150);
+    	w.setHeight((longMessage != null) ? 300 : 150);
     	w.setModal(true);
     	w.setShadow(true);
     	w.setClosable(true);

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionInsertColumn.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -35,7 +35,7 @@
 	private SuggestionCompletionEngine sce;
 	private ActionInsertFactCol editingCol;
 	private SmallLabel patternLabel = new SmallLabel();
-	private SmallLabel fieldLabel = new SmallLabel();
+	private TextBox fieldLabel = getFieldLabel();
 
 	public ActionInsertColumn(SuggestionCompletionEngine sce, final GuidedDecisionTable dt, final Command refreshGrid, final ActionInsertFactCol col, final boolean isNew) {
 		this.setModal(false);
@@ -51,13 +51,6 @@
 
 		setTitle("Action column configuration (inserting a new fact)");
 
-		final TextBox header = new TextBox();
-		header.setText(col.header);
-		header.addChangeListener(new ChangeListener() {
-			public void onChange(Widget w) {
-				editingCol.header = header.getText();
-			} });
-		addAttribute("Column header (description):", header);
 
 
 		HorizontalPanel pattern = new HorizontalPanel();
@@ -96,6 +89,15 @@
 		vl.add(new InfoPopup("Value list", "Value lists are an optional comma separated list of values to show as a drop down."));
 		addAttribute("(optional) value list:", vl);
 
+		final TextBox header = new TextBox();
+		header.setText(col.header);
+		header.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.header = header.getText();
+			} });
+		addAttribute("Column header (description):", header);
+
+
 		Button apply = new Button("Apply changes");
 		apply.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
@@ -117,6 +119,16 @@
 
 	}
 
+	private TextBox getFieldLabel() {
+		final TextBox box = new TextBox();
+		box.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.factField = box.getText();
+			}
+		});
+		return box;
+	}
+
 	private void showFieldChange() {
 		final FormStylePopup pop = new FormStylePopup();
 		pop.setModal(false);

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/ActionSetColumn.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -27,7 +27,7 @@
 
 	private ActionSetFieldCol editingCol;
 	private SmallLabel bindingLabel = new SmallLabel();
-	private SmallLabel fieldLabel = new SmallLabel();
+	private TextBox fieldLabel = getFieldLabel();
 	private GuidedDecisionTable dt;
 	private SuggestionCompletionEngine sce;
 
@@ -44,14 +44,8 @@
 		super.setModal(false);
 		setTitle("Column configuration (set a field on a fact)");
 
-		final TextBox header = new TextBox();
-		header.setText(col.header);
-		header.addChangeListener(new ChangeListener() {
-			public void onChange(Widget w) {
-				editingCol.header = header.getText();
-			} });
-		addAttribute("Column header (description):", header);
 
+
 		HorizontalPanel pattern = new HorizontalPanel();
 		pattern.add(bindingLabel);
 		doBindingLabel();
@@ -88,6 +82,15 @@
 		vl.add(new InfoPopup("Value list", "Value lists are an optional comma separated list of values to show as a drop down."));
 		addAttribute("(optional) value list:", vl);
 
+		final TextBox header = new TextBox();
+		header.setText(col.header);
+		header.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.header = header.getText();
+			} });
+		addAttribute("Column header (description):", header);
+
+
 		Button apply = new Button("Apply changes");
 		apply.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
@@ -111,6 +114,16 @@
 
 	}
 
+	private TextBox getFieldLabel() {
+		final TextBox box = new TextBox();
+		box.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.factField = box.getText();
+			}
+		});
+		return box;
+	}
+
 	private void showFieldChange() {
 		final FormStylePopup pop = new FormStylePopup();
 		pop.setModal(false);

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDTColumnConfig.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -36,7 +36,7 @@
 	private SuggestionCompletionEngine sce;
 	private ConditionCol editingCol;
 	private SmallLabel patternLabel = new SmallLabel();
-	private SmallLabel fieldLabel = new SmallLabel();
+	private TextBox fieldLabel = getFieldLabel();
 	private SmallLabel operatorLabel = new SmallLabel();
 
 	/**
@@ -59,13 +59,6 @@
 
 		setTitle("Condition column configuration");
 
-		final TextBox header = new TextBox();
-		header.setText(col.header);
-		header.addChangeListener(new ChangeListener() {
-			public void onChange(Widget w) {
-				editingCol.header = header.getText();
-			} });
-		addAttribute("Column header (description):", header);
 
 
 		HorizontalPanel pattern = new HorizontalPanel();
@@ -159,6 +152,15 @@
 		vl.add(new InfoPopup("Value list", "Value lists are an optional comma separated list of values to show as a drop down."));
 		addAttribute("(optional) value list:", vl);
 
+		final TextBox header = new TextBox();
+		header.setText(col.header);
+		header.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.header = header.getText();
+			} });
+		addAttribute("Column header (description):", header);
+
+
 		Button apply = new Button("Apply changes");
 		apply.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
@@ -186,6 +188,16 @@
 
 	}
 
+	private TextBox getFieldLabel() {
+		final TextBox box = new TextBox();
+		box.addChangeListener(new ChangeListener() {
+			public void onChange(Widget w) {
+				editingCol.factField = box.getText();
+			}
+		});
+		return box;
+	}
+
 	private void applyConsTypeChange(int newType) {
 		editingCol.constraintValueType = newType;
 		doFieldLabel();

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/decisiontable/GuidedDecisionTableWidget.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -83,6 +83,7 @@
 	private VerticalPanel actionsConfigWidget;
 	private Map colMap;
 	private SuggestionCompletionEngine sce;
+	private GroupingStore store;
 
 
 	public GuidedDecisionTableWidget(RuleAsset asset) {
@@ -123,7 +124,13 @@
         actions.add(getActions());
         config.add(actions);
 
+        FieldSet grouping = new FieldSet("(options)");
+        grouping.setCollapsible(true);
+        grouping.setCollapsed(true);
+        grouping.add(getGrouping());
+        config.add(grouping);
 
+
         layout.add(config);
 
         refreshGrid();
@@ -132,6 +139,55 @@
         initWidget(layout);
     }
 
+	private Widget getGrouping() {
+		final ListBox list = new ListBox();
+
+		list.addItem("Description", "desc");
+		for (Iterator iterator = dt.attributeCols.iterator(); iterator.hasNext();) {
+			AttributeCol c = (AttributeCol) iterator.next();
+			list.addItem(c.attr, c.attr);
+			if (c.attr.equals(dt.groupField)) {
+				list.setSelectedIndex(list.getItemCount() - 1);
+			}
+		}
+		for (Iterator iterator = dt.conditionCols.iterator(); iterator.hasNext();) {
+			ConditionCol c = (ConditionCol) iterator.next();
+			list.addItem(c.header, c.header);
+			if (c.header.equals(dt.groupField)) {
+				list.setSelectedIndex(list.getItemCount() - 1);
+			}
+		}
+		for (Iterator iterator = dt.actionCols.iterator(); iterator.hasNext();) {
+			ActionCol c = (ActionCol) iterator.next();
+			list.addItem(c.header, c.header);
+			if (c.header.equals(dt.groupField)) {
+				list.setSelectedIndex(list.getItemCount() - 1);
+			}
+		}
+
+		list.addItem("-- none --", "");
+		if (dt.groupField == null) {
+			list.setSelectedIndex(list.getItemCount() - 1);
+		}
+
+		HorizontalPanel h = new HorizontalPanel();
+		h.add(new SmallLabel("Group by column: "));
+		h.add(list);
+
+		Button ok = new Button("Apply");
+		ok.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				dt.groupField = list.getValue(list.getSelectedIndex());
+				scrapeData(-1);
+				refreshGrid();
+			}
+		});
+
+		h.add(ok);
+
+		return h;
+	}
+
 	private Widget getActions() {
 		actionsConfigWidget = new VerticalPanel();
 		refreshActionsWidget();
@@ -456,6 +512,10 @@
 				}
 			}
 		}
+//		String groupF = store.getGroupField();
+//		if (groupF == null || groupF.equals("")) {
+//			dt.groupField = groupF;
+//		}
 	}
 
 	/**
@@ -533,6 +593,9 @@
 				setDataIndex("desc");
 				setSortable(true);
 				setHeader("Description");
+				if (dt.descriptionWidth != -1) {
+					setWidth(dt.descriptionWidth);
+				}
 			}
 		};
 		colCount++;
@@ -623,11 +686,14 @@
 
 
         ColumnModel cm = new ColumnModel(cols);
-        final GroupingStore store = new GroupingStore();
+        store = new GroupingStore();
         store.setReader(reader);
         store.setDataProxy(proxy);
         store.setSortInfo(new SortState("num", SortDir.ASC));
-        store.setGroupField("desc");
+        if (this.dt.groupField != null) {
+        	store.setGroupField(dt.groupField);
+        }
+
         store.load();
 
 
@@ -640,6 +706,7 @@
         gv.setForceFit(true);
         gv.setGroupTextTpl("{text} ({[values.rs.length]} {[values.rs.length > 1 ? \"Items\" : \"Item\"]})");
 
+
         grid.setView(gv);
 
 
@@ -648,6 +715,7 @@
         grid.setHeight(500);
 
 
+
         grid.addGridCellListener(new GridCellListenerAdapter() {
         	public void onCellDblClick(GridPanel grid, int rowIndex,
         			int colIndex, EventObject e) {
@@ -744,7 +812,7 @@
 		w.setPlain(true);
 		w.setBodyBorder(false);
 		w.setAutoDestroy(true);
-		w.setTitle("Select value for " + dataIdx);
+		w.setTitle(dataIdx);
 		final ListBox drop = new ListBox();
 		for (int i = 0; i < vals.length; i++) {
 			String v = vals[i].trim();
@@ -802,7 +870,7 @@
 		w.setAutoDestroy(true);
 		w.setPlain(true);
 		w.setBodyBorder(false);
-		w.setTitle("Set value for " + dta);
+		w.setTitle(dta);
 		final TextBox box = new TextBox();
 		box.setText(val);
 		box.addKeyboardListener(new KeyboardListenerAdapter() {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -102,6 +102,9 @@
         westLayoutData.setMaxSize(350);
         westLayoutData.setSplit(true);
 
+
+
+
         //create the west panel and add it to the main panel applying the west region layout properties
         Panel westPanel = new Panel();
         westPanel.setId("side-nav");
@@ -113,8 +116,6 @@
         westPanel.add(accordion);
         mainPanel.add(westPanel, westLayoutData);
 
-
-
         centerPanelWrappper.add(centertabbedPanel.getPanel());
 
         mainPanel.add(centerPanelWrappper, centerLayoutData);
@@ -138,14 +139,15 @@
         northPanel = new Panel();
         DockPanel dock = new DockPanel();
         dock.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);
-        dock.add(new HTML("<div class='headerBarBlue'><img src='images/hdrlogo_drools50px.gif' /></div>"),DockPanel.WEST);
+        dock.add(new HTML("<div class='header'><img src='header_logo.gif' /></div>"),DockPanel.WEST);
         dock.add(uif, DockPanel.EAST);
-        dock.setStyleName("headerBarblue");
+        dock.setStyleName("header");
         dock.setWidth("100%");
 
 
 
 
+
         northPanel.add(dock);
         northPanel.setHeight(50);
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -202,7 +202,7 @@
 
 		final TreeNode scenarios = new TreeNode();
 		scenarios.setText("Test Scenarios in packages:");
-		scenarios.setIcon("images/scenario_conf.gif");
+		scenarios.setIcon("images/test_manager.gif");
 
 		final EditItemEvent edit = new EditItemEvent() {
 			public void open(String key) {centerPanel.openAsset(key);}

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	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -225,7 +225,7 @@
             }
         }
 
-        if (currentValue != null && !selected) {
+        if (currentValue != null  && !"".equals(currentValue) && !selected) {
             //need to add this value
             box.addItem( currentValue, currentValue );
             box.setSelectedIndex( enumeratedValues.length );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -148,7 +148,7 @@
         //HorizontalPanel ab = new HorizontalPanel();
         //ab.setStyleName( "composite-fact-pattern" );
         horiz.add( edit );
-        horiz.add( new HTML("<i>" + desc + "&nbsp;</i>") );
+        horiz.add( new SmallLabel(desc) );
 
         //horiz.add( ab );
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/BulkRunResultWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/BulkRunResultWidget.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/BulkRunResultWidget.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -167,7 +167,12 @@
 		Panel err = new SimplePanel();
 
 		PackageBuilderWidget.showBuilderErrors(errors, err, editEvent);
+		layout.startSection("Build errors - unable to run scenarios");
+
 		layout.addRow(err);
+
+
+		layout.endSection();
 	}
 
 }

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	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -222,34 +222,30 @@
 				final FormStylePopup pop = new FormStylePopup("images/rule_asset.gif", "New global");
 
 		        final ListBox factTypes = new ListBox();
-		        for (int i = 0; i < sce.factTypes.length; i++) {
-		            factTypes.addItem(sce.factTypes[i]);
-		        }
-		        final TextBox factName = new TextBox();
-		        factName.setVisibleLength(5);
+		        for (Iterator iterator = sce.globalTypes.keySet().iterator(); iterator
+						.hasNext();) {
+					String g = (String) iterator.next();
+					factTypes.addItem(g);
+				}
 
 		        Button add = new Button("Add");
 		        add.addClickListener(new ClickListener() {
 					public void onClick(Widget w) {
-						String fn = ("" + factName.getText()).trim();
-						if (fn.equals("")
-								|| factName.getText().indexOf(' ') > -1) {
-							Window.alert("You must enter a valid name.");
-						} else {
+							String fn = factTypes.getItemText(factTypes.getSelectedIndex());
 							if (scenario.isFactNameExisting(fn)) {
 								Window.alert("The name [" + fn + "] is already in use. Please choose another name.");
 							} else {
-								scenario.globals.add(new FactData(factTypes.getItemText(factTypes.getSelectedIndex()), factName.getText(), new ArrayList(), false ));
+								FactData ng = new FactData((String) sce.globalTypes.get(fn), fn, new ArrayList(), false);
+								scenario.globals.add(ng);
 								renderEditor();
 								pop.hide();
 							}
-						}
 					}
 				});
 
 		        HorizontalPanel insertFact = new HorizontalPanel();
-		        insertFact.add(factTypes); insertFact.add(new SmallLabel("Fact name:")); insertFact.add(factName); insertFact.add(add);
-		        pop.addAttribute("New global:", insertFact);
+		        insertFact.add(factTypes); insertFact.add(add);
+		        pop.addAttribute("Global:", insertFact);
 
 				pop.show();
 			}
@@ -384,11 +380,37 @@
 					}
 				});
 
+
+
 				HorizontalPanel h = new HorizontalPanel();
 				h.add(facts);
 				h.add(ok);
 				pop.addAttribute("Fact value:", h);
 
+				//add in list box for anon facts
+				final ListBox factTypes = new ListBox();
+				for (int i = 0; i < sce.factTypes.length; i++) {
+					String ft = sce.factTypes[i];
+					factTypes.addItem(ft);
+				}
+
+				ok = new Button("Add");
+				ok.addClickListener(new ClickListener() {
+					public void onClick(Widget w) {
+						String t = factTypes.getItemText(factTypes.getSelectedIndex());
+						sc.insertAfter(ex, new VerifyFact(t, new ArrayList(), true));
+						renderEditor();
+						pop.hide();
+					}
+
+				});
+
+				h = new HorizontalPanel();
+				h.add(factTypes);
+				h.add(ok);
+				pop.addAttribute("Any fact that matches:", h);
+
+
 				pop.show();
 			}
 		});
@@ -586,6 +608,7 @@
         scenario = sc;
         this.sce = sce;
         this.type = factType;
+
         this.parent = parent;
         outer.getCellFormatter().setStyleName(0, 0, "modeller-fact-TypeHeader");
         outer.getCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE );
@@ -953,8 +976,28 @@
     	if (showResults && ext.executionTimeResult != null
     			&& ext.numberOfRulesFired != null) {
     		HTML rep = new HTML("<i><small>" + ext.numberOfRulesFired.longValue() + " rules fired in " + ext.executionTimeResult.longValue() + "ms.</small></i>");
+
+
+    		final HorizontalPanel h = new HorizontalPanel();
+    		h.add(rep);
+    		vert.add(h);
+
+    		final Button show = new Button("Show rules fired");
+    		show.addClickListener(new ClickListener() {
+				public void onClick(Widget w) {
+					ListBox rules = new ListBox(true);
+					for (int i = 0; i < ext.rulesFired.length; i++) {
+						rules.addItem(ext.rulesFired[i]);
+					}
+					h.add(new SmallLabel("&nbsp:Rules fired:"));
+					h.add(rules);
+					show.setVisible(false);
+				}
+    		});
+    		h.add(show);
+
+
     		vert.add(p);
-    		vert.add(rep);
     		initWidget(vert);
     	} else {
     		initWidget(p);
@@ -1023,8 +1066,13 @@
         outer.setStyleName("modeller-fact-pattern-Widget");
         this.sce = sce;
         HorizontalPanel ab = new HorizontalPanel();
-        type = (String) sc.getVariableTypes().get(vf.name);
-        ab.add(new SmallLabel(type + " [" + vf.name + "] has values:"));
+        if (!vf.anonymous) {
+	        type = (String) sc.getVariableTypes().get(vf.name);
+	        ab.add(new SmallLabel(type + " [" + vf.name + "] has values:"));
+        } else {
+        	type = vf.name;
+        	ab.add(new SmallLabel("A fact of type [" + vf.name + "] has values:"));
+        }
         this.showResults = showResults;
 
         Image add = new ImageButton("images/add_field_to_fact.gif", "Add a field to this expectation.", new ClickListener() {
@@ -1193,6 +1241,7 @@
                     String s = b.getValue(b.getSelectedIndex());
                     if (s.equals("y") || s.equals("n")) {
                         num.setVisible(false);
+                        v.expectedFire = (s.equals("y")) ? Boolean.TRUE : Boolean.FALSE;
                         v.expectedCount = null;
                     } else {
                         num.setVisible(true);
@@ -1202,6 +1251,8 @@
                 }
             });
 
+            b.addItem("Choose...");
+
             num.addChangeListener(new ChangeListener() {
                 public void onChange(Widget w) {
                     v.expectedCount = new Integer(num.getText());

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -27,6 +27,8 @@
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
 import com.google.gwt.user.client.ui.TextArea;
@@ -53,9 +55,9 @@
 
         this.data = cont;
         text = new TextArea();
-//        text.setWidth( "100%" );
+        text.setWidth( "100%" );
 //        text.setHeight( "100%" );
-        text.setVisibleLines( 10 );
+        text.setVisibleLines( 16 );
         text.setText( data.content );
         text.setTitle( "Hint: press control+space for popup assistance, or use one of the icons to the right." );
 
@@ -123,9 +125,11 @@
         layout.getCellFormatter().setWidth( 0,
                                             0,
                                             "95%" );
+        layout.getFlexCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP);
         layout.getCellFormatter().setWidth( 0,
                                             1,
                                             "5%" );
+        layout.getFlexCellFormatter().setAlignment(0, 1, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE);
 
         layout.setWidth( "100%" );
         layout.setHeight( "100%" );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -46,9 +46,9 @@
 
 
         text = new TextArea();
-//        text.setWidth( "100%" );
+        text.setWidth( "100%" );
 //        text.setHeight( "100%" );
-        text.setVisibleLines( 10 );
+        text.setVisibleLines( 16 );
         text.setText( data.content );
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -129,7 +129,7 @@
     public static void showBuilderErrors(BuilderResult[] results) {
         FormStylePopup pop = new FormStylePopup("images/package_builder.png", "Validation results");
         if (results == null || results.length == 0) {
-            pop.addRow( new HTML("<img src='images/tick_green.gif'/><i>Rule built successfully.</i>") );
+            pop.addRow( new HTML("<img src='images/tick_green.gif'/><i>Item validated.</i>") );
         } else {
             FlexTable errTable = new FlexTable();
             errTable.setStyleName( "build-Results" );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -280,6 +280,7 @@
                 hsp.remove(metaWidget);
                 doMetaWidget();
                 hsp.add(metaWidget);
+                hsp.setCellWidth(metaWidget, "25%");
                 LoadingPopup.close();
             }
         });

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2008-04-04 17:08:31 UTC (rev 19420)
@@ -9,16 +9,10 @@
 code {
 	font-size:small;
 }
-.headerBarGrey {
-	height:70px;
-	background:url(images/jbossrules_hdrbkg_grey.gif) repeat-x;
-}
-.headerBarBlue {
-	height:50px;
-	background:url(images/jbossrules_hdrbkg_blue.gif) repeat-x;
-}
 
 
+
+
 .VerticalSplitPanel .vsplitter
 {
     background-color            :    #f3f2e7;
@@ -454,21 +448,12 @@
 	margin:0;
 	padding:0;
 }
-#user_info {
-	position:absolute;
-	right:1em;
-	top:0;
-	color:#fff;
-	font-size:.9em;
-}
-#user_info a {
-	color:#fff;
-}
+
 a,a:visited {
 	color:#00008B;
 }
 .gwt-CheckBox,.gwt-RadioButton,.gwt-Tree .gwt-TreeItem,.small-Text,.global-Font {
-	font-size:smaller;
+	#font-size:smaller;
 }
 select:focus,input:focus,input:active,.constraint-value-Editor:focus,.constraint-value-Editor:active {
 	color:#000;
@@ -502,14 +487,7 @@
 	background:#aa9;
 }
 .rule-viewer-Documentation,.dsl-text-Editor,.default-text-Area {
-	font-family:Arial,sans-serif;
-
 	border:1px solid #aa9;
-	width:100%;
-	-moz-border-radius:.7em;
-	-webkit-border-radius:.7em;
-	-khtml-border-radius:.7em;
-	border-radius:.7em;
 	background:#FFFFF0;
 }
 .rule-ListEvenRow,.DatePicker .weekheader {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html	2008-04-04 17:08:31 UTC (rev 19420)
@@ -37,6 +37,7 @@
 		    </style>
 
 		<link rel="stylesheet" href="JBRMS.css">
+		<link rel="stylesheet" href="header.css">
    </head>
    <body>
       <iframe id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/header.css (from rev 19386, labs/jbossrules/branches/mic_20080325/drools-jbrms/src/main/java/org/drools/brms/public/header.css)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/header.css	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/header.css	2008-04-04 17:08:31 UTC (rev 19420)
@@ -0,0 +1,16 @@
+.header {
+	height:50px;
+	background:url(images/jbossrules_hdrbkg_blue.gif) repeat-x;
+}
+
+.headerUserInfo {
+	position:absolute;
+	right:1em;
+	top:0;
+	color:#fff;
+	font-size:.9em;
+}
+
+.headerUserInfo a {
+	color:#fff;
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/header_logo.gif (from rev 19386, labs/jbossrules/branches/mic_20080325/drools-jbrms/src/main/java/org/drools/brms/public/header_logo.gif)
===================================================================
(Binary files differ)

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/welcome.html
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/welcome.html	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/welcome.html	2008-04-04 17:08:31 UTC (rev 19420)
@@ -1,16 +0,0 @@
-<html>
-	<head>
-		<link rel='stylesheet' href='JBRMS.css'>
-	</head>
-	<body>
-		<h3> 
-		<i>Welcome to JBoss Rules management system</i>
-		</h3>
-		<ul>
-			<li><a href="http://www.jboss.com/products/rules" target="_blank">Product home page</a></li>
-		    <li><a href="http://labs.jboss.com/jbossrules" target="_blank">Community home page</a></li>
-		    <li><a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossRules" target="_blank">Wiki</a></li>
-		    <li><a href="http://jira.jboss.com/jira/browse/JBRULES" target="_blank">Bugs and feature requests</li>
-		</ul>
-	</body>
-</html>
\ No newline at end of file

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	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -32,6 +32,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 import java.util.regex.Matcher;
@@ -42,6 +43,7 @@
 
 import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
+import org.drools.FactHandle;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
@@ -848,7 +850,7 @@
             repository.loadCategory( categoryPath ).remove();
             repository.save();
         } catch (RulesRepositoryException e) {
-            throw new SerializableException( e.getMessage() );
+        	throw new DetailedSerializableException("Unable to remove category. It is probably still used (even by archived items).", e.getMessage());
         }
     }
 
@@ -1019,7 +1021,10 @@
         try {
             AssetItem item = repository.loadAssetByUUID( uuid );
             item.archiveItem( value );
-            item.checkin( "unarchived" );
+    		PackageItem pkg = item.getPackage();
+    		pkg.updateBinaryUpToDate(false);
+    		this.ruleBaseCache.remove(pkg.getUUID());
+    		item.checkin( "unarchived" );
 
         } catch (RulesRepositoryException e) {
             log.error( e );
@@ -1176,7 +1181,17 @@
 		RuleBase rb = ruleBaseCache.get(item.getUUID());
 		Package bin = rb.getPackages()[0];
 
-		ClassTypeResolver res = new ClassTypeResolver(bin.getImports().keySet(), cl);
+
+		Set<String> imps = bin.getImports().keySet();
+		Set<String> allImps = new HashSet<String>(imps);
+		if (bin.getGlobals() != null) {
+			for (Iterator iterator = bin.getGlobals().keySet().iterator(); iterator.hasNext();) {
+				Class c = (Class) bin.getGlobals().get(iterator.next());
+				allImps.add(c.getName());
+			}
+		}
+
+		ClassTypeResolver res = new ClassTypeResolver(allImps, cl);
 		InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb.newStatefulSession(false);
 		return runScenario(scenario, res, workingMemory);
 	}
@@ -1245,6 +1260,13 @@
 	    		RuleAsset asset = loadAsset((AssetItem) it.next());
 	    		Scenario sc = (Scenario) asset.content;
 	    		sc = runScenario(sc, res, workingMemory).scenario;
+
+	    		//clean out WM
+	    		Iterator<FactHandle> fhs = workingMemory.iterateFactHandles();
+	    		while(fhs.hasNext()) {
+	    			workingMemory.retract(fhs.next());
+	    		}
+
 	    		int[] totals = sc.countFailuresTotal();
 	    		resultSummaries.add(new ScenarioResultSummary(totals[0], totals[1], asset.metaData.name, asset.metaData.description, asset.uuid));
 	    	}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/jboss/seam/remoting/gwt/GWTToSeamAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/jboss/seam/remoting/gwt/GWTToSeamAdapter.java	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/jboss/seam/remoting/gwt/GWTToSeamAdapter.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -85,8 +85,11 @@
                     StringWriter sw = new StringWriter();
                     PrintWriter w = new PrintWriter(sw);
                     cause.printStackTrace( w );
-                    DetailedSerializableException det = new DetailedSerializableException("An error occurred executing the action.", sw.toString());
-                    throw new InvocationTargetException(det);
+                    if (cause instanceof DetailedSerializableException) {
+                    	throw new InvocationTargetException(cause);
+                    } else {
+                        throw new InvocationTargetException(new DetailedSerializableException("An error occurred executing the action.", sw.toString()));
+                    }
                 }
             }
 

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	2008-04-04 14:38:23 UTC (rev 19419)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2008-04-04 17:08:31 UTC (rev 19420)
@@ -820,10 +820,13 @@
 		String[] children = impl.loadChildCategories("/");
 		impl.createCategory("/", "testRemoveCategory", "foo");
 
+
 		impl.removeCategory("testRemoveCategory");
 		String[] _children = impl.loadChildCategories("/");
 		assertEquals(children.length, _children.length);
 
+
+
 	}
 
 	public void testRemoveAsset() throws Exception {
@@ -1503,7 +1506,7 @@
 		RulesRepository repo = impl.repository;
 
 		PackageItem pkg = repo.createPackage("testScenarioRun", "");
-		pkg.updateHeader("import org.drools.Person");
+		pkg.updateHeader("import org.drools.Person\n global org.drools.Cheese cheese\n");
 		AssetItem rule1 = pkg.addAsset("rule_1", "");
 		rule1.updateFormat(AssetFormats.DRL);
 		rule1
@@ -1529,6 +1532,12 @@
 		vf.fieldValues.add(new VerifyField("age", "42", "=="));
 		sc.fixtures.add(vf);
 
+		FactData cheese = new FactData();
+		cheese.name = "cheese";
+		cheese.type = "Cheese";
+		cheese.fieldData.add(new FieldData("price", "42"));
+		sc.globals.add(cheese);
+
 		ScenarioRunResult res = impl.runScenario(pkg.getName(), sc);
 		assertEquals(null, res.errors);
 		assertNotNull(res.scenario);




More information about the jboss-svn-commits mailing list