[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