![JAR search and dependency download from the Maven repository](/logo.png)
org.drools.container.spring.namespace.KnowledgeBaseDefinitionParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of drools-spring Show documentation
Show all versions of drools-spring Show documentation
Drools and jBPM integration for Spring.
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.container.spring.namespace;
import java.util.List;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseConfiguration.AssertBehaviour;
import org.drools.conf.EventProcessingOption;
import org.drools.container.spring.beans.KnowledgeBaseBeanFactory;
import org.drools.core.util.StringUtils;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
public class KnowledgeBaseDefinitionParser extends AbstractBeanDefinitionParser {
private static final String EXECUTION_NODE_ATTRIBUTE = "node";
private static final String ADVANCED_PROCESS_RULE_INTEGRATED = "advanced-process-rule-integration";
private static final String MULTITHREADS = "multithread";
private static final String MAX_THREADS = "max-threads";
private static final String MBEABS = "mbeans";
private static final String EVENT_PROCESSING_MODE = "event-processing-mode";
private static final String ASSERT_BEHAVIOR = "assert-behavior";
private static final String ACCUMULATE_FUNCTIONS = "accumulate-functions";
private static final String ACCUMULATE_FUNCTION = "accumulate-function";
private static final String EVALUATORS = "evaluators";
private static final String EVALUATOR = "evaluator";
private static final String CONSEQUENCE_EXCEPTION_HANDLER = "consequenceExceptionHandler";
@SuppressWarnings("unchecked")
@Override
protected AbstractBeanDefinition parseInternal(Element element,
ParserContext parserContext) {
BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition( KnowledgeBaseBeanFactory.class );
Element kbaseConf = DomUtils.getChildElementByTagName( element,
"configuration" );
if ( kbaseConf != null ) {
BeanDefinitionBuilder rbaseConfBuilder = BeanDefinitionBuilder.rootBeanDefinition( RuleBaseConfiguration.class );
Element e = DomUtils.getChildElementByTagName( kbaseConf,
ADVANCED_PROCESS_RULE_INTEGRATED );
if ( e != null && !StringUtils.isEmpty( e.getAttribute( "enabled" ) ) ) {
rbaseConfBuilder.addPropertyValue( "advancedProcessRuleIntegration",
Boolean.parseBoolean( e.getAttribute( "enabled" ) ) );
}
e = DomUtils.getChildElementByTagName( kbaseConf,
MULTITHREADS );
if ( e != null && !StringUtils.isEmpty( e.getAttribute( "enabled" ) ) ) {
rbaseConfBuilder.addPropertyValue( "multithreadEvaluation",
Boolean.parseBoolean( e.getAttribute( "enabled" ) ) );
if ( !StringUtils.isEmpty( e.getAttribute( MAX_THREADS ) ) ) {
rbaseConfBuilder.addPropertyValue( "maxThreads",
Integer.parseInt( e.getAttribute( MAX_THREADS ) ) );
}
}
e = DomUtils.getChildElementByTagName( kbaseConf,
MBEABS );
if ( e != null && !StringUtils.isEmpty( e.getAttribute( "enabled" ) ) ) {
rbaseConfBuilder.addPropertyValue( "MBeansEnabled",
Boolean.parseBoolean( e.getAttribute( "enabled" ) ) );
}
e = DomUtils.getChildElementByTagName( kbaseConf,
EVENT_PROCESSING_MODE );
if ( e != null && !StringUtils.isEmpty( e.getAttribute( "mode" ) ) ) {
rbaseConfBuilder.addPropertyValue( "eventProcessingMode",
EventProcessingOption.valueOf( e.getAttribute( "mode" ) ) );
}
e = DomUtils.getChildElementByTagName( kbaseConf,
ASSERT_BEHAVIOR );
if ( e != null && !StringUtils.isEmpty( e.getAttribute( "mode" ) ) ) {
rbaseConfBuilder.addPropertyValue( "assertBehaviour",
AssertBehaviour.determineAssertBehaviour( e.getAttribute( "mode" ) ) );
}
e = DomUtils.getChildElementByTagName( kbaseConf,
ACCUMULATE_FUNCTIONS );
if ( e != null ) {
List 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 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 );
}
}
e = DomUtils.getChildElementByTagName( kbaseConf,
CONSEQUENCE_EXCEPTION_HANDLER );
if ( e != null && !StringUtils.isEmpty( e.getAttribute( "handler" ) ) ) {
rbaseConfBuilder.addPropertyValue( "consequenceExceptionHandler",
e.getAttribute( "handler" ) );
}
factory.addPropertyValue( "conf",
rbaseConfBuilder.getBeanDefinition() );
}
String nodeRef = element.getAttribute( EXECUTION_NODE_ATTRIBUTE );
if ( nodeRef != null && nodeRef.length() > 0 ) {
factory.addPropertyReference( EXECUTION_NODE_ATTRIBUTE,
nodeRef );
}
ManagedList resources = getResources( element,
parserContext,
factory );
if ( resources != null ) {
factory.addPropertyValue( "resources",
resources );
}
return factory.getBeanDefinition();
}
@SuppressWarnings("unchecked")
public static ManagedList getResources(Element element,
ParserContext parserContext,
BeanDefinitionBuilder factory) {
Element resourcesElm = DomUtils.getChildElementByTagName( element,
"resources" );
ManagedList resources = null;
if ( resourcesElm != null ) {
List childElements = DomUtils.getChildElementsByTagName( resourcesElm,
"resource" );
if ( childElements != null && !childElements.isEmpty() ) {
resources = new ManagedList();
for ( Element childResource : childElements ) {
BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement( childResource,
factory.getBeanDefinition() );
resources.add( resourceDefinition );
}
}
}
return resources;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy