[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