[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