[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