[jboss-svn-commits] JBL Code SVN: r11085 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/ruleeditor and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 18 08:35:15 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-04-18 08:35:14 -0400 (Wed, 18 Apr 2007)
New Revision: 11085
Added:
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/DRLFileContentHandlerTest.java
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java
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/ContentHandler.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/client/common/AssetFormats.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java 2007-04-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -29,16 +29,14 @@
/** Use the rule modeller */
public static String BUSINESS_RULE = "brxml";
+
- /** use vanilla text */
- public static String TECHNICAL_RULE = "rule";
-
/** use a DSL, not sure about this one - can use text or constrained editor */
- public static String DSL_TEMPLATE_RULE = "trule";
+ public static String DSL_TEMPLATE_RULE = "brule";
/**
* The following group the
*/
public static String[] BUSINESS_RULE_FORMATS = new String[] {AssetFormats.BUSINESS_RULE, AssetFormats.DSL_TEMPLATE_RULE};
- public static String[] TECHNICAL_RULE_FORMATS = new String[] {AssetFormats.DRL, AssetFormats.TECHNICAL_RULE};
+ public static String[] TECHNICAL_RULE_FORMATS = new String[] {AssetFormats.DRL};
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java 2007-04-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -129,8 +129,7 @@
ListBox box = new ListBox();
box.addItem( "Business rule", AssetFormats.BUSINESS_RULE );
- box.addItem( "DRL file", AssetFormats.DRL );
- box.addItem( "Technical rule", AssetFormats.TECHNICAL_RULE );
+ box.addItem( "DRL rule (technical rule)", AssetFormats.DRL );
box.addItem( "Business rule using a DSL template", AssetFormats.DSL_TEMPLATE_RULE );
box.setSelectedIndex( 0 );
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java 2007-04-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -29,6 +29,8 @@
*/
public class BRMSPackageBuilder extends PackageBuilder {
+ private List<DSLMappingFile> dslFiles;
+
/**
* This will give you a fresh new PackageBuilder
* using the given classpath.
@@ -79,6 +81,14 @@
super.resetErrors();
}
+ public void setDSLFiles(List<DSLMappingFile> files) {
+ this.dslFiles = files;
+ }
+
+ public List<DSLMappingFile> getDSLMappingFiles() {
+ return this.dslFiles;
+ }
+
/**
* Load up all the DSL mappping files for the given package.
*/
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-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -2,16 +2,17 @@
import java.io.IOException;
import java.io.StringReader;
-import java.security.KeyStore.Builder;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import java.util.jar.JarInputStream;
import org.drools.brms.client.common.AssetFormats;
+import org.drools.brms.server.contenthandler.ContentHandler;
+import org.drools.brms.server.contenthandler.IRuleAsset;
import org.drools.compiler.DroolsError;
import org.drools.compiler.DroolsParserException;
import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.dsl.DSLMappingFile;
import org.drools.repository.AssetItem;
import org.drools.repository.AssetItemIterator;
import org.drools.repository.PackageItem;
@@ -30,8 +31,7 @@
private PackageItem pkg;
private List<ContentAssemblyError> errors = new ArrayList<ContentAssemblyError>();
- private BRMSPackageBuilder builder;
- List<DSLMappingFile> dslFiles;
+ BRMSPackageBuilder builder;
public ContentPackageAssembler(PackageItem assetPackage) {
this.pkg = assetPackage;
@@ -46,7 +46,24 @@
* This will build the package.
*/
private void buildPackage() {
-
+ Iterator it = pkg.getAssets();
+ while (it.hasNext()) {
+ AssetItem asset = (AssetItem) it.next();
+ ContentHandler h = ContentHandler.getHandler( asset.getFormat() );
+ if (h instanceof IRuleAsset) {
+ try {
+ ((IRuleAsset) h).compile( builder, asset );
+ if (builder.hasErrors()) {
+ this.recordBuilderErrors( asset );
+ builder.clearErrors();
+ }
+ } catch ( DroolsParserException e ) {
+ throw new RulesRepositoryException(e);
+ } catch ( IOException e ) {
+ throw new RulesRepositoryException(e);
+ }
+ }
+ }
}
/**
@@ -65,11 +82,11 @@
}
- this.dslFiles = BRMSPackageBuilder.getDSLMappingFiles( pkg, new BRMSPackageBuilder.ErrorEvent() {
+ builder.setDSLFiles( BRMSPackageBuilder.getDSLMappingFiles( pkg, new BRMSPackageBuilder.ErrorEvent() {
public void logError(String message) {
errors.add( new ContentAssemblyError(pkg, message) );
}
- });
+ }));
AssetItemIterator it = this.pkg.listAssetsByFormat( new String[] {AssetFormats.FUNCTION} );
while(it.hasNext()) {
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-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -1,8 +1,12 @@
package org.drools.brms.server.contenthandler;
+import java.io.IOException;
+
import org.drools.brms.client.modeldriven.brxml.RuleModel;
import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.server.builder.BRMSPackageBuilder;
import org.drools.brms.server.util.BRLPersistence;
+import org.drools.compiler.DroolsParserException;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
@@ -27,6 +31,12 @@
RuleModel data = (RuleModel) asset.content;
repoAsset.updateContent( BRLPersistence.getInstance().toXML( data ) );
}
+
+ public void compile(BRMSPackageBuilder builder, AssetItem asset) throws DroolsParserException,
+ IOException {
+ throw new UnsupportedOperationException();
+
+ }
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java 2007-04-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -27,7 +27,6 @@
put(AssetFormats.DSL, new DSLDefinitionContentHandler());
put(AssetFormats.FUNCTION, new FunctionContentHandler());
put(AssetFormats.MODEL, new ModelContentHandler());
- put(AssetFormats.TECHNICAL_RULE, new DRLFileContentHandler());
}};
}
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-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DRLFileContentHandler.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -1,5 +1,44 @@
package org.drools.brms.server.contenthandler;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.StringTokenizer;
+
+import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.server.builder.BRMSPackageBuilder;
+import org.drools.compiler.DroolsParserException;
+import org.drools.repository.AssetItem;
+
public class DRLFileContentHandler extends PlainTextContentHandler implements IRuleAsset {
+ public void compile(BRMSPackageBuilder builder, AssetItem asset) throws DroolsParserException, IOException {
+ String content = asset.getContent();
+ if (isStandAloneRule( content )) {
+ content = "rule '" + asset.getName() + "'\n" + content + "\nend\n";
+ }
+ builder.addPackageFromDrl( new StringReader(content) );
+
+
+ }
+
+ /**
+ * 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
+ * (in the latter case, the content is passed as it to the compiler).
+ */
+ boolean isStandAloneRule(String content) {
+ StringTokenizer st = new StringTokenizer(content, " ");
+ while (st.hasMoreTokens()) {
+ String tok = st.nextToken();
+ if (tok.equals( "package" ) ||
+ tok.equals( "rule" ) ||
+ tok.equals( "end" ) ||
+ tok.equals( "function" )) {
+ return false;
+ }
+ }
+ return true;
+
+ }
+
}
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-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -1,7 +1,11 @@
package org.drools.brms.server.contenthandler;
+import java.io.IOException;
+
import org.drools.brms.client.rpc.RuleAsset;
import org.drools.brms.client.rpc.RuleContentText;
+import org.drools.brms.server.builder.BRMSPackageBuilder;
+import org.drools.compiler.DroolsParserException;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
@@ -28,6 +32,11 @@
repoAsset.updateContent( text.content );
}
+
+ public void compile(BRMSPackageBuilder builder, AssetItem asset) throws DroolsParserException,
+ IOException {
+ throw new UnsupportedOperationException();
+ }
}
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-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/IRuleAsset.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -1,5 +1,11 @@
package org.drools.brms.server.contenthandler;
+import java.io.IOException;
+
+import org.drools.brms.server.builder.BRMSPackageBuilder;
+import org.drools.compiler.DroolsParserException;
+import org.drools.repository.AssetItem;
+
/**
* This inferface indicates that an asset is a rule asset content type,
* ie not a model, dsl etc that supports package compilation.
@@ -8,4 +14,11 @@
*/
public interface IRuleAsset {
+ /**
+ * This will be called when the asset is required to compile itself,
+ * in the context of the given builder.
+ */
+ public void compile(BRMSPackageBuilder builder, AssetItem asset) throws DroolsParserException,
+ IOException;
+
}
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-18 11:25:22 UTC (rev 11084)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -1,24 +1,22 @@
package org.drools.brms.server.builder;
-import java.util.List;
+import java.io.InputStream;
+import junit.framework.TestCase;
+
import org.drools.brms.client.common.AssetFormats;
-import org.drools.brms.client.ruleeditor.CheckinPopup;
import org.drools.brms.server.util.TestEnvironmentSessionHelper;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
-import org.drools.repository.RepositorySessionUtil;
import org.drools.repository.RulesRepository;
import org.drools.rule.Package;
-import junit.framework.TestCase;
-
public class ContentPackageAssemblerTest extends TestCase {
- public void testPackageConfig() throws Exception {
+ public void testPackageConfigWithErrors() throws Exception {
//test the config, no rule assets yet
RulesRepository repo = getRepo();
PackageItem pkg = repo.createPackage( "testBuilderPackageConfig", "x" );
@@ -49,7 +47,7 @@
assertEquals(2, bin.getFunctions().size());
assertTrue(bin.isValid());
- assertEquals(1, assembler.dslFiles.size());
+ assertEquals(1, assembler.builder.getDSLMappingFiles().size());
pkg.updateHeader( "koo koo ca choo" );
@@ -63,34 +61,63 @@
assertTrue(assembler.getErrors().get(0).itemInError instanceof AssetItem);
assertEquals("func1", assembler.getErrors().get( 0 ).itemInError.getName());
+ try {
+ assembler.getBinaryPackage();
+ fail("should not work as is in error.");
+ } catch (IllegalStateException e) {
+ assertNotNull(e.getMessage());
+ }
-
-
}
private RulesRepository getRepo() throws Exception {
return new RulesRepository( TestEnvironmentSessionHelper.getSession() );
}
- public void FIXME_testSimplePackage() throws Exception {
- PackageItem pkg = null;
+ public void testSimplePackageBuildNoErrors() throws Exception {
+ RulesRepository repo = getRepo();
+
+ PackageItem pkg = repo.createPackage( "testSimplePackageBuildNoErrors", "" );
+ AssetItem model = pkg.addAsset( "model", "qed" );
+ model.updateFormat( AssetFormats.MODEL );
+
+ model.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
+ model.checkin( "" );
+
+ pkg.updateHeader( "import com.billasurf.Board\n global com.billasurf.Person customer" );
+
+ AssetItem rule1 = pkg.addAsset( "rule_1", "" );
+ rule1.updateFormat( AssetFormats.DRL );
+ rule1.updateContent( "rule 'rule1' \n when Board() \n then customer.setAge(42); \n end");
+ rule1.checkin( "" );
+
+ AssetItem rule2 = pkg.addAsset( "rule2", "" );
+ rule2.updateFormat( AssetFormats.DRL );
+ rule2.updateContent( "agenda-group 'q' \n when \n Board() \n then \n System.err.println(42);" );
+ rule2.checkin( "" );
+
+ AssetItem rule3 = pkg.addAsset( "A file", "" );
+ rule3.updateFormat( AssetFormats.DRL );
+ rule3.updateContent( "package foo\n rule 'rule3' \n when \n then \n customer.setAge(43); \n end \n" +
+ "rule 'rule4' \n when \n then \n System.err.println(44); \n end" );
+ rule3.checkin( "" );
+
+ repo.save();
+
+
ContentPackageAssembler asm = new ContentPackageAssembler(pkg);
assertFalse(asm.hasErrors());
assertNotNull(asm.getBinaryPackage());
- org.drools.rule.Package bin = asm.getBinaryPackage();
+ Package bin = asm.getBinaryPackage();
assertEquals(pkg.getName(), bin.getName());
assertTrue(bin.isValid());
- assertEquals(2, bin.getRules().length);
+ assertEquals(4, bin.getRules().length);
}
- public void testErrorsInConfig() {
-
- }
-
public void testErrorsInFunctionAndRuleAsset() {
}
Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/DRLFileContentHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/DRLFileContentHandlerTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/DRLFileContentHandlerTest.java 2007-04-18 12:35:14 UTC (rev 11085)
@@ -0,0 +1,30 @@
+package org.drools.brms.server.contenthandler;
+
+import junit.framework.TestCase;
+
+public class DRLFileContentHandlerTest extends TestCase {
+
+ public void testSniffDRLType() throws Exception {
+ //in this case we have package, and N rules
+ String classic = "package foobar \n rule boo \n when \n then\n end \n rule boo2 \n when \n then\n end";
+
+ //in this case we just have rules
+ String moreRuleClassic = "\nrule bar \n when \n then \n end\nrule x \n when \n then \n end ";
+
+ //in this case we just have a single rule
+ String newRule = "agenda-group 'x' \n when \n then \n";
+
+ String moreSingle = "rule foo when then end";
+
+ String moreNewRule = "agenda-group 'x' \n when end.bar \n then rule.end.bar";
+
+ DRLFileContentHandler h = new DRLFileContentHandler();
+
+ assertTrue(h.isStandAloneRule( newRule ));
+ assertFalse(h.isStandAloneRule( moreRuleClassic ));
+ assertFalse(h.isStandAloneRule( classic ));
+ assertFalse(h.isStandAloneRule( moreSingle ));
+ assertTrue(h.isStandAloneRule( moreNewRule ));
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/DRLFileContentHandlerTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list