[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