[jboss-svn-commits] JBL Code SVN: r11059 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server/util and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Apr 17 06:57:01 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-04-17 06:57:01 -0400 (Tue, 17 Apr 2007)
New Revision: 11059
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentAssemblyError.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/builder/ContentPackageAssemblerTest.java
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/util/BRMSSuggestionCompletionLoader.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/BRMSSuggestionCompletionLoaderTest.java
Log:
JBRULES-773 BRMS assembler
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-17 10:50:58 UTC (rev 11058)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/BRMSPackageBuilder.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -2,11 +2,22 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
+import org.drools.brms.client.common.AssetFormats;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.dsl.DSLMappingFile;
+import org.drools.lang.dsl.DSLMappingParseException;
+import org.drools.repository.AssetItem;
+import org.drools.repository.AssetItemIterator;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepositoryException;
import org.drools.resource.util.ByteArrayClassLoader;
/**
@@ -22,41 +33,43 @@
* This will give you a fresh new PackageBuilder
* using the given classpath.
*/
- public static BRMSPackageBuilder getInstance(JarInputStream[] classpath) throws IOException {
+ public static BRMSPackageBuilder getInstance(List<JarInputStream> classpath) {
ByteArrayClassLoader loader = new ByteArrayClassLoader( BRMSPackageBuilder.class.getClassLoader() );
-
- for ( int i = 0; i < classpath.length; i++ ) {
-
- JarInputStream jis = classpath[i];
- JarEntry entry = null;
- byte[] buf = new byte[1024];
- int len = 0;
- while ( (entry = jis.getNextJarEntry()) != null ) {
- if ( !entry.isDirectory() ) {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- while ( (len = jis.read( buf )) >= 0 ) {
- out.write( buf, 0, len );
+ try {
+ for ( JarInputStream jis : classpath ) {
+ JarEntry entry = null;
+ byte[] buf = new byte[1024];
+ int len = 0;
+ while ( (entry = jis.getNextJarEntry()) != null ) {
+ if ( !entry.isDirectory() ) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ while ( (len = jis.read( buf )) >= 0 ) {
+ out.write( buf, 0, len );
+ }
+ loader.addResource( entry.getName(), out.toByteArray() );
}
- loader.addResource( entry.getName(), out.toByteArray() );
}
+
}
+ } catch ( IOException e ) {
+ throw new RulesRepositoryException( e );
+ }
- }
-
PackageBuilderConfiguration config = new PackageBuilderConfiguration();
- config.setClassLoader( loader );
+ config.setClassLoader( loader );
- return new BRMSPackageBuilder(config);
+ return new BRMSPackageBuilder( config );
}
-
+
/**
* In the BRMS you should not need to use this, use the getInstance factory method instead.
* @param config
*/
- public BRMSPackageBuilder(PackageBuilderConfiguration config) {
- super(config);
+ public BRMSPackageBuilder(
+ PackageBuilderConfiguration config) {
+ super( config );
}
/**
@@ -66,4 +79,61 @@
super.resetErrors();
}
+ /**
+ * Load up all the DSL mappping files for the given package.
+ */
+ public static List<DSLMappingFile> getDSLMappingFiles(PackageItem pkg, ErrorEvent err) {
+ List<DSLMappingFile> result = new ArrayList<DSLMappingFile>();
+ AssetItemIterator it = pkg.listAssetsByFormat( new String[]{AssetFormats.DSL} );
+ while ( it.hasNext() ) {
+ AssetItem item = (AssetItem) it.next();
+ String dslData = item.getContent();
+ DSLMappingFile file = new DSLMappingFile();
+ try {
+ if ( file.parseAndLoad( new StringReader( dslData ) ) ) {
+ result.add( file );
+ } else {
+ List errs = file.getErrors();
+ for ( Iterator iter = errs.iterator(); iter.hasNext(); ) {
+ DSLMappingParseException e = (DSLMappingParseException) iter.next();
+ err.logError( "An error occurred loading DSL configuration called: " + item.getName() + " line number " + e.getLine() + " : " + e.getMessage() );
+ }
+ }
+
+ } catch ( IOException e ) {
+ err.logError( e.getMessage() );
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * Load up all the Jars for the given package.
+ */
+ public static List<JarInputStream> getJars(PackageItem pkg) {
+ List<JarInputStream> result = new ArrayList<JarInputStream>();
+ AssetItemIterator ait = pkg.listAssetsByFormat( new String[]{AssetFormats.MODEL} );
+ while ( ait.hasNext() ) {
+ AssetItem item = (AssetItem) ait.next();
+ if ( item.getBinaryContentAttachment() != null ) {
+ try {
+ result.add( new JarInputStream( item.getBinaryContentAttachment(),
+ false ) );
+ } catch ( IOException e ) {
+ throw new RulesRepositoryException(e);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * This is used when loading Jars, DSLs etc to report errors.
+ */
+ public static interface ErrorEvent {
+ public void logError(String message);
+ }
+
}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentAssemblyError.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentAssemblyError.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentAssemblyError.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -0,0 +1,24 @@
+package org.drools.brms.server.builder;
+
+import org.drools.repository.PackageItem;
+import org.drools.repository.VersionableItem;
+
+/**
+ * This class is used to accumulate error reports for asset.
+ * This can then be used to feed back to the user where the problems are.
+ *
+ * @author Michael Neale
+ */
+public class ContentAssemblyError {
+
+ public ContentAssemblyError(VersionableItem it, String message) {
+ this.itemInError = it;
+ this.errorReport = message;
+ }
+ /**
+ * This may be null, if its not associated to any particular asset.
+ */
+ public VersionableItem itemInError;
+ public String errorReport;
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentAssemblyError.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -0,0 +1,106 @@
+package org.drools.brms.server.builder;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.JarInputStream;
+
+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.PackageItem;
+import org.drools.repository.RulesRepositoryException;
+import org.drools.rule.Package;
+
+/**
+ * This assembles packages in the BRMS into binary package objects, and deals with errors etc.
+ * Each content type is responsible for contributing to the package.
+ *
+ * @author Michael Neale
+ */
+public class ContentPackageAssembler {
+
+ private PackageItem pkg;
+ private Package binaryPackage;
+ private List errors = new ArrayList();
+
+ private BRMSPackageBuilder builder;
+ private List<DSLMappingFile> dslFiles;
+
+ public ContentPackageAssembler(PackageItem assetPackage) {
+ this.pkg = assetPackage;
+
+ if (preparePackage()) {
+ buildPackage();
+ }
+
+ }
+
+ /**
+ * This will build the package.
+ */
+ private void buildPackage() {
+
+ }
+
+ /**
+ * This prepares the package builder, loads the jars/classpath.
+ * @return true if everything is good to go, false if its all gone horribly wrong,
+ * and we can't even get the package header up.
+ */
+ private boolean preparePackage() {
+ List<JarInputStream> jars = BRMSPackageBuilder.getJars( pkg );
+ builder = BRMSPackageBuilder.getInstance( jars );
+ builder.addPackage( new PackageDescr(pkg.getName()) );
+ try {
+ builder.addPackageFromDrl( new StringReader(pkg.getHeader()) );
+ if (builder.hasErrors()) {
+ recordBuilderErrors();
+ return false;
+ }
+ } catch ( DroolsParserException e ) {
+ throw new RulesRepositoryException("A serious error occurred trying to parser the package header.", e);
+ } catch ( IOException e ) {
+ throw new RulesRepositoryException(e);
+ }
+
+ this.dslFiles = BRMSPackageBuilder.getDSLMappingFiles( pkg, new BRMSPackageBuilder.ErrorEvent() {
+ public void logError(String message) {
+ errors.add( new ContentAssemblyError(pkg, message) );
+ }
+ });
+ return errors.size() == 0;
+ }
+
+
+
+ /**
+ * This will accumulate the errors.
+ */
+ private void recordBuilderErrors() {
+ DroolsError[] errs = builder.getErrors();
+ for ( int i = 0; i < errs.length; i++ ) {
+ this.errors.add( new ContentAssemblyError(pkg, errs[i].getMessage()) );
+ }
+
+ }
+
+ /**
+ * I've got a package people !
+ */
+ public Package getBinaryPackage() {
+ if (this.hasErrors()) {
+ throw new IllegalStateException("There is no package available, as there were errors.");
+ }
+ return binaryPackage;
+ }
+
+
+ public boolean hasErrors() {
+ return errors.size() > 0;
+ }
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/builder/ContentPackageAssembler.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRMSSuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRMSSuggestionCompletionLoader.java 2007-04-17 10:50:58 UTC (rev 11058)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/BRMSSuggestionCompletionLoader.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -1,17 +1,12 @@
package org.drools.brms.server.util;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarInputStream;
-import org.drools.brms.client.common.AssetFormats;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.server.builder.BRMSPackageBuilder;
import org.drools.brms.server.rules.SuggestionCompletionLoader;
import org.drools.lang.dsl.DSLMappingFile;
-import org.drools.repository.AssetItem;
-import org.drools.repository.AssetItemIterator;
import org.drools.repository.PackageItem;
/**
@@ -27,38 +22,15 @@
private List<DSLMappingFile> getDSLMappingFiles(PackageItem pkg) {
- List<DSLMappingFile> result = new ArrayList<DSLMappingFile>();
- AssetItemIterator it = pkg.listAssetsByFormat( new String[] {AssetFormats.DSL} );
- while(it.hasNext()) {
- AssetItem item = (AssetItem) it.next();
- String dslData = item.getContent();
- DSLMappingFile file = new DSLMappingFile();
- try {
- file.parseAndLoad( new StringReader( dslData ) );
- result.add( file );
- } catch ( IOException e ) {
- errors.add( e.getMessage() );
- }
-
- }
-
- return result;
+ return BRMSPackageBuilder.getDSLMappingFiles( pkg, new BRMSPackageBuilder.ErrorEvent() {
+ public void logError(String message) {
+ errors.add( message );
+ }
+ });
}
private List<JarInputStream> getJars(PackageItem pkg) {
- List<JarInputStream> result = new ArrayList<JarInputStream>();
- AssetItemIterator ait = pkg.listAssetsByFormat( new String[]{AssetFormats.MODEL} );
- while ( ait.hasNext() ) {
- AssetItem item = (AssetItem) ait.next();
- if (item.getBinaryContentAttachment() != null) {
- try {
- result.add( new JarInputStream( item.getBinaryContentAttachment(), false ) );
- } catch ( IOException e ) {
- this.errors.add( e.getMessage() );
- }
- }
- }
- return result;
+ return BRMSPackageBuilder.getJars( pkg );
}
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java 2007-04-17 10:50:58 UTC (rev 11058)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -1,6 +1,8 @@
package org.drools.brms.server.builder;
import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
import java.util.jar.JarInputStream;
import junit.framework.TestCase;
@@ -15,15 +17,20 @@
public void testPartialPackage() throws Exception {
JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
- BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( new JarInputStream[] {jis} );
+ List<JarInputStream> l = new ArrayList<JarInputStream>();
+ l.add( jis );
+ BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
- String header = "package foo.bar\n import com.billasurf.Person\n import com.billasurf.Board";
+ PackageDescr pc = new PackageDescr("foo.bar");
+ builder.addPackage( pc );
+
+ String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
- String ruleAtom = "package foo.bar rule foo \n when \n Person() \n then \n System.out.println(42); end";
+ String ruleAtom = "rule foo \n when \n Person() \n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
if (builder.hasErrors()) {
System.err.println(builder.getErrors()[0].getMessage());
@@ -73,5 +80,9 @@
assertNotNull(p.getRule( "abc" ));
}
+
+
+
+
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -0,0 +1,39 @@
+package org.drools.brms.server.builder;
+
+import org.drools.repository.PackageItem;
+
+import junit.framework.TestCase;
+
+public class ContentPackageAssemblerTest extends TestCase {
+
+
+ public void FIXME_testSimplePackage() throws Exception {
+ PackageItem pkg = null;
+ ContentPackageAssembler asm = new ContentPackageAssembler(pkg);
+ assertFalse(asm.hasErrors());
+ assertNotNull(asm.getBinaryPackage());
+ org.drools.rule.Package bin = asm.getBinaryPackage();
+ assertEquals(pkg.getName(), bin.getName());
+ assertTrue(bin.isValid());
+
+ assertEquals(2, bin.getRules().length);
+
+
+
+ }
+
+ public void testErrorsInConfig() {
+
+ }
+
+ public void testErrorsInFunctionAndRuleAsset() {
+
+ }
+
+ public void testComplexAssets() {
+
+ }
+
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/ContentPackageAssemblerTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/BRMSSuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/BRMSSuggestionCompletionLoaderTest.java 2007-04-17 10:50:58 UTC (rev 11058)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/BRMSSuggestionCompletionLoaderTest.java 2007-04-17 10:57:01 UTC (rev 11059)
@@ -85,13 +85,21 @@
SuggestionCompletionEngine eng = loader.getSuggestionEngine( item );
+ assertFalse(loader.hasErrors());
assertEquals(1, eng.actionDSLSentences.length);
assertEquals(1, eng.conditionDSLSentences.length);
assertEquals( "The agents rating is {rating}", eng.conditionDSLSentences[0].sentence );
assertEquals("Send a notification to manufacturing '{message}'",eng.actionDSLSentences[0].sentence);
+ dsl = "koo kooo ca choo";
+ asset.updateContent( dsl );
+ asset.checkin( "boo" );
+ item = repo.loadPackage( "testLoadDSLs" );
+ loader = new BRMSSuggestionCompletionLoader();
+ loader.getSuggestionEngine( item );
+ assertTrue(loader.hasErrors());
}
More information about the jboss-svn-commits
mailing list