[jboss-svn-commits] JBL Code SVN: r9686 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/base and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 21 17:57:32 EST 2007


Author: tirelli
Date: 2007-02-21 17:57:32 -0500 (Wed, 21 Feb 2007)
New Revision: 9686

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
Log:
JBRULES-696: I think now it is dead

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl	2007-02-21 22:57:32 UTC (rev 9686)
@@ -10,7 +10,6 @@
     when
         not Alarm( )
     then
-        System.out.println("Everything is Normal");
         events.add("Everything is Normal");
 end   
 
@@ -20,7 +19,6 @@
         sensor : Sensor( temperature > 100 ) or Sensor( pressure > 150 )
     then
         events.add( "Problem detected: "+sensor.toString() );
-        System.out.println( "Problem detected: " + sensor.toString() );
         assertLogical( new Alarm( "Call emergency team" ) );
 end 
 
@@ -29,7 +27,6 @@
         Alarm ( )
     then
         events.add( "Calling Emergency Team" );
-        System.out.println( "Calling Emergency Team" );
         assertLogical( new EmergencyTeam() );
 end
 
@@ -40,7 +37,6 @@
         sensor : Sensor( temperature > 100 )
     then
         events.add( "Solving temperature problem" );
-        System.out.println(  "Solving temperature problem" );
         sensor.setTemperature(80);
         modify(sensor);
 end
@@ -52,7 +48,6 @@
         sensor : Sensor( pressure > 150 )
     then
         events.add( "Solving pressure problem" );
-        System.out.println(  "Solving pressure problem" );
         sensor.setPressure(80);
         modify(sensor);
 end

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl	2007-02-21 22:57:32 UTC (rev 9686)
@@ -7,7 +7,6 @@
     $s : Sensor( temperature > 100 )
 then
     events.add( "It is hot: " + $s );
-    System.out.println("It is hot: " + $s);
     assertLogical(new Alarm("FIRE"));
 end
 
@@ -16,5 +15,4 @@
     Alarm( message == "FIRE" )
 then
     events.add( "Fire alarm is ON" );
-    System.out.println("Fire alarm is ON");
 end 
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java	2007-02-21 22:57:32 UTC (rev 9686)
@@ -42,9 +42,9 @@
 
     //private static final String FIELD_NAME_PREFIX   = "__";
 
-    private static final String FIELD_SET_FLAG      = "IsSet";
+    public static final String FIELD_SET_FLAG      = "IsSet";
 
-    private static final String DELEGATE_FIELD_NAME = "delegate";
+    public static final String DELEGATE_FIELD_NAME = "delegate";
 
     public static Class getProxy(final Class clazz) {
         try {

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java	2007-02-21 22:57:32 UTC (rev 9686)
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * 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.base;
+
+import java.lang.reflect.Field;
+
+import org.drools.RuntimeDroolsException;
+
+/**
+ * A helper class with utility methods
+ * 
+ * @author etirelli
+ */
+public class ShadowProxyHelper {
+
+    public static void copyState(ShadowProxy from,
+                                 ShadowProxy to) {
+        Field[] fields = from.getClass().getDeclaredFields();
+        for ( int i = 0; i < fields.length; i++ ) {
+            if ( fields[i].getName().endsWith( ShadowProxyFactory.FIELD_SET_FLAG ) ) {
+                fields[i].setAccessible( true );
+                try {
+                    if ( fields[i].getBoolean( from ) ) {
+                        String fieldName = fields[i].getName().substring( 0,
+                                                                          fields[i].getName().length() - ShadowProxyFactory.FIELD_SET_FLAG.length() );
+                        Field flag = to.getClass().getDeclaredField( fields[i].getName() );
+                        Field fieldFrom = from.getClass().getDeclaredField( fieldName );
+                        Field fieldTo = to.getClass().getDeclaredField( fieldName );
+                        flag.setAccessible( true );
+                        fieldFrom.setAccessible( true );
+                        fieldTo.setAccessible( true );
+                        
+                        // we know it is set
+                        flag.setBoolean( to, true );
+                        // copy the value from "from" shadow proxy
+                        fieldTo.set( to, fieldFrom.get( from ) );
+                    }
+                } catch ( Exception e ) {
+                    throw new RuntimeDroolsException("Unable to copy state from one shadow proxy to another");
+                }
+
+            }
+        }
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2007-02-21 22:57:32 UTC (rev 9686)
@@ -143,6 +143,7 @@
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+
         memory.getFactHandleMemory().add( handle );
 
         final Iterator it = memory.getTupleMemory().iterator(handle);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2007-02-21 22:57:32 UTC (rev 9686)
@@ -19,11 +19,9 @@
 import java.io.Serializable;
 
 import org.drools.RuleBaseConfiguration;
-import org.drools.base.ClassObjectType;
 import org.drools.base.ShadowProxy;
+import org.drools.base.ShadowProxyHelper;
 import org.drools.common.BaseNode;
-import org.drools.common.EmptyBetaConstraints;
-import org.drools.common.InternalAgenda;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.NodeMemory;
@@ -156,8 +154,13 @@
                     ((ShadowProxy) handle.getObject()).updateProxy();
                 } else {
                     // replaces the old shadow proxy for a more specialized version of it
-                    handle.setObject( this.objectType.getShadow( ((ShadowProxy)handle.getObject()).getShadowedObject() ) );
+                    ShadowProxy old = (ShadowProxy)handle.getObject();
+                    handle.setObject( this.objectType.getShadow( old.getShadowedObject() ) );
                     handle.setShadowFact( true );
+
+                    // we MUST copy state from one proxy to the other as we are in a dynamic rules engine
+                    // and new rules with different object types may be added at any moment
+                    ShadowProxyHelper.copyState( old, (ShadowProxy)handle.getObject() );
                 }
             }
         }
@@ -189,6 +192,7 @@
     public void retractObject(final InternalFactHandle handle,
                               final PropagationContext context,
                               final InternalWorkingMemory workingMemory) {
+
         if (context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
             return;
         }         

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2007-02-21 22:57:32 UTC (rev 9686)
@@ -368,6 +368,10 @@
         public boolean equals(final Object object) {
             return (object == this) || (this.handle == ((FactEntry) object).handle);
         }
+        
+        public String toString() {
+            return "FactEntry( handle="+this.handle+" hashcode="+this.hashCode+" next="+this.next+" )";
+        }
     }
 
     public static class FieldIndex {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java	2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java	2007-02-21 22:57:32 UTC (rev 9686)
@@ -131,7 +131,7 @@
         final Object object = handle.getObject();
         //this.index.setCachedValue( object );
         final int hashCode = this.index.hashCodeOf( object );
-
+        
         final int index = indexOf( hashCode,
                              this.table.length );
 
@@ -336,5 +336,9 @@
             final FieldIndexEntry other = (FieldIndexEntry) object;
             return this.hashCode == other.hashCode && this.index == other.index;
         }
+        
+        public String toString() {
+            return "FieldIndexEntry( hashCode="+hashCode+" first="+this.first+" )";
+        }
     }
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list