org.kie.aries.blueprint.namespace.KieSessionBatchElementParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kie-aries-blueprint Show documentation
Show all versions of kie-aries-blueprint Show documentation
Drools and jBPM integration for Aries Blueprint
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* 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.kie.aries.blueprint.namespace;
import org.apache.aries.blueprint.ParserContext;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
import org.drools.core.command.runtime.SetGlobalCommand;
import org.drools.core.command.runtime.process.SignalEventCommand;
import org.drools.core.command.runtime.rule.FireAllRulesCommand;
import org.drools.core.command.runtime.rule.FireUntilHaltCommand;
import org.drools.core.command.runtime.rule.InsertObjectCommand;
import org.drools.core.util.StringUtils;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
import static org.kie.aries.blueprint.namespace.AbstractElementParser.createValue;
class KieSessionBatchElementParser {
public static final String LOGGER_ATTRIBUTE_FILE = "file";
public static final String LOGGER_ATTRIBUTE_ID = "id";
public static final String LOGGER_ATTRIBUTE_THREADED = "threaded";
public static final String LOGGER_ATTRIBUTE_LOGGER_TYPE = "loggerType";
public static final String LOGGER_ATTRIBUTE_INTERVAL = "interval";
public static MutableCollectionMetadata parseBatchElement(KieSessionElementParser kieSessionElementParser, ParserContext context, Element element){
MutableCollectionMetadata collectionMetadata = context.createMetadata(MutableCollectionMetadata.class);
collectionMetadata.setCollectionClass(ArrayList.class);
String prefix = element.getPrefix();
NodeList batchNodeList = element.getElementsByTagName(prefix+":batch");
if ( batchNodeList != null && batchNodeList.getLength() > 0){
//only one batch node allowed.
Node batchNode = batchNodeList.item(0);
for (int i=0; i < batchNode.getChildNodes().getLength(); i++){
Node n = batchNode.getChildNodes().item(i);
if (n instanceof Element) {
Element e = (Element) n;
MutableBeanMetadata componentMetadata = context.createMetadata(MutableBeanMetadata.class);
if ("insert-object".equals(e.getLocalName())) {
String ref = e.getAttribute("ref");
if (StringUtils.isEmpty(ref)){
throw new ComponentDefinitionException("'ref' attribute is missing for insert-object for bean definition ("+ kieSessionElementParser.getId(context, element)+")");
}
componentMetadata.setClassName(InsertObjectCommand.class.getName());
/*
BeanArgumentImpl argument = new BeanArgumentImpl();
argument.setIndex(0);
argument.setValue(kieSessionElementParser.createRef(context, ref));
componentMetadata.addArgument(argument);
*/
componentMetadata.addArgument(kieSessionElementParser.createRef(context, ref), null, 0);
} else if ("set-global".equals(e.getLocalName())) {
String ref = e.getAttribute("ref");
if (StringUtils.isEmpty(ref)){
throw new ComponentDefinitionException("'ref' attribute is missing for set-global for bean definition ("+ kieSessionElementParser.getId(context, element)+")");
}
String identifier = e.getAttribute("identifier");
if (StringUtils.isEmpty(identifier)){
throw new ComponentDefinitionException("'identifier' attribute is missing for set-global for bean definition ("+ kieSessionElementParser.getId(context, element)+")");
}
componentMetadata.setClassName(SetGlobalCommand.class.getName());
/*
BeanArgumentImpl argument = new BeanArgumentImpl();
argument.setIndex(0);
argument.setValue(kieSessionElementParser.createValue(context, identifier));
componentMetadata.addArgument(argument);
*/
componentMetadata.addArgument( createValue( context, identifier ), null, 0 );
//argument = new BeanArgumentImpl();
//argument.setIndex(1);
//argument.setValue(kieSessionElementParser.createRef(context, ref));
//componentMetadata.addArgument(argument);
componentMetadata.addArgument(kieSessionElementParser.createRef(context, ref), null, 1);
} else if ("fire-until-halt".equals(e.getLocalName())) {
componentMetadata.setClassName(FireUntilHaltCommand.class.getName());
} else if ("fire-all-rules".equals(e.getLocalName())) {
componentMetadata.setClassName(FireAllRulesCommand.class.getName());
String max = e.getAttribute("max");
if (!StringUtils.isEmpty(max)) {
try {
// BeanArgumentImpl argument = new BeanArgumentImpl();
// argument.setIndex(0);
// argument.setValue(kieSessionElementParser.createValue(context, Integer.parseInt(max)));
// componentMetadata.addArgument(argument);
componentMetadata.addArgument( createValue(context, Integer.parseInt(max)), null, 0 );
}catch (NumberFormatException e1){
//xsd will prevent this from happening.
}
}
} else if ("start-process".equals(e.getLocalName())) {
// String processId = e.getAttribute("process-id");
// if (StringUtils.isEmpty(processId)) {
// throw new ComponentDefinitionException("start-process must specify a process-id for bean definition ("+ kieSessionElementParser.getId(context, element)+")");
// }
// BeanArgumentImpl argument = new BeanArgumentImpl();
// try{
// argument.setValue(kieSessionElementParser.createValue(context, Integer.parseInt(processId)));
// }catch (NumberFormatException e1){
// //xsd will prevent this from happening.
// }
// componentMetadata.addArgument(argument);
//
// List params = DomUtils.getChildElementsByTagName(e, "parameter");
} else if ("signal-event".equals(e.getLocalName())) {
componentMetadata.setClassName(SignalEventCommand.class.getName());
String processInstanceId = e.getAttribute("process-instance-id");
//BeanArgumentImpl argument = null;
int index = 0;
if (!StringUtils.isEmpty(processInstanceId)) {
//argument = new BeanArgumentImpl();
try{
// argument.setValue(kieSessionElementParser.createValue(context, Integer.parseInt(processInstanceId)));
componentMetadata.addArgument( createValue( context, Integer.parseInt( processInstanceId ) ), null, 0 );
} catch (NumberFormatException e1){
//xsd will prevent this from happening.
}
// componentMetadata.addArgument(argument);
index++;
}
String ref = e.getAttribute("ref");
if (StringUtils.isEmpty(ref)){
throw new ComponentDefinitionException("'ref' attribute is missing for signal-event for bean definition ("+ kieSessionElementParser.getId(context, element)+")");
}
String eventType = e.getAttribute("event-type");
if (StringUtils.isEmpty(eventType)){
throw new ComponentDefinitionException("'event-type' attribute is missing for signal-event for bean definition ("+ kieSessionElementParser.getId(context, element)+")");
}
/*argument = new BeanArgumentImpl();
argument.setIndex(index++);
argument.setValue(kieSessionElementParser.createRef(context, ref)); */
componentMetadata.addArgument( createValue( context, ref ), null, index++ );
/*argument = new BeanArgumentImpl();
argument.setIndex(index++);
argument.setValue(kieSessionElementParser.createValue(context, eventType));
componentMetadata.addArgument(argument);*/
componentMetadata.addArgument( createValue( context, eventType ), null, index++ );
} else {
throw new ComponentDefinitionException("Unknown child element found in batch element.");
}
collectionMetadata.addValue(componentMetadata);
}
}
}
return collectionMetadata;
}
private static Element getFirstElement(NodeList list) {
for (int j = 0, lengthj = list.getLength(); j < lengthj; j++) {
if (list.item(j) instanceof Element) {
return (Element) list.item(j);
}
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy