[jboss-svn-commits] JBL Code SVN: r11669 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/ruleeditor and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 4 06:07:01 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-05-04 06:07:01 -0400 (Fri, 04 May 2007)
New Revision: 11669

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleBuilderWidget.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-777

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2007-05-04 10:06:13 UTC (rev 11668)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2007-05-04 10:07:01 UTC (rev 11669)
@@ -231,4 +231,15 @@
      */
     public String buildPackageSource(String packageUUID) throws SerializableException;
     
+    
+    /**
+     * This will return the effective source for an asset (in DRL).
+     * Used as an aid for debugging.
+     */
+    public String buildAssetSource(RuleAsset asset) throws SerializableException;
+    
+    /**
+     * This will build the asset and return any build results (errors).
+     */
+    public BuilderResult[] buildAsset(RuleAsset asset) throws SerializableException;
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2007-05-04 10:06:13 UTC (rev 11668)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2007-05-04 10:07:01 UTC (rev 11669)
@@ -45,6 +45,8 @@
     public void loadSuggestionCompletionEngine(java.lang.String p0, AsyncCallback cb);
     public void buildPackage(java.lang.String p0, AsyncCallback cb);
     public void buildPackageSource(java.lang.String p0, AsyncCallback cb);
+    public void buildAssetSource(org.drools.brms.client.rpc.RuleAsset p0, AsyncCallback cb);
+    public void buildAsset(org.drools.brms.client.rpc.RuleAsset p0, AsyncCallback cb);
     public void changeState(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback cb);
-
+    
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleBuilderWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleBuilderWidget.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleBuilderWidget.java	2007-05-04 10:07:01 UTC (rev 11669)
@@ -0,0 +1,56 @@
+package org.drools.brms.client.ruleeditor;
+
+import org.drools.brms.client.rpc.RuleAsset;
+
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This widget wraps a rule asset widget, and provides actions to validate and view source.
+ * @author Michael Neale
+ */
+public class RuleBuilderWidget extends Composite {
+
+    
+    private RuleAsset asset;
+
+    public RuleBuilderWidget(Widget editor, RuleAsset asset) {
+        this.asset = asset;
+        
+        
+        FlexTable layout = new FlexTable();
+        layout.setStyleName( "asset-editor-Layout" );
+        layout.setWidget( 0, 0, editor );
+        layout.setWidget( 1, 0, validatorActions() );
+        layout.getCellFormatter().setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_MIDDLE );
+        
+        
+        
+        initWidget( editor );
+    }
+
+    private Widget validatorActions() {
+        HorizontalPanel horiz = new HorizontalPanel();
+        Button viewSource = new Button("View source");
+        horiz.add( viewSource );
+        
+        Button validate = new Button("Validate");
+        horiz.add( validate );
+        
+        viewSource.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                //doViewsource();
+            }
+        });
+        
+        horiz.setStyleName( "asset-validator-Buttons" );
+        return horiz;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleBuilderWidget.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-05-04 10:06:13 UTC (rev 11668)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-05-04 10:07:01 UTC (rev 11669)
@@ -30,12 +30,15 @@
 import org.drools.brms.client.rpc.TableDataResult;
 import org.drools.brms.client.rpc.TableDataRow;
 import org.drools.brms.client.rpc.ValidatedResponse;
+import org.drools.brms.server.builder.BRMSPackageBuilder;
 import org.drools.brms.server.builder.ContentAssemblyError;
 import org.drools.brms.server.builder.ContentPackageAssembler;
 import org.drools.brms.server.contenthandler.ContentHandler;
+import org.drools.brms.server.contenthandler.IRuleAsset;
 import org.drools.brms.server.util.BRMSSuggestionCompletionLoader;
 import org.drools.brms.server.util.MetaDataMapper;
 import org.drools.brms.server.util.TableDisplayHandler;
+import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.repository.AssetHistoryIterator;
 import org.drools.repository.AssetItem;
 import org.drools.repository.AssetItemIterator;
@@ -669,16 +672,7 @@
         PackageItem item = repository.loadPackageByUUID( packageUUID );
         ContentPackageAssembler asm = new ContentPackageAssembler(item);
         if (asm.hasErrors()) {
-            BuilderResult[] result = new BuilderResult[asm.getErrors().size()];
-            for ( int i = 0; i < result.length; i++ ) {
-                ContentAssemblyError err = asm.getErrors().get( i );
-                BuilderResult res = new BuilderResult();
-                res.assetName = err.itemInError.getName();
-                res.assetFormat = err.itemInError.getFormat();
-                res.message = err.errorReport;
-                res.uuid = err.itemInError.getUUID();
-                result[i] = res;
-            }
+            BuilderResult[] result = generateBuilderResults( asm );
             return result;
         } else {
             try {
@@ -701,10 +695,65 @@
         }
     }
 
+    private BuilderResult[] generateBuilderResults(ContentPackageAssembler asm) {
+        BuilderResult[] result = new BuilderResult[asm.getErrors().size()];
+        for ( int i = 0; i < result.length; i++ ) {
+            ContentAssemblyError err = asm.getErrors().get( i );
+            BuilderResult res = new BuilderResult();
+            res.assetName = err.itemInError.getName();
+            res.assetFormat = err.itemInError.getFormat();
+            res.message = err.errorReport;
+            res.uuid = err.itemInError.getUUID();
+            result[i] = res;
+        }
+        return result;
+    }
+
     @WebRemote
     public String buildPackageSource(String packageUUID) throws SerializableException {
         PackageItem item = repository.loadPackageByUUID( packageUUID );
         ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
         return asm.getDRL();
     }
+
+    @WebRemote
+    public String buildAssetSource(RuleAsset asset) throws SerializableException {
+        AssetItem item = repository.loadAssetByUUID( asset.uuid );
+
+        ContentHandler handler = ContentHandler.getHandler( item.getFormat() );//new AssetContentFormatHandler();
+        handler.storeAssetContent( asset, item );
+        StringBuffer buf = new StringBuffer();
+        if (handler.isRuleAsset()) {
+            
+            BRMSPackageBuilder builder = new BRMSPackageBuilder(new PackageBuilderConfiguration());
+            //now we load up the DSL files
+            builder.setDSLFiles( BRMSPackageBuilder.getDSLMappingFiles( item.getPackage(), new BRMSPackageBuilder.DSLErrorEvent() {
+                public void recordError(AssetItem asset, String message) {
+                    //ignore at this point...
+                }
+            }));
+            ((IRuleAsset) handler).assembleDRL( builder, item, buf );
+        } else {
+            return item.getContent();
+        }
+        
+        return buf.toString();
+    }
+
+    @WebRemote
+    public BuilderResult[] buildAsset(RuleAsset asset) throws SerializableException {
+        AssetItem item = repository.loadAssetByUUID( asset.uuid );
+
+        ContentHandler handler = ContentHandler.getHandler( item.getFormat() );//new AssetContentFormatHandler();
+        handler.storeAssetContent( asset, item );
+        
+        
+        ContentPackageAssembler asm = new ContentPackageAssembler(item);
+        if (!asm.hasErrors()) {
+            return null;
+        } else {
+            return generateBuilderResults( asm );
+        }
+        
+    }
 }

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-05-04 10:06:13 UTC (rev 11668)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java	2007-05-04 10:07:01 UTC (rev 11669)
@@ -39,6 +39,7 @@
     private List<ContentAssemblyError> errors = new ArrayList<ContentAssemblyError>();
 
     BRMSPackageBuilder builder;
+
     
     /**
      * @param assetPackage The package.
@@ -55,9 +56,22 @@
         
     }
     
+    /**
+     * Use this if you want to build the whole package.
+     */
     public ContentPackageAssembler(PackageItem assetPackage) {
         this(assetPackage, true);
     }
+
+    /**
+     * Use this if you want to build and compile just the one asset.
+     */
+    public ContentPackageAssembler(AssetItem assetToBuild) {
+        this.pkg = assetToBuild.getPackage();
+        if (preparePackage()) {
+            buildAsset( assetToBuild );
+        }
+    }
     
     /**
      * This will build the package. 
@@ -66,20 +80,27 @@
         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, new ErrorLogger() );
-                    if (builder.hasErrors()) {
-                        this.recordBuilderErrors( asset );
-                        //clear the errors, so we don't double report.
-                        builder.clearErrors();
-                    }
-                } catch ( DroolsParserException e ) {
-                    throw new RulesRepositoryException(e);
-                } catch ( IOException e ) {
-                    throw new RulesRepositoryException(e);
+            buildAsset( asset );
+        }
+    }
+
+    /**
+     * Builds assets that are "rule" assets (ie things that are not functions etc).
+     */
+    private void buildAsset(AssetItem asset) {
+        ContentHandler h = ContentHandler.getHandler( asset.getFormat() );
+        if (h instanceof IRuleAsset) {
+            try {
+                ((IRuleAsset) h).compile( builder, asset, new ErrorLogger() );
+                if (builder.hasErrors()) {
+                    this.recordBuilderErrors( asset );
+                    //clear the errors, so we don't double report.
+                    builder.clearErrors();
                 }
+            } catch ( DroolsParserException e ) {
+                throw new RulesRepositoryException(e);
+            } catch ( IOException e ) {
+                throw new RulesRepositoryException(e);
             }
         }
     }
@@ -105,12 +126,7 @@
             return false;
         }
 
-        //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) );
-            }
-        }));
+        loadDSLFiles();
         
         //finally, any functions we will load at this point.
         AssetItemIterator it = this.pkg.listAssetsByFormat( new String[] {AssetFormats.FUNCTION} );
@@ -126,6 +142,15 @@
         return errors.size() == 0;
     }
 
+    private void loadDSLFiles() {
+        //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) );
+            }
+        }));
+    }
+
     /**
      * This will return true if there is an error in the package configuration or functions.
      * @return

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-05-04 10:06:13 UTC (rev 11668)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-05-04 10:07:01 UTC (rev 11669)
@@ -1079,11 +1079,132 @@
         assertTrue(drl.indexOf( "package testPackageSource" ) < drl.indexOf( "this is a func" ));
         assertTrue(drl.indexOf( "package testPackageSource" ) < drl.indexOf( "import org.goo.Ber" ));
         
+
+        AssetItem dsl = pkg.addAsset( "MyDSL", "" );
+        dsl.updateFormat( AssetFormats.DSL );
+        dsl.updateContent( "[when]This is foo=bar()\n[then]do something=yeahMan();" );
+        dsl.checkin( "" );
         
+        AssetItem asset = pkg.addAsset( "MyDSLRule", "" );
+        asset.updateFormat( AssetFormats.DSL_TEMPLATE_RULE );
+        asset.updateContent( "when \n This is foo \n then \n do something" );
+        asset.checkin( "" );
         
+        drl = impl.buildPackageSource( pkg.getUUID() );
+        assertNotNull(drl);
         
+        assertTrue(drl.indexOf( "import org.goo.Ber" ) > -1);
+        assertTrue(drl.indexOf( "This is foo" ) == -1);
+        assertTrue(drl.indexOf( "do something" ) == -1);
+        assertTrue(drl.indexOf( "bar()" ) > 0);
+        assertTrue(drl.indexOf( "yeahMan();" ) > 0);
+        
+        
     }
+    
+    public void testAssetSource() throws Exception {
+        ServiceImplementation impl = getService();
+        RulesRepository repo = impl.repository;
+        
+        //create our package
+        PackageItem pkg = repo.createPackage( "testAssetSource", "" );
+        AssetItem asset = pkg.addAsset( "testRule", "" );
+        asset.updateFormat( AssetFormats.DRL );
+        asset.updateContent( "rule 'n' \n when Foo() then bar(); \n end");
+        asset.checkin( "" );
+        repo.save();
 
+        RuleAsset rule = impl.loadRuleAsset( asset.getUUID() );
+        String drl = impl.buildAssetSource( rule );
+        assertEquals("rule 'n' \n when Foo() then bar(); \n end", drl);
+        
+        asset = pkg.addAsset( "DT", "" );
+        asset.updateFormat( AssetFormats.DECISION_SPREADSHEET_XLS );
+        asset.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/SampleDecisionTable.xls" ) );
+        asset.checkin( "" );
+        
+        rule = impl.loadRuleAsset( asset.getUUID() );
+        drl = impl.buildAssetSource( rule );
+        assertNotNull(drl);
+        assertTrue(drl.indexOf( "rule" ) > -1);
+        assertTrue(drl.indexOf( "policy: Policy" ) > -1);
+        
+        AssetItem dsl = pkg.addAsset( "MyDSL", "" );
+        dsl.updateFormat( AssetFormats.DSL );
+        dsl.updateContent( "[when]This is foo=bar()\n[then]do something=yeahMan();" );
+        dsl.checkin( "" );
+        
+        asset = pkg.addAsset( "MyDSLRule", "" );
+        asset.updateFormat( AssetFormats.DSL_TEMPLATE_RULE );
+        asset.updateContent( "when \n This is foo \n then \n do something" );
+        asset.checkin( "" );
+        
+        
+        rule = impl.loadRuleAsset( asset.getUUID() );
+        drl = impl.buildAssetSource( rule );
+        assertNotNull(drl);
+        assertTrue(drl.indexOf( "This is foo" ) == -1);
+        assertTrue(drl.indexOf( "do something" ) == -1);
+        assertTrue(drl.indexOf( "bar()" ) > -1);
+        assertTrue(drl.indexOf( "yeahMan();" ) > -1);
+        
+    }
+    
+    public void testBuildAsset() throws Exception {
+        ServiceImplementation impl = getService();
+        RulesRepository repo = impl.repository;
+        
+        //create our package
+        PackageItem pkg = repo.createPackage( "testBuildAsset", "" );
+        AssetItem model = pkg.addAsset( "MyModel", "" );
+        model.updateFormat( AssetFormats.MODEL );
+        model.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
+        model.checkin( "" );
+        
+        pkg.updateHeader( "import com.billasurf.Person" );
+        
+        
+        AssetItem asset = pkg.addAsset( "testRule", "" );
+        asset.updateFormat( AssetFormats.DRL );
+        asset.updateContent( "rule 'MyGoodRule' \n when Person() then System.err.println(42); \n end");
+        asset.checkin( "" );
+        repo.save();
+        
+        RuleAsset rule = impl.loadRuleAsset( asset.getUUID() );
+
+        //check its all OK
+        BuilderResult[] result = impl.buildAsset( rule );
+        assertNull(result);
+
+        //try it with a bad rule
+        RuleContentText text = new RuleContentText();
+        text.content = "rule 'MyBadRule' \n when Personx() then System.err.println(42); \n end";
+        rule.content = text;
+        
+        result = impl.buildAsset( rule );
+        assertNotNull(result);
+        assertNotNull(result[0].message);
+        assertEquals(AssetFormats.DRL, result[0].assetFormat);
+        
+
+        //now mix in a DSL
+        AssetItem dsl = pkg.addAsset( "MyDSL", "" );
+        dsl.updateFormat( AssetFormats.DSL );
+        dsl.updateContent( "[when]There is a person=Person()\n[then]print out 42=System.err.println(42);" );
+        dsl.checkin( "" );
+
+        AssetItem dslRule = pkg.addAsset( "dslRule", "" );
+        dslRule.updateFormat( AssetFormats.DSL_TEMPLATE_RULE );
+        dslRule.updateContent( "when \n There is a person \n then \n print out 42" );
+        dslRule.checkin( "" );
+        
+        rule = impl.loadRuleAsset( dslRule.getUUID() );
+        
+        result = impl.buildAsset( rule );
+        assertNull(result);
+        
+    }
+
     private ServiceImplementation getService() throws Exception {
         ServiceImplementation impl = new ServiceImplementation();
         impl.repository = new RulesRepository( TestEnvironmentSessionHelper.getSession() );




More information about the jboss-svn-commits mailing list