[jboss-svn-commits] JBL Code SVN: r29362 - in labs/jbossrules/trunk: drools-doc and 20 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Sep 16 02:56:47 EDT 2009
Author: Rikkola
Date: 2009-09-16 02:56:47 -0400 (Wed, 16 Sep 2009)
New Revision: 29362
Added:
labs/jbossrules/trunk/drools-doc/
labs/jbossrules/trunk/drools-doc/.classpath
labs/jbossrules/trunk/drools-doc/.project
labs/jbossrules/trunk/drools-doc/.settings/
labs/jbossrules/trunk/drools-doc/.settings/org.eclipse.jdt.core.prefs
labs/jbossrules/trunk/drools-doc/pom.xml
labs/jbossrules/trunk/drools-doc/src/
labs/jbossrules/trunk/drools-doc/src/main/
labs/jbossrules/trunk/drools-doc/src/main/java/
labs/jbossrules/trunk/drools-doc/src/main/java/org/
labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/
labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/
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
labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java
labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java
labs/jbossrules/trunk/drools-doc/src/main/resources/
labs/jbossrules/trunk/drools-doc/src/main/resources/org/
labs/jbossrules/trunk/drools-doc/src/main/resources/org/drools/
labs/jbossrules/trunk/drools-doc/src/test/
labs/jbossrules/trunk/drools-doc/src/test/java/
labs/jbossrules/trunk/drools-doc/src/test/java/org/
labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/
labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/
labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java
labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java
labs/jbossrules/trunk/drools-doc/src/test/resources/
labs/jbossrules/trunk/drools-doc/src/test/resources/org/
labs/jbossrules/trunk/drools-doc/src/test/resources/org/drools/
labs/jbossrules/trunk/drools-doc/src/test/resources/org/drools/doc/
labs/jbossrules/trunk/drools-doc/src/test/resources/org/drools/doc/simple.drl
labs/jbossrules/trunk/drools-doc/target/
labs/jbossrules/trunk/drools-doc/target/classes/
labs/jbossrules/trunk/drools-doc/target/drools-doc-sources.jar
labs/jbossrules/trunk/drools-doc/target/drools-doc-test-sources.jar
labs/jbossrules/trunk/drools-doc/target/drools-doc.jar
labs/jbossrules/trunk/drools-doc/target/maven-archiver/
labs/jbossrules/trunk/drools-doc/target/maven-archiver/pom.properties
labs/jbossrules/trunk/drools-doc/target/test-classes/
Log:
GUVNOR-96 : Documentation generation for all rules in a package
- DroolsDoc project
Added: labs/jbossrules/trunk/drools-doc/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-doc/.classpath (rev 0)
+++ labs/jbossrules/trunk/drools-doc/.classpath 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,18 @@
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/bouncycastle/bcmail-jdk14/138/bcmail-jdk14-138.jar"/>
+ <classpathentry kind="var" path="M2_REPO/bouncycastle/bcprov-jdk14/138/bcprov-jdk14-138.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/lowagie/itext/2.1.2/itext-2.1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+</classpath>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-doc/.project
===================================================================
--- labs/jbossrules/trunk/drools-doc/.project (rev 0)
+++ labs/jbossrules/trunk/drools-doc/.project 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,13 @@
+<projectDescription>
+ <name>drools-doc</name>
+ <comment>A rule production system</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-doc/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- labs/jbossrules/trunk/drools-doc/.settings/org.eclipse.jdt.core.prefs (rev 0)
+++ labs/jbossrules/trunk/drools-doc/.settings/org.eclipse.jdt.core.prefs 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,5 @@
+#Wed Aug 26 09:49:52 EEST 2009
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
Added: labs/jbossrules/trunk/drools-doc/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-doc/pom.xml (rev 0)
+++ labs/jbossrules/trunk/drools-doc/pom.xml 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>drools</artifactId>
+ <groupId>org.drools</groupId>
+ <version>5.1.0.SNAPSHOT</version>
+ </parent>
+
+ <artifactId>drools-doc</artifactId>
+ <packaging>jar</packaging>
+ <name>Drools :: DroolsDoc</name>
+
+ <build>
+ <finalName>drools-doc</finalName>
+ <!-- Need Java 5 source enabled -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.1</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>com.lowagie</groupId>
+ <artifactId>itext</artifactId>
+ <version>2.1.2</version>
+ </dependency>
+
+ </dependencies>
+</project>
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 2009-09-16 06:56:47 UTC (rev 29362)
@@ -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 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,127 @@
+package org.drools.doc;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+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 = ruleName.substring( ruleName.indexOf( "rule" ) + "rule".length() ).trim();
+
+ 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;
+ }
+
+ 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;
+ }
+}
+
+class Comment {
+ String description;
+ List<String> metadata;
+}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,95 @@
+package org.drools.doc;
+
+import java.io.OutputStream;
+import java.text.Format;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.HeaderFooter;
+import com.lowagie.text.Phrase;
+import com.lowagie.text.pdf.PdfWriter;
+
+/**
+ *
+ * @author Toni Rikkola
+ *
+ */
+public class DroolsDocsBuilder {
+
+ protected final String currentDate = getFormatter().format( new Date() );
+
+ protected static Format getFormatter() {
+ return new SimpleDateFormat( getDateFormatMask() );
+ }
+
+ private final DrlPackageData packageData;
+
+ protected DroolsDocsBuilder(String packageDrl) {
+ this.packageData = DrlPackageData.findPackageDataFromDrl( packageDrl );
+ }
+
+ protected DroolsDocsBuilder(DrlPackageData packageData) {
+ this.packageData = packageData;
+ }
+
+ public static DroolsDocsBuilder getInstance(String packageDrl) {
+ return new DroolsDocsBuilder( packageDrl );
+ }
+
+ public static DroolsDocsBuilder getInstance(DrlPackageData packageData) {
+ return new DroolsDocsBuilder( packageData );
+ }
+
+ public void writePDF(OutputStream out) {
+
+ // TODO: Use i18n!
+
+ Document document = new Document();
+
+ try {
+ PdfWriter.getInstance( document,
+ out );
+
+ HeaderFooter footer = DroolsDocsComponentFactory.createFooter( packageData.packageName );
+
+ document.setFooter( footer );
+
+ document.addTitle( packageData.packageName.toUpperCase() );
+ document.open();
+
+ // First page, documentation info.
+ DroolsDocsComponentFactory.createFirstPage( document,
+ currentDate,
+ packageData );
+
+ document.newPage();
+
+ // List index of the rules
+ document.add( new Phrase( "Contents" ) );
+ document.add( DroolsDocsComponentFactory.createContents( packageData.rules ) );
+
+ document.newPage();
+
+ for ( DrlRuleData ruleData : packageData.rules ) {
+ DroolsDocsComponentFactory.createRulePage( document,
+ packageData.packageName,
+ ruleData );
+ }
+
+ } catch ( DocumentException de ) {
+ System.err.println( de.getMessage() );
+ }
+
+ document.close();
+ }
+
+ public static String getDateFormatMask() {
+ String fmt = System.getProperty( "drools.dateformat" );
+ if ( fmt == null ) {
+ fmt = "dd-MMM-yyyy";
+ }
+ return fmt;
+ }
+}
Added: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,289 @@
+package org.drools.doc;
+
+import java.awt.Color;
+import java.util.Collection;
+import java.util.Map;
+
+import com.lowagie.text.BadElementException;
+import com.lowagie.text.Cell;
+import com.lowagie.text.Chunk;
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.Element;
+import com.lowagie.text.ExceptionConverter;
+import com.lowagie.text.Font;
+import com.lowagie.text.FontFactory;
+import com.lowagie.text.HeaderFooter;
+import com.lowagie.text.Image;
+import com.lowagie.text.List;
+import com.lowagie.text.ListItem;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.Phrase;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.Table;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
+
+public class DroolsDocsComponentFactory {
+
+ private static final int INTENTATION_LEFT = 20;
+
+ private static final String INDENT = " ";
+
+ private static final Font CHAPTER_TITLE = FontFactory.getFont( FontFactory.TIMES,
+ 20,
+ Font.BOLD );
+ private static final Font PACKAGE_NAME = FontFactory.getFont( FontFactory.TIMES,
+ 10,
+ Font.BOLD );
+ private static final Font RULE_PACKAGE_TITLE = FontFactory.getFont( FontFactory.TIMES,
+ 24,
+ Font.BOLD );
+ private static final Font CATEGORIES_TEXT = FontFactory.getFont( FontFactory.TIMES,
+ 12 );
+ private static final Font BODY_TEXT = FontFactory.getFont( FontFactory.TIMES,
+ 10 );
+ static final Font HEADER_FOOTER_TEXT = FontFactory.getFont( FontFactory.TIMES,
+ 8 );
+
+ public static Table createDescription(String description) throws DocumentException {
+ Table table = createEmptyTable();
+
+ Cell headerCell = newEmptyHeaderCell( "Description" );
+ table.addCell( headerCell );
+
+ table.addCell( newEmptyCell( INDENT + description ) );
+
+ return table;
+ }
+
+ private static Table createEmptyTable() throws BadElementException {
+ Table table = new Table( 1 );
+ table.setBorderWidthTop( 1 );
+ table.setBorderWidthLeft( 1 );
+ table.setBorderWidthRight( 1 );
+ table.setBorderWidthBottom( 0 );
+ table.setPadding( 3 );
+ table.setAlignment( Table.ALIGN_LEFT );
+ return table;
+ }
+
+ public static void createOtherItems(Document document,
+ Map<String, java.util.List<String>> other) throws DocumentException {
+
+ for ( String key : other.keySet() ) {
+ document.add( createTable( key,
+ other.get( key ) ) );
+ }
+ }
+
+ public static Table createRuleTable(DrlRuleData drl) throws BadElementException,
+ DocumentException {
+ Table table = createEmptyTable();
+
+ Cell headerCell = newEmptyWhenThenCell( "Attributes" );
+ table.addCell( headerCell );
+
+ for ( String s : drl.header ) {
+ table.addCell( newEmptyCell( INDENT + s.trim() ) );
+ }
+
+ table.addCell( newEmptyWhenThenCell( INDENT + "WHEN" ) );
+ for ( String s : drl.lhs ) {
+ table.addCell( newEmptyCell( INDENT + INDENT + s.trim() ) );
+ }
+
+ table.addCell( newEmptyWhenThenCell( INDENT + "THEN" ) );
+ for ( String s : drl.rhs ) {
+ table.addCell( newEmptyCell( INDENT + INDENT + s.trim() ) );
+ }
+ // table.addCell( newEmptyWhenThenCell( "END" ) );
+
+ return table;
+ }
+
+ public static Table createTable(final String topic,
+ Collection<String> items) throws BadElementException,
+ DocumentException {
+ Table metadata = createEmptyTable();
+
+ Cell headerCell = newEmptyHeaderCell( topic );
+ metadata.addCell( headerCell );
+
+ for ( String s : items ) {
+ metadata.addCell( newEmptyCell( s ) );
+ }
+
+ return metadata;
+ }
+
+ public static Table createMetaDataTable(Collection<String> metadatas) throws BadElementException,
+ DocumentException {
+ Table metadata = createEmptyTable();
+
+ Cell headerCell = newEmptyHeaderCell( "META DATA" );
+ metadata.addCell( headerCell );
+
+ for ( String s : metadatas ) {
+ metadata.addCell( newEmptyCell( INDENT + s ) );
+ }
+
+ return metadata;
+ }
+
+ public static List createContents(java.util.List<DrlRuleData> rules) {
+ List index = new List( true );
+
+ for ( DrlRuleData drlRuleData : rules ) {
+ Chunk chunk = new Chunk( drlRuleData.ruleName );
+ // chunk.setLocalGoto( item.getName() );
+ ListItem listItem = new ListItem( chunk );
+ index.add( listItem );
+ }
+ return index;
+ }
+
+ private static Cell newEmptyWhenThenCell(String text) throws BadElementException {
+ Cell c = new Cell( new Phrase( text,
+ BODY_TEXT ) );
+ c.setBackgroundColor( Color.decode( "#CCCCFF" ) );
+ c.setLeading( 10 );
+ c.setBorder( 1 );
+ return c;
+ }
+
+ private static Cell newEmptyHeaderCell(String text) throws BadElementException {
+ Cell c = new Cell( new Phrase( text,
+ CATEGORIES_TEXT ) );
+ c.setBackgroundColor( Color.decode( "#CCCCFF" ) );
+ c.setLeading( 10 );
+ c.setBorder( 0 );
+ c.setBorderWidthBottom( 1 );
+ return c;
+ }
+
+ private static Cell newEmptyCell(String text) throws BadElementException {
+ Cell c = new Cell( new Phrase( text,
+ BODY_TEXT ) );
+ c.setLeading( 10 );
+ c.setBorder( 0 );
+ c.setBorderWidthBottom( 1 );
+ return c;
+ }
+
+ public static HeaderFooter createFooter(String packageName) {
+ HeaderFooter footer = new HeaderFooter( new Phrase( packageName + "-",
+ HEADER_FOOTER_TEXT ),
+ true );
+ footer.setBorder( 1 );
+ footer.setAlignment( Element.ALIGN_RIGHT );
+
+ return footer;
+ }
+
+ public static void createRulePage(Document document,
+ String packageName,
+ DrlRuleData drlData) throws DocumentException {
+
+ document.add( new Paragraph( packageName,
+ PACKAGE_NAME ) );
+ document.add( new Paragraph( "Rule " + drlData.ruleName,
+ CHAPTER_TITLE ) );
+
+ // Extends
+ int index = drlData.ruleName.lastIndexOf( "extends" );
+ if ( index > 0 ) {
+ document.add( new Paragraph( "Extends:",
+ BODY_TEXT ) );
+
+ Paragraph ext = new Paragraph( drlData.ruleName.substring( "extends".length() + index ),
+ BODY_TEXT );
+ ext.setIndentationLeft( INTENTATION_LEFT );
+ document.add( ext );
+ }
+
+ // Description
+ document.add( createDescription( drlData.description ) );
+
+ // DRL
+ document.add( createRuleTable( drlData ) );
+
+ // Meta data
+ document.add( createMetaDataTable( drlData.metadata ) );
+
+ // Other
+ createOtherItems( document,
+ drlData.otherInformation );
+
+ document.newPage();
+ }
+
+ public static void createFirstPage(Document document,
+ String currentDate,
+ DrlPackageData packageData) throws DocumentException {
+ Paragraph title = new Paragraph( "\n\n\n\n\n" + packageData.packageName.toUpperCase(),
+ RULE_PACKAGE_TITLE );
+ title.setAlignment( Element.ALIGN_CENTER );
+ document.add( title );
+
+ Paragraph date = new Paragraph( "Documentation created: " + currentDate,
+ BODY_TEXT );
+ date.setAlignment( Element.ALIGN_CENTER );
+ document.add( date );
+
+ document.add( new Paragraph( "\n\n\n\n\nDescription: " + packageData.description,
+ BODY_TEXT ) );
+ document.add( createTable( "Metadata: ",
+ packageData.metadata ) );
+ document.add( createTable( "Globals: ",
+ packageData.globals ) );
+ createOtherItems( document,
+ packageData.otherInformation );
+ }
+}
+
+class EndPage extends PdfPageEventHelper {
+ private final String currentDate;
+
+ public EndPage(String currentDate) {
+ this.currentDate = currentDate;
+ }
+
+ public void onEndPage(PdfWriter writer,
+ Document document) {
+
+ try {
+ Image image = Image.getInstance( DroolsDocsBuilder.class.getResource( "drools-guvnor.png" ) );
+ image.setAlignment( Image.RIGHT );
+ image.scaleAbsolute( 100,
+ 30 );
+ Rectangle page = document.getPageSize();
+ PdfPTable head = new PdfPTable( 2 );
+
+ PdfPCell cell1 = new PdfPCell( image );
+ cell1.setHorizontalAlignment( Element.ALIGN_LEFT );
+ cell1.setBorder( 0 );
+
+ head.addCell( cell1 );
+
+ PdfPCell cell2 = new PdfPCell( new Phrase( currentDate,
+ DroolsDocsComponentFactory.HEADER_FOOTER_TEXT ) );
+ cell2.setHorizontalAlignment( Element.ALIGN_RIGHT );
+ cell2.setBorder( 0 );
+
+ head.addCell( cell2 );
+
+ head.setTotalWidth( page.getWidth() - document.leftMargin() - document.rightMargin() );
+ head.writeSelectedRows( 0,
+ -1,
+ document.leftMargin(),
+ page.getHeight() - document.topMargin() + head.getTotalHeight(),
+ writer.getDirectContent() );
+
+ } catch ( Exception e ) {
+ throw new ExceptionConverter( e );
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,84 @@
+package org.drools.doc;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class DrlPackageDataTest extends TestCase {
+ public void testHandleDrl() {
+
+ String rule1 = "";
+ rule1 += "package org.drools.test\n";
+ rule1 += "global java.util.List list\n";
+ rule1 += "rule rule1\n";
+ rule1 += "when\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName() );\n";
+ rule1 += "end\n";
+ rule1 += "rule rule2\n";
+ rule1 += "when\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName() );\n";
+ rule1 += "end\n";
+
+ DrlPackageData s = DrlPackageData.findPackageDataFromDrl( rule1 );
+
+ assertEquals( "org.drools.test",
+ s.packageName );
+ assertEquals( 2,
+ s.rules.size() );
+ assertEquals( "",
+ s.description );
+
+ }
+
+ public void testHandleDrlWithComments() {
+
+ String rule1 = "";
+ rule1 += "# important information\n";
+ rule1 += "# about this package\n";
+ rule1 += "# it contains some rules\n";
+ rule1 += "package org.drools.test\n";
+ rule1 += "global java.util.List list\n";
+ rule1 += "rule rule1\n";
+ rule1 += "when\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName() );\n";
+ rule1 += "end\n";
+ rule1 += "rule rule2\n";
+ rule1 += "when\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName() );\n";
+ rule1 += "end\n";
+
+ DrlPackageData data = DrlPackageData.findPackageDataFromDrl( rule1 );
+
+ assertEquals( "org.drools.test",
+ data.packageName );
+ assertEquals( 2,
+ data.rules.size() );
+ assertEquals( "rule1",
+ data.rules.get( 0 ).ruleName );
+ assertEquals( "rule2",
+ data.rules.get( 1 ).ruleName );
+ assertEquals( 1,
+ data.globals.size() );
+ assertEquals( "java.util.List list",
+ data.globals.get( 0 ) );
+ assertEquals( "important information\n about this package\n it contains some rules",
+ data.description );
+ }
+
+ public void testfindGlobals() {
+
+ String header = "global LoanApplication gg";
+
+ List<String> globals = DrlPackageData.findGlobals( header );
+
+ assertEquals( 1,
+ globals.size() );
+ assertEquals( "LoanApplication gg",
+ globals.get( 0 ) );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,155 @@
+package org.drools.doc;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class DrlRuleDataTest extends TestCase {
+ public void testHandleDrl() {
+ String drl =
+ "rule \"Something\" \n " +
+ "dialect \"Java\" \n " +
+ "when \n " +
+ "Person() \n " +
+ "Cheesery() \n " +
+ "then \n " +
+ "insert( new Person()) \n " +
+ "insert( new Car()) \n " +
+ "insert( new Cheese()) \n " +
+ "end ";
+
+ DrlRuleData s = DrlRuleData.findRulesDataFromDrl( drl ).get( 0 );
+
+ assertEquals( 1,
+ s.header.size() );
+ assertEquals( 2,
+ s.lhs.size() );
+ assertEquals( 3,
+ s.rhs.size() );
+ assertEquals( "",
+ s.description );
+
+ }
+
+ public void testHandleDrlNoLineBreaks() {
+ String drl =
+ "rule \"CreditScoreApproval\" \n" +
+ "dialect \"mvel\" \n" +
+ "when then" +
+ "applicant.setApproved(true) \n" +
+ "applicant.setName( \"Toni\" ) \n" +
+ "applicant.setAge( 10 ) \n" +
+ "end";
+ DrlRuleData s = DrlRuleData.findRulesDataFromDrl( drl ).get( 0 );
+
+ assertNotNull( s );
+
+ assertEquals( 1,
+ s.header.size() );
+ assertEquals( 0,
+ s.lhs.size() );
+ assertEquals( 3,
+ s.rhs.size() );
+ assertEquals( "",
+ s.description );
+
+ }
+
+ public void testHandleDrlWithComment() {
+ String drl =
+ "# Really important information about this rule \n" +
+ "# Another line because one was not enough \n" +
+ "# \n" +
+ "# @author: trikkola \n" +
+ "rule \"First\" \n" +
+ "dialect \"mvel\" \n" +
+ "when \n " +
+ "Person() \n " +
+ "Cheesery() \n " +
+ "then \n " +
+ "applicant.setApproved(true) \n" +
+ "applicant.setName( \"Toni\" ) \n" +
+ "applicant.setAge( 10 ) \n" +
+ "end \n" +
+ "\n" +
+ "# Really important information about this rule \n" +
+ "# Another line because one was not enough \n" +
+ "# \n" +
+ "# @author: trikkola \n" +
+ "# @created: 29.12.2001 \n" +
+ "# @edited: 5.5.2005 \n" +
+ "rule \"Second\" \n" +
+ "dialect \"mvel\" \n" +
+ "when \n " +
+ "Person() \n " +
+ "Cheesery() \n " +
+ "then \n " +
+ "applicant.setApproved(true) \n" +
+ "applicant.setName( \"Toni\" ) \n" +
+ "applicant.setAge( 10 ) \n" +
+ "end" +
+ "\n" +
+ "rule \"Third\" \n" +
+ "dialect \"mvel\" \n" +
+ "when \n " +
+ "Person() \n " +
+ "Cheesery() \n " +
+ "then \n " +
+ "applicant.setApproved(true) \n" +
+ "applicant.setName( \"Toni\" ) \n" +
+ "applicant.setAge( 10 ) \n" +
+ "end";
+
+
+ List<DrlRuleData> list = DrlRuleData.findRulesDataFromDrl( drl );
+
+ assertEquals( 3,
+ list.size() );
+
+ DrlRuleData rd = list.get( 0 );
+
+ assertNotNull( rd );
+
+ assertEquals( 1,
+ rd.header.size() );
+ assertEquals( 2,
+ rd.lhs.size() );
+ assertEquals( 3,
+ rd.rhs.size() );
+ assertEquals( 1,
+ rd.metadata.size() );
+ assertNotNull( rd.description );
+ assertNotSame( "",
+ rd.description );
+
+ DrlRuleData rd2 = list.get( 1 );
+
+ assertNotNull( rd2 );
+
+ assertEquals( 1,
+ rd2.header.size() );
+ assertEquals( 2,
+ rd2.lhs.size() );
+ assertEquals( 3,
+ rd2.rhs.size() );
+ assertEquals( 3,
+ rd2.metadata.size() );
+ assertNotNull( rd2.description );
+ assertNotSame( "",
+ rd2.description );
+
+ DrlRuleData rd3 = list.get( 2 );
+
+ assertNotNull( rd3 );
+
+ assertEquals( 1,
+ rd3.header.size() );
+ assertEquals( 2,
+ rd3.lhs.size() );
+ assertEquals( 3,
+ rd3.rhs.size() );
+ assertNotNull( rd3.description );
+ assertEquals( "",
+ rd3.description );
+ }
+}
Added: labs/jbossrules/trunk/drools-doc/src/test/resources/org/drools/doc/simple.drl
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/test/resources/org/drools/doc/simple.drl (rev 0)
+++ labs/jbossrules/trunk/drools-doc/src/test/resources/org/drools/doc/simple.drl 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,29 @@
+#created on: 12-Sep-2009
+package org.drools.doc
+
+#list any import classes here.
+
+
+
+#declare any global variables here
+
+
+
+
+rule "Your First Rule"
+
+ when
+ #conditions
+ then
+ #actions
+
+end
+
+rule "Your Second Rule"
+ #include attributes such as "salience" here...
+ when
+ #conditions
+ then
+ #actions
+
+end
Added: labs/jbossrules/trunk/drools-doc/target/drools-doc-sources.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-doc/target/drools-doc-sources.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-doc/target/drools-doc-test-sources.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-doc/target/drools-doc-test-sources.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-doc/target/drools-doc.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-doc/target/drools-doc.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-doc/target/maven-archiver/pom.properties
===================================================================
--- labs/jbossrules/trunk/drools-doc/target/maven-archiver/pom.properties (rev 0)
+++ labs/jbossrules/trunk/drools-doc/target/maven-archiver/pom.properties 2009-09-16 06:56:47 UTC (rev 29362)
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Sep 14 13:05:52 EEST 2009
+version=5.1.0.SNAPSHOT
+groupId=org.drools
+artifactId=drools-doc
More information about the jboss-svn-commits
mailing list