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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 7 05:07:59 EDT 2010


Author: Rikkola
Date: 2010-04-07 05:07:58 -0400 (Wed, 07 Apr 2010)
New Revision: 32455

Added:
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/visitor/NestedPatternsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/visitor/NestedPatterns.drl
Modified:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/PatternDescrVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/RuleDescrVisitor.java
Log:
JBRULES-2474 : Path to nested objects is broken

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java	2010-04-07 02:38:02 UTC (rev 32454)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java	2010-04-07 09:07:58 UTC (rev 32455)
@@ -27,9 +27,18 @@
 
     @Override
     public String getPath() {
-        return String.format( "%s.pattern[%s]",
-                              getRulePath(),
-                              getOrderNumber() );
+        String parentPath = getParentPath();
+
+        if ( parentPath == null ) {
+            return String.format( "%s.pattern[%s]",
+                                  getRulePath(),
+                                  getOrderNumber() );
+
+        } else {
+            return String.format( "%s.pattern[%s]",
+                                  getParentPath(),
+                                  getOrderNumber() );
+        }
     }
 
     public boolean isPatternNot() {

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java	2010-04-07 02:38:02 UTC (rev 32454)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java	2010-04-07 09:07:58 UTC (rev 32455)
@@ -42,7 +42,7 @@
     @Override
     public String getPath() {
         return String.format( "%s.restriction[%s]",
-                              getPatternPath(),
+                              getParentPath(),
                               getOrderNumber() );
     }
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/PatternDescrVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/PatternDescrVisitor.java	2010-04-07 02:38:02 UTC (rev 32454)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/PatternDescrVisitor.java	2010-04-07 09:07:58 UTC (rev 32455)
@@ -44,19 +44,27 @@
         this.rule = rule;
     }
 
-    public void visitPatternDescr(PatternDescr descr,
-                                  VerifierComponent parent,
-                                  int orderNumber) throws UnknownDescriptionException {
-        Pattern pattern = visitPatternDescr( descr,
-                                             orderNumber );
+    public void visit(PatternDescr descr,
+                      VerifierComponent parent,
+                      int orderNumber) throws UnknownDescriptionException {
+        visitPatternDescr( descr,
+                           parent,
+                           orderNumber );
 
-        pattern.setParentPath( parent.getPath() );
-        pattern.setParentType( parent.getVerifierComponentType() );
     }
 
-    public Pattern visitPatternDescr(PatternDescr descr,
-                                     int orderNumber) throws UnknownDescriptionException {
+    public void visit(PatternDescr descr,
+                      int orderNumber) throws UnknownDescriptionException {
+        visitPatternDescr( descr,
+                           null,
+                           orderNumber );
 
+    }
+
+    private Pattern visitPatternDescr(PatternDescr descr,
+                                      VerifierComponent parent,
+                                      int orderNumber) throws UnknownDescriptionException {
+
         objectType = data.getObjectTypeByFullName( descr.getObjectType() );
 
         if ( objectType == null ) {
@@ -72,6 +80,10 @@
         }
 
         pattern = new Pattern( rule );
+        if ( parent != null ) {
+            pattern.setParentPath( parent.getPath() );
+            pattern.setParentType( parent.getVerifierComponentType() );
+        }
         pattern.setObjectTypePath( objectType.getPath() );
         pattern.setName( objectType.getName() );
         pattern.setPatternNot( solvers.getRuleSolver().isChildNot() );
@@ -79,8 +91,6 @@
         pattern.setPatternForall( solvers.getRuleSolver().isForall() );
         pattern.setOrderNumber( orderNumber );
 
-        data.add( pattern );
-
         if ( descr.getIdentifier() != null ) {
             Variable variable = new Variable( rule );
             variable.setName( descr.getIdentifier() );
@@ -110,6 +120,8 @@
 
         solvers.endPatternSolver();
 
+        data.add( pattern );
+
         return pattern;
     }
 
@@ -237,9 +249,9 @@
                                                                rule,
                                                                solvers );
 
-        visitor.visitPatternDescr( descr.getInputPattern(),
-                                   collect,
-                                   0 );
+        visitor.visit( descr.getInputPattern(),
+                       collect,
+                       0 );
         collect.setParentPath( rule.getPath() );
         collect.setParentType( rule.getVerifierComponentType() );
 
@@ -255,6 +267,7 @@
                                                                rule,
                                                                solvers );
         Pattern parentPattern = visitor.visitPatternDescr( descr.getInputPattern(),
+                                                           null,
                                                            0 );
 
         accumulate.setInitCode( descr.getInitCode() );

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/RuleDescrVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/RuleDescrVisitor.java	2010-04-07 02:38:02 UTC (rev 32454)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/visitor/RuleDescrVisitor.java	2010-04-07 09:07:58 UTC (rev 32455)
@@ -196,8 +196,8 @@
         PatternDescrVisitor visitor = new PatternDescrVisitor( data,
                                                                rule,
                                                                solvers );
-        visitor.visitPatternDescr( descr,
-                                   orderNumber.next() );
+        visitor.visit( descr,
+                       orderNumber.next() );
     }
 
     private void formPossibilities() {

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/visitor/NestedPatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/visitor/NestedPatternsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/visitor/NestedPatternsTest.java	2010-04-07 09:07:58 UTC (rev 32455)
@@ -0,0 +1,70 @@
+package org.drools.verifier.visitor;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.data.VerifierComponent;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.data.VerifierReportFactory;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class NestedPatternsTest {
+
+    @Test
+    public void runVisitor() throws DroolsParserException,
+                            UnknownDescriptionException {
+        VerifierData data = VerifierReportFactory.newVerifierData();
+        PackageDescrVisitor visitor = new PackageDescrVisitor( data,
+                                                               Collections.EMPTY_LIST );
+
+        Assert.assertNotNull( data );
+
+        Reader drlReader = new InputStreamReader( getClass().getResourceAsStream( "NestedPatterns.drl" ) );
+        PackageDescr packageDescr = new DrlParser().parse( drlReader );
+
+        Assert.assertNotNull( packageDescr );
+
+        visitor.visitPackageDescr( packageDescr );
+
+        Collection<VerifierComponent> all = data.getAll();
+        int patternCount = 0;
+        for ( VerifierComponent verifierComponent : all ) {
+
+            if ( verifierComponent.getVerifierComponentType().equals( VerifierComponentType.PATTERN ) ) {
+                patternCount++;
+            }
+        }
+        Assert.assertEquals( 4,
+                             patternCount );
+
+        Collection<Pattern> patterns = data.getAll( VerifierComponentType.PATTERN );
+
+//        for ( Pattern pattern : patterns ) {
+//            System.out.println( pattern.getPath() + " " + pattern );
+//        }
+
+        Assert.assertNotNull( patterns );
+        Assert.assertEquals( 4,
+                             patterns.size() );
+
+        Collection<Restriction> restrictions = data.getAll( VerifierComponentType.RESTRICTION );
+
+//        for ( Restriction restriction : restrictions ) {
+//            System.out.println( restriction.getPath() + " " + restriction );
+//        }
+
+        Assert.assertNotNull( restrictions );
+        Assert.assertEquals( 3,
+                             restrictions.size() );
+
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/visitor/NestedPatterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/visitor/NestedPatterns.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/visitor/NestedPatterns.drl	2010-04-07 09:07:58 UTC (rev 32455)
@@ -0,0 +1,8 @@
+rule "rule5"
+   when
+       Person( age == "150" )
+       Person (age < 90)
+      java.util.HashSet( ) from collect ( Person( age == "2010" )) 
+   then
+       System.out.println("Rule fired");
+end
\ No newline at end of file



More information about the jboss-svn-commits mailing list