[jboss-svn-commits] JBL Code SVN: r33967 - in labs/jbossrules/trunk/drools-container/drools-spring/src: main/java/org/drools/container/spring/namespace and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 16 20:39:40 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-07-16 20:39:40 -0400 (Fri, 16 Jul 2010)
New Revision: 33967

Added:
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockAccumulateFunction.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockEvaluatorDefinition.java
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/namespace/KnowledgeBaseDefinitionParser.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/session-conf-beans.xml
Log:
JBRULES-1434 Drools Spring
-added conf support for evaluators and accumulator functions

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-07-17 00:31:54 UTC (rev 33966)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java	2010-07-17 00:39:40 UTC (rev 33967)
@@ -5,6 +5,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import javax.xml.bind.util.JAXBResult;
 
@@ -14,15 +15,23 @@
 import org.drools.RuleBaseConfiguration;
 import org.drools.builder.JaxbConfiguration;
 import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
 import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.KnowledgeBuilderFactoryService;
 import org.drools.builder.ResourceType;
+import org.drools.builder.conf.AccumulateFunctionOption;
+import org.drools.builder.conf.EvaluatorOption;
 import org.drools.builder.conf.impl.JaxbConfigurationImpl;
 import org.drools.builder.help.KnowledgeBuilderHelper;
+import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.grid.ExecutionNode;
 import org.drools.grid.local.LocalConnection;
 import org.drools.impl.KnowledgeBaseImpl;
 import org.drools.process.core.WorkDefinition;
+import org.drools.runtime.rule.AccumulateFunction;
+import org.drools.runtime.rule.Evaluator;
+import org.drools.runtime.rule.EvaluatorDefinition;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -38,6 +47,8 @@
     InitializingBean {
 
     private KnowledgeBaseConfiguration  conf;
+    private Map<String, AccumulateFunction>         accumulateFunctions;
+    private Map<String, EvaluatorDefinition>         evaluators;
     
     private KnowledgeBase               kbase;
     private ExecutionNode               node;
@@ -56,11 +67,24 @@
     }
 
     public void afterPropertiesSet() throws Exception {
-        if ( node == null ) {
-            node = new LocalConnection().getExecutionNode();
+        if ( this.node == null ) {
+            this.node = new LocalConnection().getExecutionNode();
+        }       
+        
+        PackageBuilderConfiguration kconf = (PackageBuilderConfiguration)  KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+        if (this.accumulateFunctions != null && !this.accumulateFunctions.isEmpty()) {            
+            for ( Entry<String, AccumulateFunction> entry : this.accumulateFunctions.entrySet() ) {
+                kconf.setOption( AccumulateFunctionOption.get( entry.getKey(), entry.getValue()) );
+            }
         }
+        
+        if (this.evaluators != null && !this.evaluators.isEmpty()) {            
+            for ( Entry<String, EvaluatorDefinition> entry : this.evaluators.entrySet() ) {
+                kconf.setOption( EvaluatorOption.get( entry.getKey(), entry.getValue()) );
+            }
+        }        
          
-        KnowledgeBuilder kbuilder = node.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
+        KnowledgeBuilder kbuilder = node.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder(kconf);
         if ( this.conf != null ) {
             kbase = node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase(conf);
         } else {
@@ -97,8 +121,25 @@
             kbaseImpl.jaxbClasses.add( conf.getClasses() );            
         }
 
-    }   
+    }
+    
 
+    public Map<String, AccumulateFunction> getAccumulateFunctions() {
+        return accumulateFunctions;
+    }
+
+    public void setAccumulateFunctions(Map<String, AccumulateFunction> accumulateFunctions) {
+        this.accumulateFunctions = accumulateFunctions;
+    }
+
+    public Map<String, EvaluatorDefinition> getEvaluators() {
+        return evaluators;
+    }
+
+    public void setEvaluators(Map<String, EvaluatorDefinition> evaluators) {
+        this.evaluators = evaluators;
+    }
+
     public KnowledgeBaseConfiguration getConf() {
         return conf;
     }

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-07-17 00:31:54 UTC (rev 33966)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java	2010-07-17 00:39:40 UTC (rev 33967)
@@ -30,9 +30,13 @@
 
     private static final String EVENT_PROCESSING_MODE            = "event-processing-mode";
     
-    private static final String WORK_ITEM_DEFINITIONS            = "work-item-definitions";
+    private static final String ACCUMULATE_FUNCTIONS             = "accumulate-functions";
     
-    private static final String WORK_ITEM_DEFINITION            = "work-item-definition";
+    private static final String ACCUMULATE_FUNCTION              = "accumulate-function";
+    
+    private static final String EVALUATORS                       = "evaluators";
+    
+    private static final String EVALUATOR                        = "evaluator";    
 
     @SuppressWarnings("unchecked")
     @Override
@@ -66,6 +70,32 @@
                 rbaseConfBuilder.addPropertyValue( "eventProcessingMode", EventProcessingOption.valueOf( e.getAttribute( "mode" ) ) );
             }                
             
+            e = DomUtils.getChildElementByTagName(kbaseConf, ACCUMULATE_FUNCTIONS);
+            if ( e != null ) {
+                List<Element> children = DomUtils.getChildElementsByTagName( e, ACCUMULATE_FUNCTION );
+                if ( children != null && !children.isEmpty() ) {
+                    ManagedMap functions = new ManagedMap();
+                    for ( Element child : children ) {
+                        functions.put(  child.getAttribute( "name" ),
+                                        new RuntimeBeanReference( child.getAttribute( "ref" ) ) );
+                    }
+                    factory.addPropertyValue( "accumulateFunctions", functions );                    
+                }
+            }
+            
+            e = DomUtils.getChildElementByTagName(kbaseConf, EVALUATORS);
+            if ( e != null ) {
+                List<Element> children = DomUtils.getChildElementsByTagName( e, EVALUATOR );
+                if ( children != null && !children.isEmpty() ) {
+                    ManagedMap evaluators = new ManagedMap();
+                    for ( Element child : children ) {
+                        evaluators.put(  child.getAttribute( "name" ),
+                                        new RuntimeBeanReference( child.getAttribute( "ref" ) ) );
+                    }
+                    factory.addPropertyValue( "evaluators", evaluators );                    
+                }
+            }            
+            
             factory.addPropertyValue( "conf", rbaseConfBuilder.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-07-17 00:31:54 UTC (rev 33966)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd	2010-07-17 00:39:40 UTC (rev 33967)
@@ -77,7 +77,33 @@
 							        <xsd:attribute name="mode" type="cloudModeEnum"/>
 							    </xsd:complexType>	                        
 	                        </xsd:element>	
-                        	                        
+
+	                        <xsd:element name="accumulate-functions" minOccurs="0">
+				                <xsd:complexType>
+				                    <xsd:choice>
+				                	    <xsd:element name="accumulate-function" minOccurs="0" maxOccurs="unbounded">
+					                	    <xsd:complexType>
+					                	        <xsd:attribute name="name" use="required" type="xsd:string"/>
+					                	        <xsd:attribute name="ref" use="required" type="xsd:string"/>
+					                	    </xsd:complexType>
+				                	    </xsd:element>				                	    
+				                	</xsd:choice>
+							    </xsd:complexType>	                        
+	                        </xsd:element>	
+	                        
+	                        <xsd:element name="evaluators" minOccurs="0">
+				                <xsd:complexType>
+				                    <xsd:choice>
+				                	    <xsd:element name="evaluator" minOccurs="0" maxOccurs="unbounded">
+					                	    <xsd:complexType>
+					                	        <xsd:attribute name="name" use="required" type="xsd:string"/>
+					                	        <xsd:attribute name="ref" use="required" type="xsd:string"/>
+					                	    </xsd:complexType>
+				                	    </xsd:element>				                	    
+				                	</xsd:choice>
+							    </xsd:complexType>	                        
+	                        </xsd:element>		                        
+	                                                	                        
 						</xsd:all>
 					</xsd:complexType>				
 				</xsd:element>	

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockAccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockAccumulateFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockAccumulateFunction.java	2010-07-17 00:39:40 UTC (rev 33967)
@@ -0,0 +1,55 @@
+package org.drools.container.spring;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+
+import org.drools.runtime.rule.AccumulateFunction;
+
+public class MockAccumulateFunction implements AccumulateFunction {
+
+    public void accumulate(Serializable context,
+                           Object value) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public Serializable createContext() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object getResult(Serializable context) throws Exception {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void init(Serializable context) throws Exception {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void reverse(Serializable context,
+                        Object value) throws Exception {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public boolean supportsReverse() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        // TODO Auto-generated method stub
+        
+    }
+
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/MockEvaluatorDefinition.java	2010-07-17 00:39:40 UTC (rev 33967)
@@ -0,0 +1,66 @@
+package org.drools.container.spring;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.spi.Evaluator;
+
+public class MockEvaluatorDefinition implements EvaluatorDefinition {
+
+    public Evaluator getEvaluator(ValueType type,
+                                  String operatorId,
+                                  boolean isNegated,
+                                  String parameterText,
+                                  Target leftTarget,
+                                  Target rightTarget) {
+        return null;
+    }
+
+    public Evaluator getEvaluator(ValueType type,
+                                  String operatorId,
+                                  boolean isNegated,
+                                  String parameterText) {
+        return null;
+    }
+
+    public Evaluator getEvaluator(ValueType type,
+                                  Operator operator,
+                                  String parameterText) {
+        return null;
+    }
+
+    public Evaluator getEvaluator(ValueType type,
+                                  Operator operator) {
+        return null;
+    }
+
+    public String[] getEvaluatorIds() {
+        return new String[] { "id1", "id2" };
+    }
+
+    public Target getTarget() {
+        return null;
+    }
+
+    public boolean isNegatable() {
+        return false;
+    }
+
+    public boolean supportsType(ValueType type) {
+        return false;
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+  
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml	2010-07-17 00:31:54 UTC (rev 33966)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml	2010-07-17 00:39:40 UTC (rev 33967)
@@ -11,8 +11,14 @@
    
    <bean id="rwih1" class="org.drools.process.instance.impl.humantask.HumanTaskHandler" />
    
-   <bean id="rwih2" class="org.drools.process.instance.impl.humantask.HumanTaskHandler" />  
+   <bean id="rwih2" class="org.drools.process.instance.impl.humantask.HumanTaskHandler" />
+   
+   <bean id="raf1" class="org.drools.container.spring.MockAccumulateFunction" />
+   <bean id="raf2" class="org.drools.container.spring.MockAccumulateFunction" />    
 
+   <bean id="red1" class="org.drools.container.spring.MockEvaluatorDefinition" />
+   <bean id="red2" class="org.drools.container.spring.MockEvaluatorDefinition" />
+
 	<drools:kbase id="kbase1">
 	   <drools:resources>
 	      <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
@@ -27,6 +33,16 @@
 	      
 	      <drools:event-processing-mode mode="STREAM" />
 	      
+	      <drools:accumulate-functions>
+	         <drools:accumulate-function name="af1" ref="raf1" />
+	         <drools:accumulate-function name="af2" ref="raf2" />
+	      </drools:accumulate-functions>
+	      
+	      <drools:evaluators>
+	         <drools:evaluator name="ed1" ref="red1" />
+	         <drools:evaluator name="ed2" ref="red2" />
+	      </drools:evaluators>	      
+	      
 	   </drools:configuration>
 	</drools:kbase>
 	



More information about the jboss-svn-commits mailing list