/** * Copyright (C) 2014 Stratio (http://stratio.com) * * 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 com.stratio.decision.drools; import java.util.HashMap; import java.util.Map; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.stratio.decision.drools.configuration.DroolsConfigurationBean; import com.stratio.decision.drools.configuration.DroolsConfigurationGroupBean; //import org.kie.api.builder.KieScanner; /** * Created by josepablofernandez on 2/12/15. */ public class DroolsConnectionContainer { private static final Logger logger = LoggerFactory.getLogger(DroolsConnectionContainer.class); private Map<String, DroolsInstace> groupContainers; private Map<String, DroolsConfigurationGroupBean> groupConfigurations; public DroolsConnectionContainer(DroolsConfigurationBean droolsConfigurationBean) { this.groupContainers = configGroupsContainers(droolsConfigurationBean); this.groupConfigurations = droolsConfigurationBean.getGroups(); } private Map<String, String> configGroupsSessionType(DroolsConfigurationBean droolsConfigurationBean) { Map<String, String> groupSessionTypes = new HashMap<>(); if (droolsConfigurationBean != null){ for (String groupName : droolsConfigurationBean.getListGroups()){ DroolsConfigurationGroupBean groupConfigBean = droolsConfigurationBean.getGroups().get(groupName); groupSessionTypes.put(groupName, groupConfigBean.getSessionType()); } } return groupSessionTypes; } private Map<String, DroolsInstace> configGroupsContainers(DroolsConfigurationBean droolsConfigurationBean){ Map<String, DroolsInstace> groupContainers = new HashMap<>(); if (droolsConfigurationBean != null && droolsConfigurationBean.getIsEnabled()) { if (droolsConfigurationBean.getListGroups() == null){ logger.warn("Drools Configuration is not found. Please, check your configuration if you want to use " + "the send to drools action"); return groupContainers; } KieServices ks = KieServices.Factory.get(); for (String groupName : droolsConfigurationBean.getListGroups()){ DroolsConfigurationGroupBean groupConfigBean = droolsConfigurationBean.getGroups().get(groupName); KieContainer groupContainer = null; try { groupContainer = ks .newKieContainer( ks.newReleaseId(groupConfigBean.getGroupId(), groupConfigBean.getArtifactId(), groupConfigBean.getVersion()) ); }catch (Exception e){ logger.error("Error creating Drools KieContainer: " + e.getMessage()); logger.error("Please, check your Drools Configuration if you want to use the send to drools action" + "."); } if (groupContainer != null) { DroolsInstace instance = new DroolsInstace(groupContainer, groupConfigBean.getSessionName(), groupConfigBean.getSessionType()); instance.setkScanner(ks.newKieScanner(groupContainer)); instance.getkScanner().start(groupConfigBean.getScanFrequency()); groupContainers.put(groupName, instance); } else { if (logger.isDebugEnabled()){ logger.debug("It was not possible to create a KieContainer for group {}", groupName); } } } } else { logger.info("Drools integration is not enabled"); } return groupContainers; } public Map<String, DroolsInstace> getGroupContainers() { return groupContainers; } public DroolsInstace getGroupContainer(String groupName) { return groupContainers.get(groupName); } public Map<String, DroolsConfigurationGroupBean> getGroupConfigurations(){ return groupConfigurations; } public DroolsConfigurationGroupBean getGroupConfiguration(String groupName) { return groupConfigurations.get(groupName); } }