[jboss-svn-commits] JBL Code SVN: r31069 - in labs/jbossrules/trunk: drools-guvnor/src/test/java/org/drools/guvnor/server and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 13 15:14:44 EST 2010


Author: mark.proctor at jboss.com
Date: 2010-01-13 15:14:43 -0500 (Wed, 13 Jan 2010)
New Revision: 31069

Added:
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java
Modified:
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
Log:
JBRULES-2311 Group test rules for analysing just one rule, decision table, rule package and so on
-Added back in deleted files that broke Guvnor. no idea if they are correct, just getting trunk building again.

Added: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java	2010-01-13 20:14:43 UTC (rev 31069)
@@ -0,0 +1,104 @@
+package org.drools.doc;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DrlPackageData {
+    private static final String            packageExpr  = "(^\\s*#.*?\\n)?(^\\s*package.*?$)(.*?)";
+    private static final Pattern           finder       = Pattern.compile( packageExpr,
+                                                                           Pattern.DOTALL | Pattern.MULTILINE );
+
+    private static final Pattern           globalFinder = Pattern.compile( "(^\\s*global.*?$)",
+                                                                           Pattern.DOTALL | Pattern.MULTILINE );
+
+    final String                           packageName;
+    final List<DrlRuleData>                rules;
+    final String                           description;
+
+    public final List<String>              metadata;
+
+    public final Map<String, List<String>> otherInformation;
+    public final List<String>              globals;
+
+    public DrlPackageData(String packageName,
+                          String description,
+                          List<DrlRuleData> rules,
+                          List<String> globals,
+                          List<String> metadata,
+                          Map<String, List<String>> otherInformation) {
+        this.packageName = packageName;
+        this.description = description;
+        this.rules = rules;
+        this.globals = globals;
+        this.metadata = metadata;
+        this.otherInformation = otherInformation;
+    }
+
+    public static DrlPackageData findPackageDataFromDrl(String drl) {
+
+        final Matcher m = finder.matcher( drl );
+        m.find();
+
+        String packageNameRow = m.group( 2 );
+
+        int indexOfPackage = packageNameRow.indexOf( "package" );
+        String packageName = packageNameRow.substring( indexOfPackage + "package".length() ).trim();
+
+        Comment comment = DrlRuleData.processComment( m.group( 1 ) );
+
+        return new DrlPackageData( packageName,
+                                   comment.description,
+                                   DrlRuleData.findRulesDataFromDrl( drl ),
+                                   findGlobals( drl ),
+                                   comment.metadata,
+                                   new HashMap<String, List<String>>() );
+    }
+
+    public static List<String> findGlobals(String drl) {
+        List<String> globals = new ArrayList<String>();
+        Matcher gm = globalFinder.matcher( drl );
+
+        while ( gm.find() ) {
+            String row = gm.group();
+            globals.add( row.substring( row.indexOf( "global" ) + "global".length() ).trim() );
+        }
+
+        return globals;
+    }
+
+    static Comment processComment(String text) {
+        Comment comment = new Comment();
+
+        if ( text == null ) {
+            comment.description = "";
+            comment.metadata = new ArrayList<String>();
+
+            return comment;
+        }
+
+        comment.description = text.replaceAll( "#",
+                                               "" ).trim();
+        comment.metadata = findMetaData( text );
+
+        return comment;
+    }
+
+    private static List<String> findMetaData(String text) {
+        List<String> list = new ArrayList<String>();
+
+        while ( text.contains( "@" ) ) {
+            int start = text.indexOf( '@' );
+            text = text.substring( start + 1 );
+            int end = text.indexOf( "\n" );
+            list.add( text.substring( 0,
+                                      end ) );
+            text = text.substring( end );
+        }
+
+        return list;
+    }
+}

Added: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java	2010-01-13 20:14:43 UTC (rev 31069)
@@ -0,0 +1,167 @@
+package org.drools.doc;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DrlRuleData {
+    private static final String            rulesExpr = "(^\\s*#.*?\\n)?(^\\s*rule.*?$)(.*?)(when)(.*?)(then)(.*?)(^\\s*end)";
+
+    private static final Pattern           finder    = Pattern.compile( rulesExpr,
+                                                                        Pattern.DOTALL | Pattern.MULTILINE );
+
+    public final Collection<String>        header;
+    public final Collection<String>        lhs;
+    public final Collection<String>        rhs;
+
+    public final String                    ruleName;
+
+    public final String                    description;
+
+    public final Collection<String>        metadata;
+
+    public final Map<String, List<String>> otherInformation;
+
+    private DrlRuleData(String ruleName,
+                        String header,
+                        String lhs,
+                        String rhs,
+                        String description,
+                        List<String> metadata,
+                        Map<String, List<String>> otherInformation) {
+        this.ruleName = ruleName;
+        this.header = asList( header.split( "\n" ) );
+        this.lhs = asList( lhs.split( "\n" ) );
+        this.rhs = asList( rhs.split( "\n" ) );
+        this.description = description;
+        this.metadata = metadata;
+        this.otherInformation = otherInformation;
+    }
+
+    private Collection<String> asList(String[] array) {
+        Collection<String> list = new ArrayList<String>();
+
+        for ( int i = 0; i < array.length; i++ ) {
+            String string = array[i];
+            if ( !string.trim().equals( "" ) ) {
+                list.add( string );
+            }
+        }
+
+        return list;
+    }
+
+    public static List<DrlRuleData> findRulesDataFromDrl(String drl) {
+        final Matcher m = finder.matcher( drl );
+        final List<DrlRuleData> list = new ArrayList<DrlRuleData>();
+
+        while ( m.find() ) {
+
+            // System.out.println( "1 " + m.group( 1 ) );
+            // System.out.println( "2 " + m.group( 2 ) );
+            // System.out.println( "3 " + m.group( 3 ) );
+            // System.out.println( "4 " + m.group( 4 ) );
+            // System.out.println( "5 " + m.group( 5 ) );
+            // System.out.println( "6 " + m.group( 6 ) );
+            // System.out.println( "7 " + m.group( 7 ) );
+
+            Comment comment = processComment( m.group( 1 ) );
+
+            String ruleName = m.group( 2 );
+
+            ruleName = trimRuleName( ruleName );
+
+            list.add( new DrlRuleData( ruleName,
+                                       m.group( 3 ),
+                                       m.group( 5 ),
+                                       m.group( 7 ),
+                                       comment.description,
+                                       comment.metadata,
+                                       new HashMap<String, List<String>>() ) );
+        }
+
+        return list;
+    }
+
+    private static String trimRuleName(String ruleName) {
+        ruleName = ruleName.substring( ruleName.indexOf( "rule" ) + "rule".length() ).trim();
+
+        if ( ruleName.indexOf( "\"" ) == 0 ) {
+            ruleName = ruleName.substring( 1 );
+        }
+
+        if ( ruleName.lastIndexOf( "\"" ) == (ruleName.length() - 1) ) {
+            ruleName = ruleName.substring( 0,
+                                           ruleName.length() - 1 );
+        }
+
+        return ruleName;
+    }
+
+    static Comment processComment(String text) {
+        Comment comment = new Comment();
+
+        if ( text == null ) {
+            comment.description = "";
+            comment.metadata = new ArrayList<String>();
+
+            return comment;
+        }
+
+        // Sometimes the first rule in a file gets the package imports and
+        // comments included.
+        // Checking for that and fixing the description if this did happen.
+
+        StringBuilder description = new StringBuilder();
+        String[] commentLines = text.split( "\n" );
+        for ( int i = 0; i < commentLines.length; i++ ) {
+            String line = commentLines[i].trim();
+
+            if ( line.startsWith( "#" ) ) {
+                while ( line.startsWith( "#" ) ) {
+                    line = line.substring( 1 );
+                }
+
+                line = line.trim();
+
+                if ( !line.startsWith( "@" ) ) {
+                    description.append( line );
+                    description.append( "\n" );
+                }
+            } else {
+                description.delete( 0,
+                                    description.length() );
+            }
+
+        }
+        comment.description = description.toString();
+
+        comment.metadata = findMetaData( text );
+
+        return comment;
+    }
+
+    private static List<String> findMetaData(String text) {
+        List<String> list = new ArrayList<String>();
+
+        while ( text.contains( "@" ) ) {
+            int start = text.indexOf( '@' );
+            text = text.substring( start + 1 );
+            int end = text.indexOf( "\n" );
+            list.add( text.substring( 0,
+                                      end ) );
+            text = text.substring( end );
+        }
+
+        return list;
+    }
+}
+
+class Comment {
+    String       description;
+    List<String> metadata;
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java	2010-01-13 17:53:27 UTC (rev 31068)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java	2010-01-13 20:14:43 UTC (rev 31069)
@@ -24,6 +24,7 @@
 public class DroolsDocsBuilder {
 
     protected final String currentDate = getFormatter().format( new Date() );
+    
 
     protected static Format getFormatter() {
         return new SimpleDateFormat( getDateFormatMask() );
@@ -31,9 +32,14 @@
 
     private final DrlPackageParser packageData;
 
-    protected DroolsDocsBuilder(String packageDrl) {
+    public DroolsDocsBuilder(String packageDrl) {
         this.packageData = DrlPackageParser.findPackageDataFromDrl( packageDrl );
     }
+    
+    protected DroolsDocsBuilder(DrlPackageData packageData) {
+        // @ FIXME
+        throw new UnsupportedOperationException( "Waiting for Rikkola to fix his bad commit" );
+    }    
 
     protected DroolsDocsBuilder(DrlPackageParser packageData) {
         this.packageData = packageData;

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-01-13 17:53:27 UTC (rev 31068)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-01-13 20:14:43 UTC (rev 31069)
@@ -30,7 +30,7 @@
 import org.drools.Person;
 import org.drools.RuleBase;
 import org.drools.StatelessSession;
-import org.drools.builder.impl.DateFormatsImpl;
+import org.drools.type.DateFormatsImpl;
 import org.drools.guvnor.client.common.AssetFormats;
 import org.drools.guvnor.client.common.Inbox;
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;



More information about the jboss-svn-commits mailing list