[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