[jboss-svn-commits] JBL Code SVN: r30786 - in labs/jbossrules/branches/5.0.x: drools-compiler/src/test/java/org/drools and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 21 09:26:40 EST 2009


Author: tirelli
Date: 2009-12-21 09:26:39 -0500 (Mon, 21 Dec 2009)
New Revision: 30786

Added:
   labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/
   labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/
   labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/
   labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/
   labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel
Modified:
   labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
   labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/branches/5.0.x/pom.xml
Log:
JBRULES: Adding support to session report generation

Added: labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,106 @@
+package org.drools.util.debug;
+
+import java.awt.Dimension;
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.Cheesery;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.Person;
+import org.drools.Worker;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class SessionInspectorTest extends TestCase {
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public void testGetSessionInfo() {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_SubNetworks.drl" ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_AccumulateWithFromChaining.drl" ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_CollectResultsBetaConstraint.drl" ),
+                      ResourceType.DRL );
+        kbuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_QueryMemoryLeak.drl" ),
+                      ResourceType.DRL );
+
+        assertFalse( kbuilder.getErrors().toString(),
+                     kbuilder.hasErrors() );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.setGlobal( "results", new ArrayList<Object>() );
+        
+        ksession.insert( new Dimension( 100, 50 ) );
+        ksession.insert( new Dimension( 130, 80 ) );
+        ksession.insert( new Dimension( 50, 40 ) );
+        ksession.insert( new Dimension( 50, 40 ) );
+        Cheesery cheesery = new Cheesery();
+        cheesery.addCheese( new Cheese( "brie", 10 ));
+        cheesery.addCheese( new Cheese( "brie", 10 ));
+        cheesery.addCheese( new Cheese( "brie", 10 ));
+        cheesery.addCheese( new Cheese( "brie", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "muzzarella", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        cheesery.addCheese( new Cheese( "stilton", 10 ));
+        ksession.insert( cheesery );
+        ksession.insert( new Person( "Bob", "muzzarella") );
+        ksession.insert( new Person( "Mark", "brie") );
+        ksession.insert( new Cheese( "brie", 10 ) );
+        ksession.insert( new Cheese( "brie", 10 ) );
+        ksession.insert( new Cheese( "brie", 10 ) );
+        ksession.insert( new Cheese( "brie", 10 ) );
+        ksession.insert( new Cheese( "muzzarella", 10 ) );
+        ksession.insert( new Cheese( "muzzarella", 10 ) );
+        ksession.insert( new Cheese( "muzzarella", 10 ) );
+        ksession.insert( new Cheese( "muzzarella", 10 ) );
+        ksession.insert( new Cheese( "Stilton", 10 ) );
+        ksession.insert( new Cheese( "Stilton", 10 ) );
+        ksession.insert( new Cheese( "Stilton", 10 ) );
+        ksession.insert( new Double( 10 ) );
+        ksession.insert( new Double( 11 ) );
+        ksession.insert( new Double( 12 ) );
+        ksession.insert( new Double( 13 ) );
+        ksession.insert( new Double( 14 ) );
+        ksession.insert( new Integer( 15 ) );
+        ksession.insert( new Integer( 16 ) );
+        ksession.insert( new Integer( 17 ) );
+        ksession.insert( new Integer( 18 ) );
+        org.drools.runtime.rule.FactHandle handle = ksession.insert( new Worker( ) );
+        
+        ksession.retract( handle );
+        
+        SessionInspector inspector = new SessionInspector( ksession );
+        
+        StatefulKnowledgeSessionInfo info = inspector.getSessionInfo();
+        
+        String report = SessionReporter.generateReport( "simple", info, null );
+        
+        System.out.println(report);
+        
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-compiler/src/test/java/org/drools/util/debug/SessionInspectorTest.java
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SubNetworks.drl	2009-12-21 14:26:39 UTC (rev 30786)
@@ -1,6 +1,6 @@
 package org.drools;
 
-import java.awt.*;
+import java.awt.Dimension;
 
 rule "A"
     when

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/common/ObjectStore.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -2,7 +2,6 @@
 
 import java.util.Iterator;
 
-import org.drools.runtime.ObjectFilter;
 import org.drools.runtime.rule.FactHandle;
 
 public interface ObjectStore {

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -600,10 +600,6 @@
                                                                                                                          other.resultConstraints );
     }
 
-    public String toString() {
-        return "[ " + this.getClass().getName() + "(" + this.id + ") ]";
-    }
-
     /**
      * Creates a BetaMemory for the BetaNode's memory.
      */

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -301,7 +301,7 @@
     }
 
     public String toString() {
-        return "";
+        return "[ " + this.getClass().getSimpleName() + "(" + this.id + ") ]";
     }
 
     public void dumpMemory(final InternalWorkingMemory workingMemory) {

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -497,10 +497,6 @@
                                                                                                                      other.resultConstraints );
     }
 
-    public String toString() {
-        return "[ " + this.getClass().getName() + "(" + this.id + ") ]";
-    }
-
     /**
      * Creates a BetaMemory for the BetaNode's memory.
      */

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -228,52 +228,6 @@
     public void retractRightTuple(final RightTuple rightTuple,
                                   final PropagationContext context,
                                   final InternalWorkingMemory workingMemory) {
-        //        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        //        if ( !memory.getRightTupleMemory().remove( handle ) ) {
-        //            return;
-        //        }
-        //
-        //        final Iterator it = memory.getLeftTupleMemory().iterator( handle );
-        //        this.constraints.updateFromFactHandle( memory.getContext(),
-        //                                               workingMemory,
-        //                                               handle );
-        //        for ( LeftTuple tuple = (LeftTuple) it.next(); tuple != null; tuple = (LeftTuple) it.next() ) {
-        //            if ( this.constraints.isAllowedCachedRight( memory.getContext(),
-        //                                                        tuple ) ) {
-        //                if ( tuple.getMatch() == handle ) {
-        //                    // reset the match
-        //                    tuple.setMatch( null );
-        //
-        //                    // find next match, remember it and break.
-        //                    final Iterator tupleIt = memory.getRightTupleMemory().iterator( tuple );
-        //                    this.constraints.updateFromTuple( memory.getContext(),
-        //                                                      workingMemory,
-        //                                                      tuple );
-        //
-        //                    for ( FactEntry entry = (FactEntry) tupleIt.next(); entry != null; entry = (FactEntry) tupleIt.next() ) {
-        //                        final InternalFactHandle rightHandle = entry.getFactHandle();
-        //                        if ( this.constraints.isAllowedCachedLeft( memory.getContext(),
-        //                                                                   rightHandle ) ) {
-        //                            tuple.setMatch( rightHandle );
-        //                            break;
-        //                        }
-        //                    }
-        //
-        //                    this.constraints.resetTuple( memory.getContext() );
-        //
-        //                    // if there is now no new tuple match then propagate assert.
-        //                    if ( tuple.getMatch() == null ) {
-        //                        this.sink.propagateRetractLeftTuple( tuple,
-        //                                                             context,
-        //                                                             workingMemory );
-        //                    }
-        //                }
-        //
-        //            }
-        //        }
-        //
-        //        this.constraints.resetFactHandle( memory.getContext() );
-        // assign now, so we can remove from memory before doing any possible propagations
         final RightTuple rootBlocker = (RightTuple) rightTuple.getPrevious();
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
@@ -319,6 +273,7 @@
 
             leftTuple = temp;
         }
+        rightTuple.setBlocked( null );
         this.constraints.resetTuple( memory.getContext() );
     }
 
@@ -385,11 +340,10 @@
 
     public String toString() {
         ObjectSource source = this.rightInput;
-        while ( source.getClass() != ObjectTypeNode.class ) {
+        while ( source != null && source.getClass() != ObjectTypeNode.class ) {
             source = source.source;
         }
-
-        return "[ExistsNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
+        return "[ExistsNode("+this.getId()+") - " + ((source != null) ? ((ObjectTypeNode) source).getObjectType() : "<source from a subnetwork>" ) + "]";
     }
     
     public short getType() {

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -187,8 +187,6 @@
             this.rightParent.setBetaChildren( null );
         }
 
-        //this.parent  = null;
-
         this.blocker = null;
 
         this.rightParent = null;
@@ -385,6 +383,8 @@
         // we know the object is never null and always of the  type LeftTuple
         if ( other == this ) {
             return true;
+        } else if( other == null ) {
+            return false;
         }
 
         // A LeftTuple is  only the same if it has the same hashCode, factId and parent

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -251,6 +251,7 @@
 
             leftTuple = temp;
         }
+        rightTuple.setBlocked( null );
         this.constraints.resetTuple( memory.getContext() );
     }
 
@@ -305,10 +306,10 @@
 
     public String toString() {
         ObjectSource source = this.rightInput;
-        while ( !(source instanceof ObjectTypeNode) ) {
+        while ( source != null && !(source instanceof ObjectTypeNode) ) {
             source = source.source;
         }
 
-        return "[NotNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
+        return "[NotNode("+this.getId()+") - " + ((source != null) ? ((ObjectTypeNode) source).getObjectType() : "<source from a subnetwork>" )  + "]";
     }
 }

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -213,7 +213,7 @@
                 .getNodeMemory( this );
 
         // first we clear up the action queued flag
-        memory.isQueued().set( false );
+        memory.isQueued().compareAndSet( true, false );
 
         // we limit the propagation to avoid a hang when this queue is never empty
         Action next = memory.getNext();
@@ -221,9 +221,8 @@
             next.execute( this.sink, workingMemory );
         }
 
-        if( memory.hasNext() ) {
+        if( memory.hasNext() && memory.isQueued().compareAndSet( false, true )) {
             // add action to the queue again.
-            memory.isQueued().set( true );
             workingMemory.queueWorkingMemoryAction( this.action );
         }
     }
@@ -285,6 +284,10 @@
         public AtomicBoolean isQueued() {
             return isQueued;
         }
+        
+        public long getSize() {
+            return this.queue.size();
+        }
     }
 
     private static abstract class Action implements Externalizable {

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -157,7 +157,7 @@
     }
 
     public String toString() {
-        return "[QueryTerminalNode: rule=" + this.rule.getName() + "]";
+        return "[QueryTerminalNode("+this.getId()+"): rule=" + this.rule.getName() + "]";
     }
 
     public void ruleAttached() {

Modified: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -319,7 +319,7 @@
     }
 
     public String toString() {
-        return "[RuleTerminalNode: rule=" + this.rule.getName() + "]";
+        return "[RuleTerminalNode("+this.getId()+"): rule=" + this.rule.getName() + "]";
     }
 
     public void ruleAttached() {

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,30 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public abstract class AbstractNetworkNodeVisitor
+    implements
+    NetworkNodeVisitor {
+    
+    protected AbstractNetworkNodeVisitor() {
+    }
+
+    public void visit(NetworkNode node,
+                      Stack<NetworkNode> nodeStack,
+                      StatefulKnowledgeSessionInfo info) {
+        info.info( this.getClass().getSimpleName() + " - Visiting "+node );
+        DefaultNodeInfo dni = new DefaultNodeInfo( node );
+        info.addNodeInfo( node,
+                          dni );
+        doVisit( node,
+                 nodeStack,
+                 info );
+    }
+
+    protected abstract void doVisit(NetworkNode node,
+                                    Stack<NetworkNode> nodeStack,
+                                    StatefulKnowledgeSessionInfo info);
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AbstractNetworkNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,36 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.AccumulateNode;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
+
+public class AccumulateNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final AccumulateNodeVisitor INSTANCE = new AccumulateNodeVisitor();
+    
+    protected AccumulateNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        AccumulateNode an = (AccumulateNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final AccumulateMemory memory = (AccumulateMemory) info.getSession().getNodeMemory( an );
+        
+        ni.setMemoryEnabled( true );
+        
+        if( an.isObjectMemoryEnabled() ) {
+            ni.setFactMemorySize( memory.betaMemory.getRightTupleMemory().size() );
+        }
+        if( an.isLeftTupleMemoryEnabled() ) {
+            ni.setTupleMemorySize( memory.betaMemory.getLeftTupleMemory().size() );
+            ni.setCreatedFactHandles( memory.betaMemory.getCreatedHandles().size() );
+        }
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AccumulateNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,22 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public class AlphaNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final AlphaNodeVisitor INSTANCE = new AlphaNodeVisitor();
+    
+    protected AlphaNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        ni.setMemoryEnabled( false );
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/AlphaNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,35 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.BetaNode;
+
+public class BetaNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final BetaNodeVisitor INSTANCE = new BetaNodeVisitor();
+    
+    protected BetaNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        BetaNode bn = (BetaNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final BetaMemory memory = (BetaMemory) info.getSession().getNodeMemory( bn );
+        
+        ni.setMemoryEnabled( true );
+        
+        if( bn.isObjectMemoryEnabled() ) {
+            ni.setFactMemorySize( memory.getRightTupleMemory().size() );
+        }
+        if( bn.isLeftTupleMemoryEnabled() ) {
+            ni.setTupleMemorySize( memory.getLeftTupleMemory().size() );
+        }
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/BetaNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,36 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.CollectNode;
+import org.drools.reteoo.CollectNode.CollectMemory;
+
+public class CollectNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final CollectNodeVisitor INSTANCE = new CollectNodeVisitor();
+    
+    protected CollectNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        CollectNode an = (CollectNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final CollectMemory memory = (CollectMemory) info.getSession().getNodeMemory( an );
+        
+        ni.setMemoryEnabled( true );
+        
+        if( an.isObjectMemoryEnabled() ) {
+            ni.setFactMemorySize( memory.betaMemory.getRightTupleMemory().size() );
+        }
+        if( an.isLeftTupleMemoryEnabled() ) {
+            ni.setTupleMemorySize( memory.betaMemory.getLeftTupleMemory().size() );
+            ni.setCreatedFactHandles( memory.betaMemory.getCreatedHandles().size() );
+        }
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/CollectNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,22 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public class DefaultNetworkNodeVisitor extends AbstractNetworkNodeVisitor {
+
+    public static final DefaultNetworkNodeVisitor INSTANCE = new DefaultNetworkNodeVisitor();
+    
+    protected DefaultNetworkNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        // do nothing for now
+    }
+    
+    
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNetworkNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,122 @@
+package org.drools.util.debug;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.common.NetworkNode;
+import org.drools.common.RuleBasePartitionId;
+import org.drools.reteoo.EntryPointNode;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.Rete;
+import org.drools.rule.Rule;
+
+public class DefaultNodeInfo
+    implements
+    NodeInfo {
+
+    private NetworkNode node;
+    private Set<Rule>   rules;
+
+    private boolean memoryEnabled = false;
+    private long tupleMemorySize = -1;
+    private long factMemorySize = -1;
+    private long createdFactHandles = -1;
+    private long actionQueueSize = -1;
+
+    public DefaultNodeInfo(NetworkNode node) {
+        this.node = node;
+        this.rules = new HashSet<Rule>();
+    }
+
+    public void assign(Rule rule) {
+        this.rules.add( rule );
+    }
+
+    public Set<Rule> getRules() {
+        return rules;
+    }
+
+    public int getId() {
+        return node.getId();
+    }
+
+    public RuleBasePartitionId getPartitionId() {
+        return node.getPartitionId();
+    }
+
+    public long getTupleMemorySize() {
+        return tupleMemorySize;
+    }
+
+    public void setTupleMemorySize(long leftMemorySize) {
+        this.tupleMemorySize = leftMemorySize;
+    }
+
+    public long getFactMemorySize() {
+        return factMemorySize;
+    }
+
+    public void setFactMemorySize(long rightMemorySize) {
+        this.factMemorySize = rightMemorySize;
+    }
+
+    public long getCreatedFactHandles() {
+        return createdFactHandles;
+    }
+
+    public void setCreatedFactHandles(long createdFactHandles) {
+        this.createdFactHandles = createdFactHandles;
+    }
+
+    public long getActionQueueSize() {
+        return this.actionQueueSize;
+    }
+    
+    public void setActionQueueSize(long size) {
+        this.actionQueueSize = size;
+    }
+
+    public NetworkNode getNode() {
+        return node;
+    }
+
+    public boolean isMemoryEnabled() {
+        return memoryEnabled;
+    }
+
+    public void setMemoryEnabled(boolean memoryEnabled) {
+        this.memoryEnabled = memoryEnabled;
+    }
+    
+    public Collection<? extends NetworkNode> getSinkList() {
+        if ( node instanceof Rete ) {
+            Rete rete = (Rete) node;
+            return  rete.getEntryPointNodes().values();
+        } else if ( node instanceof EntryPointNode ) {
+            EntryPointNode epn = (EntryPointNode) node;
+            return epn.getObjectTypeNodes().values();
+        } else if ( node instanceof ObjectSource ) {
+            List<NetworkNode> result = new ArrayList<NetworkNode>();
+            for ( ObjectSink sink : ((ObjectSource)node).getSinkPropagator().getSinks() ) {
+                result.add( (NetworkNode) sink );
+            }
+            return result;
+        } else if ( node instanceof LeftTupleSource ) {
+            List<NetworkNode> result = new ArrayList<NetworkNode>();
+            LeftTupleSource source = (LeftTupleSource) node;
+            for ( LeftTupleSink sink : source.getSinkPropagator().getSinks() ) {
+                result.add( (NetworkNode) sink );
+            }
+            return result;
+        }
+        return Collections.emptyList();
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/DefaultNodeInfo.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,32 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.EvalConditionNode;
+import org.drools.reteoo.EvalConditionNode.EvalMemory;
+
+public class EvalConditionNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final EvalConditionNodeVisitor INSTANCE = new EvalConditionNodeVisitor();
+    
+    protected EvalConditionNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        EvalConditionNode ecn = (EvalConditionNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final EvalMemory memory = (EvalMemory) info.getSession().getNodeMemory( ecn );
+        
+        ni.setMemoryEnabled( ecn.isLeftTupleMemoryEnabled() );
+        
+        if( ecn.isLeftTupleMemoryEnabled() ) {
+            ni.setTupleMemorySize( memory.getLeftTupleMemory().size() );
+        }
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/EvalConditionNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,46 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.FromNode;
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.FromNode.FromMemory;
+
+public class FromNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final FromNodeVisitor INSTANCE = new FromNodeVisitor();
+    
+    protected FromNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        FromNode fn = (FromNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final FromMemory memory = (FromMemory) info.getSession().getNodeMemory( fn );
+        
+        ni.setMemoryEnabled( true );
+        
+        if( fn.isLeftTupleMemoryEnabled() ) {
+            ni.setTupleMemorySize( memory.betaMemory.getLeftTupleMemory().size() );
+
+            long handles = 0;
+            org.drools.util.Iterator it = memory.betaMemory.getLeftTupleMemory().iterator();
+            for ( LeftTuple leftTuple = (LeftTuple) it.next(); leftTuple != null; leftTuple = (LeftTuple) it.next() ) {
+                LeftTuple child = leftTuple.getBetaChildren();
+                while( child != null ) {
+                    handles++;
+                    child = child.getLeftParentNext();
+                }
+            }                
+            ni.setCreatedFactHandles( handles );
+        } else {
+            info.warn( "The left memory for this node is disabled, making it impossible to calculate the number of created handles" );
+        }
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/FromNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,28 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.LeftInputAdapterNode;
+import org.drools.util.RightTupleList;
+
+public class LeftInputAdapterNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final LeftInputAdapterNodeVisitor INSTANCE = new LeftInputAdapterNodeVisitor();
+    
+    protected LeftInputAdapterNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        LeftInputAdapterNode an = (LeftInputAdapterNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final RightTupleList memory = (RightTupleList) info.getSession().getNodeMemory( an );
+        
+        ni.setMemoryEnabled( true );
+        ni.setFactMemorySize( memory.size() );
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/LeftInputAdapterNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,13 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+
+public interface NetworkNodeVisitor {
+
+    void visit(NetworkNode parent,
+               Stack<NetworkNode> nodeStack,
+               StatefulKnowledgeSessionInfo info);
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NetworkNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,62 @@
+package org.drools.util.debug;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.drools.common.NetworkNode;
+import org.drools.common.RuleBasePartitionId;
+import org.drools.rule.Rule;
+
+public interface NodeInfo {
+
+    /**
+     * Returns this node ID
+     * @return
+     */
+    public int getId();
+
+    /**
+     * Returns the partition ID this node belongs to
+     * @return
+     */
+    public RuleBasePartitionId getPartitionId();
+
+    /**
+     * Returns the set of rules this node belongs to
+     * @return
+     */
+    public Set<Rule> getRules();
+
+    /**
+     * Returns the actual node
+     * @return
+     */
+    public NetworkNode getNode();
+    
+    /**
+     * Returns true if memory is enabled for this node
+     * @return
+     */
+    public boolean isMemoryEnabled();
+
+    /**
+     * Returns the number of tuples in the tuple memory 
+     * @return
+     */
+    public long getTupleMemorySize();
+
+    /**
+     * Returns the number of facts in the fact memory
+     * @return
+     */
+    public long getFactMemorySize();
+
+    /**
+     * Returns the number of infered fact handles created in this node
+     * @return
+     */
+    public long getCreatedFactHandles();
+    
+    public Collection<? extends NetworkNode> getSinkList();
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/NodeInfo.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,31 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.util.ObjectHashSet;
+
+public class ObjectTypeNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final ObjectTypeNodeVisitor INSTANCE = new ObjectTypeNodeVisitor();
+    
+    protected ObjectTypeNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        ObjectTypeNode otn = (ObjectTypeNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        ni.setMemoryEnabled( otn.isObjectMemoryEnabled() );
+        
+        if( otn.isObjectMemoryEnabled() ) {
+            final ObjectHashSet memory = (ObjectHashSet) info.getSession().getNodeMemory( otn );
+            ni.setFactMemorySize( memory.size() );
+        }
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/ObjectTypeNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,27 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.PropagationQueuingNode;
+import org.drools.reteoo.PropagationQueuingNode.PropagationQueueingNodeMemory;
+
+public class PropagationQueueingNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final PropagationQueueingNodeVisitor INSTANCE = new PropagationQueueingNodeVisitor();
+    
+    protected PropagationQueueingNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        PropagationQueuingNode pqn = (PropagationQueuingNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        PropagationQueueingNodeMemory memory = (PropagationQueueingNodeMemory) info.getSession().getNodeMemory( pqn ); 
+        ni.setMemoryEnabled( true );
+        ni.setActionQueueSize( memory.getSize() );
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/PropagationQueueingNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,34 @@
+package org.drools.util.debug;
+
+import java.util.LinkedList;
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.QueryTerminalNode;
+import org.drools.rule.Rule;
+
+public class QueryTerminalNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final QueryTerminalNodeVisitor INSTANCE = new QueryTerminalNodeVisitor();
+    
+    protected QueryTerminalNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        QueryTerminalNode rtn = (QueryTerminalNode) node;
+        Rule rule = rtn.getRule();
+        // first thing, associate all nodes belonging to this rule
+        for( NetworkNode snode : nodeStack ) {
+            info.assign( snode, rule );
+        }
+
+        final LinkedList<?> memory = (LinkedList<?>) info.getSession().getNodeMemory( rtn );
+        final DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        ni.setMemoryEnabled( true );
+        ni.setTupleMemorySize( memory.size() );
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/QueryTerminalNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,29 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.RightInputAdapterNode;
+import org.drools.util.ObjectHashMap;
+
+public class RightInputAdapterNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final RightInputAdapterNodeVisitor INSTANCE = new RightInputAdapterNodeVisitor();
+    
+    protected RightInputAdapterNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        RightInputAdapterNode an = (RightInputAdapterNode) node;
+        DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        final ObjectHashMap memory = (ObjectHashMap) info.getSession().getNodeMemory( an );
+        
+        ni.setMemoryEnabled( true );
+        ni.setTupleMemorySize( memory.size() );
+        ni.setCreatedFactHandles( memory.size() );
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RightInputAdapterNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,35 @@
+package org.drools.util.debug;
+
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.RuleTerminalNode;
+import org.drools.reteoo.RuleTerminalNode.TerminalNodeMemory;
+import org.drools.rule.Rule;
+
+public class RuleTerminalNodeVisitor extends AbstractNetworkNodeVisitor {
+    
+    public static final RuleTerminalNodeVisitor INSTANCE = new RuleTerminalNodeVisitor();
+    
+    protected RuleTerminalNodeVisitor() {
+    }
+
+    @Override
+    protected void doVisit(NetworkNode node,
+                           Stack<NetworkNode> nodeStack,
+                           StatefulKnowledgeSessionInfo info) {
+        RuleTerminalNode rtn = (RuleTerminalNode) node;
+        Rule rule = rtn.getRule();
+        // first thing, associate all nodes belonging to this rule
+        for( NetworkNode snode : nodeStack ) {
+            info.assign( snode, rule );
+        }
+
+        final TerminalNodeMemory memory = (TerminalNodeMemory) info.getSession().getNodeMemory( rtn );
+        final DefaultNodeInfo ni = (DefaultNodeInfo) info.getNodeInfo( node );
+        ni.setMemoryEnabled( true );
+        ni.setTupleMemorySize( memory.getTupleMemory().size() );
+
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/RuleTerminalNodeVisitor.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.util.debug;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+
+import org.drools.common.NetworkNode;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.reteoo.AccumulateNode;
+import org.drools.reteoo.AlphaNode;
+import org.drools.reteoo.CollectNode;
+import org.drools.reteoo.EntryPointNode;
+import org.drools.reteoo.EvalConditionNode;
+import org.drools.reteoo.ExistsNode;
+import org.drools.reteoo.FromNode;
+import org.drools.reteoo.JoinNode;
+import org.drools.reteoo.LeftInputAdapterNode;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.NotNode;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.PropagationQueuingNode;
+import org.drools.reteoo.QueryTerminalNode;
+import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.RightInputAdapterNode;
+import org.drools.reteoo.RuleTerminalNode;
+import org.drools.rule.Rule;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+/**
+ * @author etirelli
+ *
+ */
+public class SessionInspector {
+
+    private StatefulKnowledgeSession                               session;
+    private Map<Class< ? extends NetworkNode>, NetworkNodeVisitor> visitors;
+
+    public SessionInspector(StatefulKnowledgeSession session) {
+        this.session = session;
+        this.visitors = new HashMap<Class< ? extends NetworkNode>, NetworkNodeVisitor>();
+        
+        // terminal nodes
+        this.visitors.put( RuleTerminalNode.class,
+                           RuleTerminalNodeVisitor.INSTANCE );
+        this.visitors.put( QueryTerminalNode.class,
+                           QueryTerminalNodeVisitor.INSTANCE );
+        
+        // root node
+        this.visitors.put( Rete.class,
+                           DefaultNetworkNodeVisitor.INSTANCE );
+        
+        // object source nodes
+        this.visitors.put( EntryPointNode.class,
+                           DefaultNetworkNodeVisitor.INSTANCE );
+        this.visitors.put( ObjectTypeNode.class,
+                           ObjectTypeNodeVisitor.INSTANCE );
+        this.visitors.put( AlphaNode.class,
+                           AlphaNodeVisitor.INSTANCE );
+        this.visitors.put( RightInputAdapterNode.class,
+                           RightInputAdapterNodeVisitor.INSTANCE );
+        this.visitors.put( PropagationQueuingNode.class,
+                           PropagationQueueingNodeVisitor.INSTANCE );
+        
+        // left tuple source nodes
+        this.visitors.put( JoinNode.class,
+                           BetaNodeVisitor.INSTANCE );
+        this.visitors.put( NotNode.class,
+                           BetaNodeVisitor.INSTANCE );
+        this.visitors.put( ExistsNode.class,
+                           BetaNodeVisitor.INSTANCE );
+        this.visitors.put( AccumulateNode.class,
+                           AccumulateNodeVisitor.INSTANCE );
+        this.visitors.put( CollectNode.class,
+                           CollectNodeVisitor.INSTANCE );
+        this.visitors.put( EvalConditionNode.class,
+                           EvalConditionNodeVisitor.INSTANCE );
+        this.visitors.put( FromNode.class,
+                           FromNodeVisitor.INSTANCE );
+        this.visitors.put( LeftInputAdapterNode.class,
+                           LeftInputAdapterNodeVisitor.INSTANCE );
+        
+    }
+
+    public StatefulKnowledgeSessionInfo getSessionInfo() {
+        StatefulKnowledgeSessionInfo info = new StatefulKnowledgeSessionInfo();
+        ReteooWorkingMemory wm = ((StatefulKnowledgeSessionImpl) this.session).session;
+        ReteooRuleBase rulebase = (ReteooRuleBase) wm.getRuleBase();
+
+        info.setSession( wm );
+
+        Stack<NetworkNode> nodeStack = new Stack<NetworkNode>();
+        gatherNodeInfo( rulebase.getRete(),
+                        nodeStack,
+                        info );
+
+        return info;
+    }
+
+    private void gatherNodeInfo(NetworkNode parent,
+                                Stack<NetworkNode> nodeStack,
+                                StatefulKnowledgeSessionInfo info) {
+        if ( !info.visited( parent ) ) {
+            nodeStack.push( parent );
+            NetworkNodeVisitor visitor = visitors.get( parent.getClass() );
+            if ( visitor != null ) {
+                visitor.visit( parent,
+                               nodeStack,
+                               info );
+            } else {
+                throw new RuntimeException( "No visitor found for node: " + parent );
+            }
+            visitChildren( parent,
+                           nodeStack,
+                           info );
+            nodeStack.pop();
+        } else {
+            // if already visited, then assign the same rules to the nodes currently in the stack
+            Set<Rule> rules = info.getNodeInfo( parent ).getRules();
+            for ( NetworkNode snode : nodeStack ) {
+                for ( Rule rule : rules ) {
+                    info.assign( snode,
+                                 rule );
+                }
+            }
+        }
+    }
+
+    protected void visitChildren(NetworkNode parent,
+                                 Stack<NetworkNode> nodeStack,
+                                 StatefulKnowledgeSessionInfo info) {
+        if ( parent instanceof Rete ) {
+            Rete rete = (Rete) parent;
+            for ( EntryPointNode sink : rete.getEntryPointNodes().values() ) {
+                gatherNodeInfo( sink,
+                                nodeStack,
+                                info );
+            }
+        } else if ( parent instanceof EntryPointNode ) {
+            EntryPointNode epn = (EntryPointNode) parent;
+            for ( ObjectTypeNode sink : epn.getObjectTypeNodes().values() ) {
+                gatherNodeInfo( sink,
+                                nodeStack,
+                                info );
+            }
+        } else if ( parent instanceof ObjectSource ) {
+            ObjectSource source = (ObjectSource) parent;
+            for ( ObjectSink sink : source.getSinkPropagator().getSinks() ) {
+                gatherNodeInfo( sink,
+                                nodeStack,
+                                info );
+            }
+        } else if ( parent instanceof LeftTupleSource ) {
+            LeftTupleSource source = (LeftTupleSource) parent;
+            for ( LeftTupleSink sink : source.getSinkPropagator().getSinks() ) {
+                gatherNodeInfo( sink,
+                                nodeStack,
+                                info );
+            }
+        } else if ( parent instanceof RuleTerminalNode || parent instanceof QueryTerminalNode ) {
+            // no children to visit
+        } else {
+            // did we forget any node type?
+            throw new RuntimeException( "ERROR: No idea how to visit childrens of this node: " + parent );
+        }
+    }
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionInspector.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,51 @@
+package org.drools.util.debug;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.mvel2.compiler.AbstractParser;
+import org.mvel2.integration.impl.MapVariableResolverFactory;
+import org.mvel2.optimizers.OptimizerFactory;
+import org.mvel2.templates.SimpleTemplateRegistry;
+import org.mvel2.templates.TemplateCompiler;
+import org.mvel2.templates.TemplateRegistry;
+import org.mvel2.templates.TemplateRuntime;
+
+public class SessionReporter {
+
+    protected static final TemplateRegistry REPORT_REGISTRY = new SimpleTemplateRegistry();
+
+    static {
+        OptimizerFactory.setDefaultOptimizer( "reflective" );
+
+        REPORT_REGISTRY.addNamedTemplate( "simple",
+                                          TemplateCompiler.compileTemplate( SessionReporter.class.getResourceAsStream( "reports.mvel" ),
+                                                                            null ) );
+
+        /**
+         * Process these templates
+         */
+        TemplateRuntime.execute( REPORT_REGISTRY.getNamedTemplate( "simple" ),
+                                 null,
+                                 REPORT_REGISTRY );
+    }
+
+    public static String generateReport(final String ruleTemplate,
+                                        final StatefulKnowledgeSessionInfo session,
+                                        final Map<String, Object> vars) {
+        AbstractParser.setLanguageLevel( 5 );
+
+        Map<String, Object> context = new HashMap<String, Object>();
+        if ( vars != null ) {
+            context.putAll( vars );
+        }
+        context.put( "session",
+                     session );
+
+        return (String) TemplateRuntime.execute( REPORT_REGISTRY.getNamedTemplate( ruleTemplate ),
+                                                 null,
+                                                 new MapVariableResolverFactory( context ),
+                                                 REPORT_REGISTRY );
+    }
+
+}


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/SessionReporter.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.util.debug;
+
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.drools.common.NetworkNode;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+
+public class StatefulKnowledgeSessionInfo {
+    private ReteooWorkingMemory               session;
+    private Map<NetworkNode, DefaultNodeInfo> nodesInfo;
+    private List<String>                      log;
+
+    private SimpleDateFormat                  df;
+
+    public StatefulKnowledgeSessionInfo() {
+        nodesInfo = new TreeMap<NetworkNode, DefaultNodeInfo>( new Comparator<NetworkNode>() {
+            public int compare(NetworkNode o1,
+                               NetworkNode o2) {
+                return o1.getId() - o2.getId();
+            }
+        } );
+        log = new LinkedList<String>();
+        df = new SimpleDateFormat( "HH:mm:ss.SSS" );
+    }
+
+    public Package[] getPackages() {
+        return this.session.getRuleBase().getPackages();
+    }
+
+    public int getNodeCount() {
+        return ((ReteooRuleBase) this.session.getRuleBase()).getNodeCount();
+    }
+
+    public int getExternalFactCount() {
+        return this.session.getObjectStore().size();
+    }
+
+    public void assign(NetworkNode snode,
+                       Rule rule) {
+        DefaultNodeInfo info = this.nodesInfo.get( snode );
+        info.assign( rule );
+    }
+
+    public boolean visited(NetworkNode node) {
+        return this.nodesInfo.containsKey( node );
+    }
+
+    public DefaultNodeInfo getNodeInfo(NetworkNode node) {
+        return this.nodesInfo.get( node );
+    }
+
+    public void addNodeInfo(NetworkNode node,
+                            DefaultNodeInfo dni) {
+        this.nodesInfo.put( node,
+                            dni );
+    }
+
+    public void info(String msg) {
+        log( msg,
+             " [INFO] - " );
+    }
+
+    public void warn(String msg) {
+        log( msg,
+             " [WARN] - " );
+    }
+
+    public void error(String msg) {
+        log( msg,
+             " [ERRO] - " );
+    }
+
+    private void log(String msg,
+                     String lvl) {
+        log.add( df.format( System.currentTimeMillis() ) + lvl + msg );
+    }
+
+    public List<String> getLog() {
+        return log;
+    }
+
+    public Collection< ? extends NodeInfo> getNodeInfos() {
+        return this.nodesInfo.values();
+    }
+
+    public ReteooWorkingMemory getSession() {
+        return session;
+    }
+
+    public void setSession(ReteooWorkingMemory session) {
+        this.session = session;
+    }
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/java/org/drools/util/debug/StatefulKnowledgeSessionInfo.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel
===================================================================
--- labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel	                        (rev 0)
+++ labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel	2009-12-21 14:26:39 UTC (rev 30786)
@@ -0,0 +1,27 @@
+ at declare{"simple"}
+********************************************************************************************
+                          Report for Knowledge Session
+********************************************************************************************
+Next node id      : @{session.nodeCount}
+User facts count  : @{session.externalFactCount}
+
+============== Deployed Packages ===========
+ at foreach{ pkg : session.packages }Package: @{pkg.name}    rules: @{pkg.rules.length} 
+ at end{}
+
+============== Nodes Info ==================
+    @foreach{node : session.nodeInfos}Node: @{node.node}
+            @if{node.memoryEnabled == "true"}Memory: @if{node.factMemorySize!="-1"}facts: @{node.factMemorySize}   @end{}@if{node.tupleMemorySize!="-1"}tuples: @{node.tupleMemorySize}   @end{}@if{node.createdFactHandles!="-1"}created handles: @{node.createdFactHandles}@end{}@if{node.actionQueueSize!="-1"}action queue: @{node.actionQueueSize}@end{}@else{}Node memory disabled at end{}
+ at if{node.sinkList.empty == "false"}            Connects to nodes: 
+                @foreach{child : node.sinkList}@{child}
+                @end{}
+ at end{}            Rules:
+                @foreach{ rule : node.rules }rule : @{rule.name}
+                @end{}
+    @end{}    
+
+============== Execution Log ==================
+    @foreach{msg : session.log}@{msg}
+    @end{}                          
+ at end{}    
+    
\ No newline at end of file


Property changes on: labs/jbossrules/branches/5.0.x/drools-core/src/main/resources/org/drools/util/debug/reports.mvel
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/branches/5.0.x/pom.xml
===================================================================
--- labs/jbossrules/branches/5.0.x/pom.xml	2009-12-20 18:50:08 UTC (rev 30785)
+++ labs/jbossrules/branches/5.0.x/pom.xml	2009-12-21 14:26:39 UTC (rev 30786)
@@ -547,6 +547,9 @@
                     <configuration>
                         <source>1.5</source>
                         <target>1.5</target>
+                        <fork>true</fork>
+                        <meminitial>128m</meminitial>
+                        <maxmem>512m</maxmem>
                     </configuration>
                 </plugin>
                 <plugin>



More information about the jboss-svn-commits mailing list