Author: mar...@jb... Date: 2006-07-04 19:09:51 -0400 (Tue, 04 Jul 2006) New Revision: 4905 Added: labs/jbossrules/trunk/drools-jsr94/src/test/resources/org/drools/jsr94/rules/sisters.xml Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/LocalRuleExecutionSetProviderImpl.java labs/jbossrules/trunk/drools-jsr94/src/test/java/org/drools/jsr94/rules/StatelessRuleSessionTest.java Log: JBRULES-355 Enable XML rule language support with createRuleExecutionSet JSR 94 API -Changed the xml property key -Streamlined the LocalExecutionSetProviderImpl Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/LocalRuleExecutionSetProviderImpl.java =================================================================== --- labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/LocalRuleExecutionSetProviderImpl.java 2006-07-03 20:47:34 UTC (rev 4904) +++ labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/LocalRuleExecutionSetProviderImpl.java 2006-07-04 23:09:51 UTC (rev 4905) @@ -73,30 +73,12 @@ * @return The created <code>RuleExecutionSet</code>. */ public RuleExecutionSet createRuleExecutionSet(final InputStream ruleExecutionSetStream, - final Map properties) throws RuleExecutionSetCreateException { - try { - final PackageBuilder builder = new PackageBuilder(); - if ( properties != null && properties.containsKey( "dsl" ) ) { - final Reader dsl = new StringReader( (String) properties.get( "dsl" ) ); - builder.addPackageFromDrl( new InputStreamReader( ruleExecutionSetStream ), - dsl ); - } else if (properties != null && properties.containsKey( "xml" ) ) { - builder.addPackageFromXml(new InputStreamReader( ruleExecutionSetStream ) ); - } else { - builder.addPackageFromDrl( new InputStreamReader( ruleExecutionSetStream ) ); - } - final Package pkg = builder.getPackage(); - return this.createRuleExecutionSet( pkg, - properties ); - } catch ( final IOException e ) { - throw new RuleExecutionSetCreateException( "cannot create rule execution set", - e ); - } catch ( final DroolsParserException e ) { - throw new RuleExecutionSetCreateException( "cannot create rule execution set", - e ); - } + final Map properties) throws RuleExecutionSetCreateException { + return createRuleExecutionSet( new InputStreamReader( ruleExecutionSetStream ), properties); } + + /** * Creates a <code>RuleExecutionSet</code> implementation using a supplied * character stream Reader and additional Drools-specific properties. A @@ -118,28 +100,48 @@ final Map properties) throws RuleExecutionSetCreateException { try { final PackageBuilder builder = new PackageBuilder(); - if ( properties != null && properties.containsKey( "dsl" ) ) { - final Reader dsl = new StringReader( (String) properties.get( "dsl" ) ); - builder.addPackageFromDrl( ruleExecutionSetReader, - dsl ); - } else if (properties != null && properties.containsKey( "xml" )) { - builder.addPackageFromXml( ruleExecutionSetReader ); + String dsl = null; + String source = null; + + if ( properties != null ) { + dsl = ( String ) properties.get( "dsl" ); + source = ( String ) properties.get( "source" ); + } + + if ( source == null ) { + source = "drl"; + } + + + if ( dsl == null ) { + if ( source.equals( "xml" ) ) { + builder.addPackageFromXml( ruleExecutionSetReader ); + } else { + builder.addPackageFromDrl( ruleExecutionSetReader ); + } } else { - builder.addPackageFromDrl( ruleExecutionSetReader ); + if ( source.equals( "xml" ) ) { + // xml cannot specify a dsl + builder.addPackageFromXml( ruleExecutionSetReader ); + } else { + builder.addPackageFromDrl( ruleExecutionSetReader, + new StringReader( dsl ) ); + } } - + final Package pkg = builder.getPackage(); - return this.createRuleExecutionSet( pkg, - properties ); + return createRuleExecutionSet( pkg, + properties ); } catch ( final IOException e ) { throw new RuleExecutionSetCreateException( "cannot create rule execution set", e ); } catch ( final DroolsParserException e ) { throw new RuleExecutionSetCreateException( "cannot create rule execution set", e ); - } + } } - + + /** * Creates a <code>RuleExecutionSet</code> implementation from a * Drools-specific AST representation and Drools-specific properties. Modified: labs/jbossrules/trunk/drools-jsr94/src/test/java/org/drools/jsr94/rules/StatelessRuleSessionTest.java =================================================================== --- labs/jbossrules/trunk/drools-jsr94/src/test/java/org/drools/jsr94/rules/StatelessRuleSessionTest.java 2006-07-03 20:47:34 UTC (rev 4904) +++ labs/jbossrules/trunk/drools-jsr94/src/test/java/org/drools/jsr94/rules/StatelessRuleSessionTest.java 2006-07-04 23:09:51 UTC (rev 4905) @@ -52,7 +52,7 @@ private final String bindUri = "sisters.drl"; private final String bindUri_drl = "sisters_expander.drl"; private final String bindUri_dsl = "sisters_expander.dsl"; - private final String bindUri_xml = "sisters.xml"; + private final String bindUri_xml = "sisters.xml"; private final String bindUri_globals = "sisters_globals.drl"; /** @@ -73,18 +73,18 @@ this.sessionBuilder.addRuleExecutionSet( this.bindUri_drl, StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_drl ), map ); + final Map map_xml = new HashMap(); - map_xml.put( "xml", "xml" ); + map_xml.put( "source", + "xml" ); this.sessionBuilder.addRuleExecutionSet( this.bindUri_xml, - StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_xml ), - map_xml ); + StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_xml ), + map_xml ); - this.sessionBuilder.addRuleExecutionSet( this.bindUri_globals, StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_globals ) ); } - /* * Taken from DRLParser @@ -103,59 +103,63 @@ return text; } - public void testCreateRuleExecutionSetFromStreamWithXml(){ - - try { - final Map map_xml = new HashMap(); - map_xml.put( "xml", "xml" ); - - RuleServiceProvider ruleServiceProvider; - RuleServiceProviderManager.registerRuleServiceProvider( "http://drools.org/", - RuleServiceProviderImpl.class ); + public void testCreateRuleExecutionSetFromStreamWithXml() { - ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider( "http://drools.org/" ); + try { + final Map map = new HashMap(); + map.put( "source", + "xml" ); - LocalRuleExecutionSetProvider ruleSetProvider = ruleServiceProvider.getRuleAdministrator().getLocalRuleExecutionSetProvider( null ); - final RuleExecutionSet ruleExecutionSet = ruleSetProvider.createRuleExecutionSet( StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_xml ), - map_xml ); - assertNotNull(ruleExecutionSet); - } catch (RemoteException e) { - fail(); - } catch (ConfigurationException e) { - fail(); - } catch (RuleExecutionSetCreateException e) { - fail(); - } catch (IOException e) { - fail(); - } + RuleServiceProvider ruleServiceProvider; + RuleServiceProviderManager.registerRuleServiceProvider( "http://drools.org/", + RuleServiceProviderImpl.class ); + + ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider( "http://drools.org/" ); + + LocalRuleExecutionSetProvider ruleSetProvider = ruleServiceProvider.getRuleAdministrator().getLocalRuleExecutionSetProvider( null ); + final RuleExecutionSet ruleExecutionSet = ruleSetProvider.createRuleExecutionSet( StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_xml ), + map ); + assertNotNull( ruleExecutionSet ); + } catch ( RemoteException e ) { + fail(); + } catch ( ConfigurationException e ) { + fail(); + } catch ( RuleExecutionSetCreateException e ) { + fail(); + } catch ( IOException e ) { + fail(); + } } -public void testCreateRuleExecutionSetFromStreamReaderWithXml(){ - try { - final Map map_xml = new HashMap(); - map_xml.put( "xml", "xml" ); - - RuleServiceProvider ruleServiceProvider; - RuleServiceProviderManager.registerRuleServiceProvider( "http://drools.org/", - RuleServiceProviderImpl.class ); - ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider( "http://drools.org/" ); + public void testCreateRuleExecutionSetFromStreamReaderWithXml() { + try { + final Map map = new HashMap(); + map.put( "source", + "xml" ); - LocalRuleExecutionSetProvider ruleSetProvider = ruleServiceProvider.getRuleAdministrator().getLocalRuleExecutionSetProvider( null ); - final Reader ruleReader = new InputStreamReader( StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_xml ) ); - final RuleExecutionSet ruleExecutionSet = ruleSetProvider.createRuleExecutionSet( ruleReader, - map_xml ); - assertNotNull(ruleExecutionSet); + RuleServiceProvider ruleServiceProvider; + RuleServiceProviderManager.registerRuleServiceProvider( "http://drools.org/", + RuleServiceProviderImpl.class ); - } catch (RemoteException e) { - fail(); - } catch (ConfigurationException e) { - fail(); - } catch (RuleExecutionSetCreateException e) { - fail(); - } catch (IOException e) { - fail(); - } + ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider( "http://drools.org/" ); + + LocalRuleExecutionSetProvider ruleSetProvider = ruleServiceProvider.getRuleAdministrator().getLocalRuleExecutionSetProvider( null ); + final Reader ruleReader = new InputStreamReader( StatelessRuleSessionTest.class.getResourceAsStream( this.bindUri_xml ) ); + final RuleExecutionSet ruleExecutionSet = ruleSetProvider.createRuleExecutionSet( ruleReader, + map ); + assertNotNull( ruleExecutionSet ); + + } catch ( RemoteException e ) { + fail(); + } catch ( ConfigurationException e ) { + fail(); + } catch ( RuleExecutionSetCreateException e ) { + fail(); + } catch ( IOException e ) { + fail(); + } } + /** * Test executeRules with globals. */ @@ -263,6 +267,7 @@ statelessSession.release(); } + /** * Test executeRules with normal drl. */ Added: labs/jbossrules/trunk/drools-jsr94/src/test/resources/org/drools/jsr94/rules/sisters.xml =================================================================== --- labs/jbossrules/trunk/drools-jsr94/src/test/resources/org/drools/jsr94/rules/sisters.xml 2006-07-03 20:47:34 UTC (rev 4904) +++ labs/jbossrules/trunk/drools-jsr94/src/test/resources/org/drools/jsr94/rules/sisters.xml 2006-07-04 23:09:51 UTC (rev 4905) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<package name="SistersRules" + xmlns="http://drools.org/drools-3.0" + xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" + xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd"> + + <import name="org.drools.jsr94.rules.Person" /> + + <rule name="FindSisters"> + <lhs> + <column object-type="Person" identifier="$person1"> + <field-binding field-name="name" identifier="$name1" /> + </column> + + <column object-type="Person" identifier="$person2"> + <field-binding field-name="name" identifier="$name2" /> + </column> + <eval>$person1.hasSister($person2)</eval> + </lhs> + + <rhs> + System.out.println($person1.getName() + " and " + $person2.getName() +" are sisters"); + assert( $person1.getName() + " and " + $person2.getName() +" are sisters"); + </rhs> + </rule> +</package> \ No newline at end of file |