[jboss-svn-commits] JBL Code SVN: r11185 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server/contenthandler and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Apr 21 09:02:00 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-04-21 09:02:00 -0400 (Sat, 21 Apr 2007)
New Revision: 11185

Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DRLFileContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/IRuleAsset.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java
Log:
JBRULES-773 BRMS assembler

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java	2007-04-21 12:47:23 UTC (rev 11184)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java	2007-04-21 13:02:00 UTC (rev 11185)
@@ -12,6 +12,7 @@
 import org.drools.brms.server.contenthandler.IRuleAsset;
 import org.drools.compiler.DroolsError;
 import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.repository.AssetItem;
 import org.drools.repository.AssetItemIterator;
@@ -39,15 +40,25 @@
 
     BRMSPackageBuilder builder;
     
-    public ContentPackageAssembler(PackageItem assetPackage) {
+    /**
+     * @param assetPackage The package.
+     * @param compile true if we want to build it. False and its just for looking at source.
+     */
+    public ContentPackageAssembler(PackageItem assetPackage, boolean compile) {
         this.pkg = assetPackage;
         
-        if (preparePackage()) {
+        if (compile && preparePackage()) {
             buildPackage();
+        } else {
+            builder = new BRMSPackageBuilder(new PackageBuilderConfiguration());
         }
         
     }
     
+    public ContentPackageAssembler(PackageItem assetPackage) {
+        this(assetPackage, true);
+    }
+    
     /**
      * This will build the package. 
      */
@@ -180,5 +191,43 @@
             errors.add(err);
         }
     }
+
+
+    public String getDRL() {
+        StringBuffer src = new StringBuffer();
+        src.append( "package " + this.pkg.getName() + "\n");
+        src.append( this.pkg.getHeader() + "\n");
+        
+        
+        //now we load up the DSL files
+        builder.setDSLFiles( BRMSPackageBuilder.getDSLMappingFiles( pkg, new BRMSPackageBuilder.DSLErrorEvent() {
+            public void recordError(AssetItem asset, String message) {
+                errors.add( new ContentAssemblyError(asset, message) );
+            }
+        }));
+        
+        
+        //do the functions.
+        AssetItemIterator it = this.pkg.listAssetsByFormat( new String[] {AssetFormats.FUNCTION} );
+        while(it.hasNext()) {
+            AssetItem func = (AssetItem) it.next();
+            src.append( func.getContent() + "\n" );
+        }        
+        
+        //now the rules
+        Iterator iter = pkg.getAssets();
+        while (iter.hasNext()) {
+            AssetItem asset = (AssetItem) iter.next();
+            ContentHandler h = ContentHandler.getHandler( asset.getFormat() );
+            if (h instanceof IRuleAsset) {
+                IRuleAsset ruleAsset = (IRuleAsset) h;
+                ruleAsset.assembleDRL( builder, asset, src );
+            }
+            src.append( "\n\n" );
+        }       
+        
+        
+        return src.toString();
+    }
     
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java	2007-04-21 12:47:23 UTC (rev 11184)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java	2007-04-21 13:02:00 UTC (rev 11185)
@@ -38,6 +38,13 @@
         throw new UnsupportedOperationException();
         
     }
+
+    public void assembleDRL(BRMSPackageBuilder builder, AssetItem asset, StringBuffer buf) {
+        throw new UnsupportedOperationException();
+    }
+
     
 
+    
+
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DRLFileContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DRLFileContentHandler.java	2007-04-21 12:47:23 UTC (rev 11184)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DRLFileContentHandler.java	2007-04-21 13:02:00 UTC (rev 11185)
@@ -12,15 +12,21 @@
 public class DRLFileContentHandler extends PlainTextContentHandler implements IRuleAsset {
 
     public void compile(BRMSPackageBuilder builder, AssetItem asset, ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException, IOException {
+        builder.addPackageFromDrl( new StringReader(getContent( asset )) );
+    }
+
+    private String getContent(AssetItem asset) {
         String content = asset.getContent();
         if (isStandAloneRule( content )) {
-            content = "rule '" + asset.getName() + "'\n"  + content + "\nend\n";
-        } 
-        builder.addPackageFromDrl( new StringReader(content) );
-        
-        
+            content = wrapRuleDeclaration( asset, content );
+        }
+        return content;
     }
 
+    private String wrapRuleDeclaration(AssetItem asset, String content) {
+        return "rule '" + asset.getName() + "'\n"  + content + "\nend";
+    }
+
     /**
      * This will try and sniff ouf if its a stand alone rule which
      * will use the asset name as the rule name, or if it should be treated as a package
@@ -39,6 +45,20 @@
         }
         return true;
         
-    }    
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder, AssetItem asset, StringBuffer buf) {
+        String content = asset.getContent();
+        boolean standAlone = isStandAloneRule( content );
+        if (standAlone) {
+            buf.append( wrapRuleDeclaration( asset, content ) );
+        } else {
+            buf.append( content );
+        }
+        
+        
+    }
+
+
     
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java	2007-04-21 12:47:23 UTC (rev 11184)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java	2007-04-21 13:02:00 UTC (rev 11185)
@@ -4,7 +4,6 @@
 import java.io.StringReader;
 import java.util.Iterator;
 import java.util.List;
-import java.util.StringTokenizer;
 
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleContentText;
@@ -44,20 +43,12 @@
 
     public void compile(BRMSPackageBuilder builder, AssetItem asset, ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
                                                                     IOException {
-        List<DSLMappingFile> dsls = builder.getDSLMappingFiles();
-        if (dsls == null || dsls.size() == 0) {
-            logger.logError( new ContentAssemblyError(asset, "This rule asset requires a DSL, yet none were configured in the package.") );
-        }
+        DefaultExpander expander = getExpander( builder, asset, logger );
         
-        DefaultExpander expander = new DefaultExpander();
-        for ( DSLMappingFile file : dsls ) {
-            expander.addDSLMapping( file.getMapping() );
-        }
-        
         //add the rule keyword if its 'stand alone'
         String source = asset.getContent();
         if (DRLFileContentHandler.isStandAloneRule(source)) {
-            source = "rule '" + asset.getName() + "' \n" + source + "\nend\n";
+            source = wrapRule( asset, source );
         }
         
         //expand and check for errors
@@ -75,7 +66,39 @@
         builder.addPackageFromDrl( new StringReader(drl) );
     }
 
+    private DefaultExpander getExpander(BRMSPackageBuilder builder, AssetItem asset, ContentPackageAssembler.ErrorLogger logger) {
+        List<DSLMappingFile> dsls = builder.getDSLMappingFiles();
+        if (dsls == null || dsls.size() == 0) {
+            logger.logError( new ContentAssemblyError(asset, "This rule asset requires a DSL, yet none were configured in the package.") );
+        }
+        
+        DefaultExpander expander = new DefaultExpander();
+        for ( DSLMappingFile file : dsls ) {
+            expander.addDSLMapping( file.getMapping() );
+        }
+        return expander;
+    }
 
+    public void assembleDRL(BRMSPackageBuilder builder, AssetItem asset, StringBuffer buf) {
+        //add the rule keyword if its 'stand alone'
+        String source = asset.getContent();
+        if (DRLFileContentHandler.isStandAloneRule(source)) {
+            source = wrapRule( asset, source );
+        }
+        
+        DefaultExpander expander = new DefaultExpander();
+        for ( DSLMappingFile file : builder.getDSLMappingFiles()) {
+            expander.addDSLMapping( file.getMapping() );
+        }        
+        buf.append( expander.expand( source ) );
+        
+    }
+
+    private String wrapRule(AssetItem asset, String source) {
+        return "rule '" + asset.getName() + "' \n" + source + "\nend";
+    }
+
+
     
 
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/IRuleAsset.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/IRuleAsset.java	2007-04-21 12:47:23 UTC (rev 11184)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/IRuleAsset.java	2007-04-21 13:02:00 UTC (rev 11185)
@@ -22,4 +22,9 @@
     public void compile(BRMSPackageBuilder builder, AssetItem asset, ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
                                                                     IOException;
 
+    /**
+     * This will be called when a rule asset is to render itself to DRL source.
+     */
+    public void assembleDRL(BRMSPackageBuilder builder, AssetItem asset, StringBuffer buf);
+    
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java	2007-04-21 12:47:23 UTC (rev 11184)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java	2007-04-21 13:02:00 UTC (rev 11185)
@@ -254,6 +254,60 @@
         
     }
     
+    public void testShowSource() throws Exception {
+        RulesRepository repo = getRepo();
+        
+        //first, setup the package correctly:
+        PackageItem pkg = repo.createPackage( "testShowSource", "" );
+
+        pkg.updateHeader( "import com.billasurf.Board\n global com.billasurf.Person customer" );
+        repo.save();
+        
+        AssetItem func = pkg.addAsset( "func", "" );
+        func.updateFormat( AssetFormats.FUNCTION );
+        func.updateContent( "function void foo() { System.out.println(42); }" );
+        func.checkin( "" );
+        
+        AssetItem dsl = pkg.addAsset( "myDSL", "" );
+        dsl.updateFormat( AssetFormats.DSL );
+        dsl.updateContent( "[then]call a func=foo();\n[when]foo=FooBarBaz()" );
+        dsl.checkin( "" );
+        
+        AssetItem rule = pkg.addAsset( "rule1", "" );
+        rule.updateFormat( AssetFormats.DRL );
+        rule.updateContent( "rule 'foo' when Goo() then end" ); 
+        rule.checkin( "" );
+        
+        AssetItem rule2 = pkg.addAsset( "rule2", "" );
+        rule2.updateFormat( AssetFormats.DSL_TEMPLATE_RULE );
+        rule2.updateContent( "when \n foo \n then \n call a func" );
+        rule2.checkin( "" );
+        
+        ContentPackageAssembler asm = new ContentPackageAssembler(pkg, false);
+        String drl = asm.getDRL();
+        
+        assertNotNull(drl);
+              
+        assertContains("import com.billasurf.Board\n global com.billasurf.Person customer", drl);
+        assertContains("package testShowSource", drl);
+        assertContains("function void foo() { System.out.println(42); }", drl);
+        assertContains("foo();", drl);
+        assertContains("FooBarBaz()", drl);
+        assertContains("rule 'foo' when Goo() then end", drl);
+        
+        
+    }
+    
+    
+    private void assertContains(String sub, String text) {
+        if (text.indexOf( sub ) == -1) {
+            fail("the text: '" + sub +"' was not found.");
+        }
+        
+        
+    }
+
+
     private void assertNotEmpty(String s) {
         if (s == null) fail("should not be null");
         if (s.trim().equals( "" )) fail("should not be empty string");




More information about the jboss-svn-commits mailing list