/*
* 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.factorybeans;
import org.kie.api.KieServices;
import org.kie.api.command.Command;
import org.kie.api.event.KieRuntimeEventManager;
import org.kie.api.event.process.ProcessEventListener;
import org.kie.api.event.rule.AgendaEventListener;
import org.kie.api.event.rule.RuleRuntimeEventListener;
import org.kie.api.logger.KieLoggers;
import org.kie.api.logger.KieRuntimeLogger;
import org.kie.api.runtime.KieSession;
import java.util.List;
public class KieSessionFactoryBeanHelper {
protected static void addListeners(KieRuntimeEventManager kieRuntimeEventManager, List<KieListenerAdaptor> listeners){
if (listeners == null || listeners.isEmpty()){
//do nothing
return;
}
for (KieListenerAdaptor listenerConfig : listeners){
String type = listenerConfig.getType();
if ( type.equalsIgnoreCase(RuleRuntimeEventListener.class.getName())){
kieRuntimeEventManager.addEventListener((RuleRuntimeEventListener) listenerConfig.getObjectRef());
} else if ( type.equalsIgnoreCase(ProcessEventListener.class.getName())){
kieRuntimeEventManager.addEventListener((ProcessEventListener) listenerConfig.getObjectRef());
} else if ( type.equalsIgnoreCase(AgendaEventListener.class.getName())){
kieRuntimeEventManager.addEventListener((AgendaEventListener) listenerConfig.getObjectRef());
}
}
}
protected static void attachLoggers(KieRuntimeEventManager ksession, List<KieLoggerAdaptor> loggerAdaptors) {
if (loggerAdaptors != null && !loggerAdaptors.isEmpty()) {
KieServices ks = KieServices.Factory.get();
KieLoggers loggers = ks.getLoggers();
for (KieLoggerAdaptor adaptor : loggerAdaptors) {
KieRuntimeLogger runtimeLogger;
switch (KieLoggerAdaptor.KNOWLEDGE_LOGGER_TYPE.valueOf(adaptor.getLoggerType())) {
case LOGGER_TYPE_FILE:
runtimeLogger = loggers.newFileLogger(ksession, adaptor.getFile());
adaptor.setRuntimeLogger(runtimeLogger);
break;
case LOGGER_TYPE_THREADED_FILE:
runtimeLogger = loggers.newThreadedFileLogger(ksession, adaptor.getFile(), adaptor.getInterval());
adaptor.setRuntimeLogger(runtimeLogger);
break;
case LOGGER_TYPE_CONSOLE:
runtimeLogger = loggers.newConsoleLogger(ksession);
adaptor.setRuntimeLogger(runtimeLogger);
break;
}
}
}
}
public static void executeCommands(KieSession kieSession, List<?> commands) {
if ( commands != null && kieSession != null) {
for (Object cmd : commands) {
kieSession.execute((Command)cmd);
}
}
}
}