[jboss-svn-commits] JBL Code SVN: r33368 - in labs/jbossrules/trunk/drools-container/drools-spring/src: main/java/org/drools/container/spring/namespace and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jun 6 04:15:33 EDT 2010
Author: mark.proctor at jboss.com
Date: 2010-06-06 04:15:32 -0400 (Sun, 06 Jun 2010)
New Revision: 33368
Modified:
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java
labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd
labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml
Log:
JBRULES-2538 Support JAXB as a ResourceType
JBRULES-1434 Drools Spring
-fix XSD, it should not be sequence (order dependant) for resources on xsd
-removed resource:model, so it's unifed around the existing resource concept, including adding jaxb-configuration
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java 2010-06-06 08:13:41 UTC (rev 33367)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java 2010-06-06 08:15:32 UTC (rev 33368)
@@ -91,8 +91,8 @@
if ( resourceType == null ) {
throw new IllegalArgumentException( "resourceType property is mandatory" );
}
- if ( resourceConfiguration != null && !ResourceType.DTABLE.equals( resourceType ) ) {
- throw new IllegalArgumentException( "Only Decision Tables can have configuration" );
+ if ( resourceConfiguration != null && !(ResourceType.DTABLE.equals( resourceType ) || ResourceType.XSD.equals( resourceType )) ) {
+ throw new IllegalArgumentException( "Only Decision Tables or XSD resources can have configuration" );
}
}
}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java 2010-06-06 08:13:41 UTC (rev 33367)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java 2010-06-06 08:15:32 UTC (rev 33368)
@@ -1,14 +1,17 @@
package org.drools.container.spring.beans;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.JaxbConfiguration;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
import org.drools.builder.help.KnowledgeBuilderHelper;
import org.drools.grid.ExecutionNode;
import org.drools.grid.local.LocalConnection;
@@ -26,7 +29,6 @@
private KnowledgeBase kbase;
private ExecutionNode node;
private List<DroolsResourceAdapter> resources = Collections.emptyList();
- private List<DroolsResourceAdapter> models = Collections.emptyList();
public Object getObject() throws Exception {
return kbase;
@@ -46,25 +48,11 @@
}
KnowledgeBuilder kbuilder = node.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
kbase = node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
-
- if ( models != null && models.size() > 0 ) {
- for ( DroolsResourceAdapter res : models ) {
- Options xjcOptions = new Options();
- xjcOptions.setSchemaLanguage( Language.XMLSCHEMA );
- try {
- KnowledgeBuilderHelper.addXsdModel( res.getDroolsResource(),
- kbuilder,
- xjcOptions,
- "xsd" );
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- } catch ( IOException e ) {
- throw new RuntimeException( "Error creating XSD model",
- e );
- }
- }
- }
-
- for ( DroolsResourceAdapter res : resources ) {
+
+ List<DroolsResourceAdapter> xsds = new ArrayList<DroolsResourceAdapter>();
+
+ for ( DroolsResourceAdapter res : resources ) {
+
if ( res.getResourceConfiguration() == null ) {
kbuilder.add( res.getDroolsResource(),
res.getResourceType() );
@@ -107,12 +95,4 @@
public void setNode(ExecutionNode executionNode) {
this.node = executionNode;
}
-
- public void setModels(List<DroolsResourceAdapter> models) {
- this.models = models;
- }
-
- public List<DroolsResourceAdapter> getModels() {
- return models;
- }
}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java 2010-06-06 08:13:41 UTC (rev 33367)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java 2010-06-06 08:15:32 UTC (rev 33368)
@@ -59,20 +59,6 @@
resources );
}
- childElements = DomUtils.getChildElementsByTagName( element,
- "model" );
-
- if ( childElements != null && !childElements.isEmpty() ) {
- ManagedList models = new ManagedList( childElements.size() );
- for ( Element childResource : childElements ) {
- BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement( childResource,
- factory.getBeanDefinition() );
- models.add( resourceDefinition );
- }
- factory.addPropertyValue( "models",
- models );
- }
-
return factory.getBeanDefinition();
}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java 2010-06-06 08:13:41 UTC (rev 33367)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java 2010-06-06 08:15:32 UTC (rev 33368)
@@ -3,6 +3,8 @@
import java.util.List;
import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.JaxbConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.builder.conf.impl.DecisionTableConfigurationImpl;
import org.drools.container.spring.beans.DroolsResourceAdapter;
@@ -12,13 +14,19 @@
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import com.sun.tools.xjc.Language;
+import com.sun.tools.xjc.Options;
+
public class ResourceDefinitionParser extends AbstractBeanDefinitionParser {
private static final String WORKSHEET_NAME_ATTRIBUTE = "worksheet-name";
private static final String INPUT_TYPE_ATTRIBUTE = "input-type";
private static final String TYPE_ATTRIBUTE = "type";
private static final String SOURCE_ATTRIBUTE = "source";
+ private static final String SYSTEM_ID = "system-id";
+ private static final String SCHEMA_LANGUAGE = "schema-language";
@SuppressWarnings("unchecked")
@Override
@@ -34,31 +42,64 @@
source );
String type = element.getAttribute( TYPE_ATTRIBUTE );
- //emptyAttributeCheck(element.getLocalName(), type, type);
+
+ String resourceType = type == null || type.length() == 0 ? ResourceType.DRL.getName() : type;
+
factory.addPropertyValue( "resourceType",
- type == null || type.length() == 0 ? ResourceType.DRL.getName() : type );
+ resourceType );
- List<Element> childElements = DomUtils.getChildElementsByTagName( element,
- "decisiontable-conf" );
- if ( childElements != null && !childElements.isEmpty() ) {
- Element conf = childElements.get( 0 );
- DecisionTableConfigurationImpl dtableConf = new DecisionTableConfigurationImpl();
+ if ( "xsd".equals( resourceType.toLowerCase() ) ) {
+ List<Element> childElements = DomUtils.getChildElementsByTagName( element,
+ "jaxb-conf" );
+ if ( !childElements.isEmpty() ) {
+ Element conf = childElements.get( 0 );
+
+ String systemId = conf.getAttribute( SYSTEM_ID );
+ systemId = ( systemId != null && !systemId.trim().isEmpty()) ? systemId : "xsd";
+
+ String schemaLanguage = conf.getAttribute( SCHEMA_LANGUAGE );
+ schemaLanguage = ( schemaLanguage != null && !schemaLanguage.trim().isEmpty()) ? schemaLanguage : "XMLSCHEMA";
+
+ Options options = new Options();
+ options.setSchemaLanguage( Language.valueOf( schemaLanguage ) );
+
- String inputType = conf.getAttribute( INPUT_TYPE_ATTRIBUTE );
- emptyAttributeCheck( conf.getLocalName(),
- INPUT_TYPE_ATTRIBUTE,
- inputType );
- dtableConf.setInputType( DecisionTableInputType.valueOf( inputType ) );
+ JaxbConfiguration jaxbConf = KnowledgeBuilderFactory.newJaxbConfiguration( new Options(),
+ systemId );
- String worksheetName = conf.getAttribute( WORKSHEET_NAME_ATTRIBUTE );
- emptyAttributeCheck( conf.getLocalName(),
- WORKSHEET_NAME_ATTRIBUTE,
- worksheetName );
- dtableConf.setWorksheetName( worksheetName );
+ factory.addPropertyValue( "resourceConfiguration",
+ jaxbConf );
+ } else {
+ JaxbConfiguration jaxbConf = KnowledgeBuilderFactory.newJaxbConfiguration( new Options(),
+ "xsd" );
- factory.addPropertyValue( "resourceConfiguration",
- dtableConf );
+ factory.addPropertyValue( "resourceConfiguration",
+ jaxbConf );
+ }
+ } else if ( "dtable".equals( resourceType.toLowerCase() ) ) {
+ List<Element> childElements = DomUtils.getChildElementsByTagName( element,
+ "decisiontable-conf" );
+ if ( !childElements.isEmpty() ) {
+ Element conf = childElements.get( 0 );
+ DecisionTableConfigurationImpl dtableConf = new DecisionTableConfigurationImpl();
+
+ String inputType = conf.getAttribute( INPUT_TYPE_ATTRIBUTE );
+ emptyAttributeCheck( conf.getLocalName(),
+ INPUT_TYPE_ATTRIBUTE,
+ inputType );
+ dtableConf.setInputType( DecisionTableInputType.valueOf( inputType ) );
+
+ String worksheetName = conf.getAttribute( WORKSHEET_NAME_ATTRIBUTE );
+ emptyAttributeCheck( conf.getLocalName(),
+ WORKSHEET_NAME_ATTRIBUTE,
+ worksheetName );
+ dtableConf.setWorksheetName( worksheetName );
+
+ factory.addPropertyValue( "resourceConfiguration",
+ dtableConf );
+ }
}
+
return factory.getBeanDefinition();
}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd 2010-06-06 08:13:41 UTC (rev 33367)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd 2010-06-06 08:15:32 UTC (rev 33368)
@@ -31,18 +31,35 @@
<xsd:enumeration value="PKG" />
<xsd:enumeration value="BRL" />
<xsd:enumeration value="CHANGE_SET" />
+ <xsd:enumeration value="XSD" />
</xsd:restriction>
</xsd:simpleType>
+ <xsd:simpleType name="languageTypeEnum">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="DTD" />
+ <xsd:enumeration value="RELAXNG" />
+ <xsd:enumeration value="RELAXNG_COMPACT" />
+ <xsd:enumeration value="WSDL" />
+ <xsd:enumeration value="XMLSCHEMA" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
<xsd:complexType name="resourceType">
- <xsd:sequence>
- <xsd:element name="decisiontable-conf" minOccurs="0" maxOccurs="1">
+ <xsd:choice minOccurs="0" maxOccurs="1">
+ <xsd:element name="decisiontable-conf">
<xsd:complexType>
- <xsd:attribute name="input-type" use="required" />
- <xsd:attribute name="worksheet-name " use="required" />
+ <xsd:attribute name="input-type" use="required" type="xsd:string"/>
+ <xsd:attribute name="worksheet-name" use="required" type="xsd:string"/>
</xsd:complexType>
+ </xsd:element>
+ <xsd:element name="jaxb-conf">
+ <xsd:complexType>
+ <xsd:attribute name="system-id" use="optional" type="xsd:string" />
+ <xsd:attribute name="schema-language" type="languageTypeEnum" use="optional" />
+ </xsd:complexType>
</xsd:element>
- </xsd:sequence>
+ </xsd:choice>
<xsd:attribute name="source" use="required" type="xsd:string"/>
<xsd:attribute name="type" use="required" type="resourceTypeEnum"/>
</xsd:complexType>
@@ -61,10 +78,6 @@
</xsd:complexType>
</xsd:element>
- <xsd:complexType name="modelType">
- <xsd:attribute name="source" use="required" type="xsd:string"/>
- </xsd:complexType>
-
<xsd:complexType name="classesType">
<xsd:sequence>
<xsd:element name="class" type="xsd:string" />
@@ -73,11 +86,10 @@
<xsd:element name="kbase">
<xsd:complexType>
- <xsd:sequence>
- <xsd:element name="resource" type="resourceType" maxOccurs="unbounded"/>
- <xsd:element name="resource-ref" type="resourceRefType" minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="model" type="modelType" minOccurs="0" maxOccurs="unbounded"/>
- </xsd:sequence>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="resource" type="resourceType"/>
+ <xsd:element name="resource-ref" type="resourceRefType"/>
+ </xsd:choice>
<xsd:attribute name="id" use="optional" type="xsd:ID"/>
<xsd:attribute name="node" use="optional" type="xsd:string"/>
</xsd:complexType>
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml 2010-06-06 08:13:41 UTC (rev 33367)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml 2010-06-06 08:15:32 UTC (rev 33368)
@@ -9,33 +9,37 @@
http://drools.org/schema/drools-service-spring http://drools.org/schema/drools-service-spring.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
-<camelContext id="executionContext" xmlns="http://camel.apache.org/schema/spring" />
+ <camelContext id="executionContext" xmlns="http://camel.apache.org/schema/spring" />
+
+ <drools:connection id="connection1" type="local" />
+
+ <drools:execution-node id="node1" connection="connection1" />
+
+ <drools:resource id="resource1" type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+
+ <drools:kbase id="kbase1" node="node1">
+ <drools:resource source="classpath:org/drools/container/spring/IntegrationExampleTest.xls" type="DTABLE">
+ <drools:decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
+ </drools:resource>
+
+ <drools:resource-ref id="resource1"/>
+
+ <drools:resource source="classpath:org/drools/container/spring/model.xsd" type="XSD">
+ <drools:jaxb-conf system-id="xsd" />
+ </drools:resource>
+ </drools:kbase>
+
+ <drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" node="node1"/>
+
+ <drools:ksession id="ksession2" type="stateful" kbase="kbase1" node="node1"/>
+
+ <drools-service:configuration id="service-conf-1" marshaller="XSTREAM" session="ksession1">
+ <drools-service:class>org.drools.model.Person</drools-service:class>
+ </drools-service:configuration>
+
+ <drools-service:definition id="service" node="node1" camelContext="executionContext">
+ <drools-service:configuration marshaller="JAXB" session="ksession2" />
+ <drools-service:configuration-ref id="service-conf-1" />
+ </drools-service:definition>
-<drools:connection id="connection1" type="local" />
-
-<drools:execution-node id="node1" connection="connection1" />
-
-<drools:resource id="resource1" type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
-
-<drools:kbase id="kbase1" node="node1">
- <drools:resource source="classpath:org/drools/container/spring/IntegrationExampleTest.xls" type="DTABLE">
- <drools:decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
- </drools:resource>
- <drools:resource-ref id="resource1"/>
- <drools:model source="classpath:org/drools/container/spring/model.xsd" />
-</drools:kbase>
-
-<drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" node="node1"/>
-
-<drools:ksession id="ksession2" type="stateful" kbase="kbase1" node="node1"/>
-
-<drools-service:configuration id="service-conf-1" marshaller="XSTREAM" session="ksession1">
- <drools-service:class>org.drools.model.Person</drools-service:class>
-</drools-service:configuration>
-
-<drools-service:definition id="service" node="node1" camelContext="executionContext">
- <drools-service:configuration marshaller="JAXB" session="ksession2" />
- <drools-service:configuration-ref id="service-conf-1" />
-</drools-service:definition>
-
</beans>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list