[jboss-svn-commits] JBL Code SVN: r32696 - in labs/jbossrules/branches/drools_repo_services_diega_baunax: drools-ide-common/src/main/java/org/drools and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat May 1 00:06:20 EDT 2010
Author: diegoll
Date: 2010-05-01 00:06:19 -0400 (Sat, 01 May 2010)
New Revision: 32696
Added:
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProvider.java
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProviderFactory.java
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/ide/
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/ide/common/
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/ide/common/BusinessRuleProviderDefaultImpl.java
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/resources/META-INF/
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/resources/META-INF/services/
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/resources/META-INF/services/org.drools.compiler.BusinessRuleProvider
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/ide/
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/ide/common/
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/ide/common/BusinessRuleProviderFactoryTest.java
Modified:
labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
Log:
[JBRULES-2499] added factory to dynamically load BRL parser on runtime
Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProvider.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProvider.java (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProvider.java 2010-05-01 04:06:19 UTC (rev 32696)
@@ -0,0 +1,12 @@
+package org.drools.compiler;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import org.drools.io.Resource;
+
+public interface BusinessRuleProvider {
+
+ public Reader getKnowledgeReader(Resource ruleResource) throws IOException;
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProviderFactory.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProviderFactory.java (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/BusinessRuleProviderFactory.java 2010-05-01 04:06:19 UTC (rev 32696)
@@ -0,0 +1,72 @@
+package org.drools.compiler;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Enumeration;
+
+import org.drools.CheckedDroolsException;
+import org.drools.util.ServiceRegistryImpl;
+
+public class BusinessRuleProviderFactory {
+
+ private BusinessRuleProvider provider;
+
+ public BusinessRuleProvider getProvider() throws CheckedDroolsException {
+ if (null == provider)
+ provider = loadProvider();
+ return provider;
+ }
+
+ private BusinessRuleProvider loadProvider() throws CheckedDroolsException {
+ String interfaceName = BusinessRuleProvider.class.getName();
+ try {
+ Enumeration<URL> systemResources = ClassLoader.getSystemResources("META-INF/services/" + interfaceName);
+ URL systemResource = null;
+ while (systemResources.hasMoreElements()) {
+ if (null != systemResource)
+ throwMultipleImplementationsDetected();
+ systemResource = systemResources.nextElement();
+ }
+
+ if (null == systemResource)
+ throwNoImplementationFound();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(systemResource.openStream()));
+ String className = null;
+ for (String currentName; (currentName = reader.readLine()) != null;) {
+ if (null != className)
+ throwMultipleImplementationsDetected();
+ className = currentName;
+ }
+
+ if (null == className)
+ throwNoImplementationFound();
+
+ ServiceRegistryImpl.getInstance().addDefault(BusinessRuleProvider.class, className);
+ return ServiceRegistryImpl.getInstance().get(BusinessRuleProvider.class);
+ } catch (IOException e) {
+ throw new CheckedDroolsException("Error obtaining " + interfaceName, e);
+ }
+ }
+
+ private void throwNoImplementationFound() throws CheckedDroolsException {
+ throw new CheckedDroolsException("Unable to find implementation for BusinessRuleProvider");
+ }
+
+ private void throwMultipleImplementationsDetected() {
+ throw new IllegalStateException("multiple BusinessRuleProvider implementations detected");
+ }
+
+ private static BusinessRuleProviderFactory instance;
+
+ private BusinessRuleProviderFactory() {
+ }
+
+ public static BusinessRuleProviderFactory getInstance() {
+ if (null == instance)
+ instance = new BusinessRuleProviderFactory();
+ return instance;
+ }
+}
Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2010-04-30 22:49:12 UTC (rev 32695)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2010-05-01 04:06:19 UTC (rev 32696)
@@ -17,7 +17,6 @@
*/
import java.beans.IntrospectionException;
-import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
@@ -56,9 +55,6 @@
import org.drools.facttemplates.FactTemplateImpl;
import org.drools.facttemplates.FieldTemplate;
import org.drools.facttemplates.FieldTemplateImpl;
-import org.drools.guvnor.client.modeldriven.brl.RuleModel;
-import org.drools.guvnor.server.util.BRDRLPersistence;
-import org.drools.guvnor.server.util.BRXMLPersistence;
import org.drools.io.Resource;
import org.drools.io.impl.ClassPathResource;
import org.drools.io.impl.ReaderResource;
@@ -362,47 +358,33 @@
this.resource = null;
}
- public void addPackageFromBrl(final Resource resource) throws DroolsParserException,
- IOException {
- this.resource = resource;
+ public void addPackageFromBrl(final Resource resource) throws DroolsParserException {
+ this.resource = resource;
+ try {
+ BusinessRuleProvider provider = BusinessRuleProviderFactory.getInstance().getProvider();
+ Reader knowledge = provider.getKnowledgeReader(resource);
- String brl = loadBrlFile( resource.getReader() );
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( brl );
- String drl = BRDRLPersistence.getInstance().marshal( model );
- final DrlParser parser = new DrlParser();
- DefaultExpander expander = getDslExpander();
+ DrlParser parser = new DrlParser();
+ DefaultExpander expander = getDslExpander();
- try {
- String str;
- if ( expander != null ) {
- str = expander.expand( new StringReader( drl ) );
- if ( expander.hasErrors() ) {
- this.results.addAll( expander.getErrors() );
- }
- } else {
- str = drl;
- }
+ if (null != expander) {
+ knowledge = new StringReader(expander.expand(knowledge));
+ if (expander.hasErrors())
+ this.results.addAll(expander.getErrors());
+ }
- final PackageDescr pkg = parser.parse( str );
- this.results.addAll( parser.getErrors() );
- if ( !parser.hasErrors() ) {
- addPackage( pkg );
- }
- } catch ( IOException e ) {
- throw new RuntimeException( e );
- }
- this.resource = null;
- }
+ PackageDescr pkg = parser.parse(knowledge);
+ if (parser.hasErrors()) {
+ this.results.addAll(parser.getErrors());
+ } else {
+ addPackage(pkg);
+ }
- private String loadBrlFile(final Reader drl) throws IOException {
- final StringBuilder buf = new StringBuilder();
- final BufferedReader input = new BufferedReader( drl );
- String line = null;
- while ( (line = input.readLine()) != null ) {
- buf.append( line );
- buf.append( "\n" );
+ } catch (Exception e) {
+ throw new DroolsParserException(e);
+ } finally {
+ this.resource = null;
}
- return buf.toString();
}
public void addDsl(Resource resource) throws IOException {
Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/ide/common/BusinessRuleProviderDefaultImpl.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/ide/common/BusinessRuleProviderDefaultImpl.java (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/java/org/drools/ide/common/BusinessRuleProviderDefaultImpl.java 2010-05-01 04:06:19 UTC (rev 32696)
@@ -0,0 +1,40 @@
+package org.drools.ide.common;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+
+import org.drools.Service;
+import org.drools.compiler.BusinessRuleProvider;
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.server.util.BRDRLPersistence;
+import org.drools.guvnor.server.util.BRXMLPersistence;
+import org.drools.io.Resource;
+
+public class BusinessRuleProviderDefaultImpl implements Service, BusinessRuleProvider {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.drools.compiler.BusinessRuleProvider#getKnowledgeReader(org.drools
+ * .io.Resource, org.drools.lang.Expander)
+ */
+ public Reader getKnowledgeReader(Resource ruleResource) throws IOException {
+ String brl = loadBrlFile(ruleResource.getReader());
+ RuleModel model = BRXMLPersistence.getInstance().unmarshal(brl);
+ return new StringReader(BRDRLPersistence.getInstance().marshal(model));
+ }
+
+ private String loadBrlFile(final Reader drl) throws IOException {
+ final StringBuilder buf = new StringBuilder();
+ final BufferedReader input = new BufferedReader(drl);
+ String line = null;
+ while ((line = input.readLine()) != null) {
+ buf.append(line);
+ buf.append("\n");
+ }
+ return buf.toString();
+ }
+}
Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/resources/META-INF/services/org.drools.compiler.BusinessRuleProvider
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/resources/META-INF/services/org.drools.compiler.BusinessRuleProvider (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/main/resources/META-INF/services/org.drools.compiler.BusinessRuleProvider 2010-05-01 04:06:19 UTC (rev 32696)
@@ -0,0 +1 @@
+org.drools.ide.common.BusinessRuleProviderDefaultImpl
\ No newline at end of file
Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/ide/common/BusinessRuleProviderFactoryTest.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/ide/common/BusinessRuleProviderFactoryTest.java (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-ide-common/src/test/java/org/drools/ide/common/BusinessRuleProviderFactoryTest.java 2010-05-01 04:06:19 UTC (rev 32696)
@@ -0,0 +1,16 @@
+package org.drools.ide.common;
+
+import junit.framework.TestCase;
+
+import org.drools.CheckedDroolsException;
+import org.drools.compiler.BusinessRuleProvider;
+import org.drools.compiler.BusinessRuleProviderFactory;
+
+public class BusinessRuleProviderFactoryTest extends TestCase {
+
+ public void testGetProvider() throws CheckedDroolsException {
+ BusinessRuleProvider provider = BusinessRuleProviderFactory.getInstance().getProvider();
+ assertNotNull(provider);
+ assertTrue(provider instanceof BusinessRuleProviderDefaultImpl);
+ }
+}
More information about the jboss-svn-commits
mailing list