/* * 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.drools.compiler.kproject.ReleaseIdImpl; import org.drools.core.impl.EnvironmentFactory; import org.drools.core.marshalling.impl.ClassObjectMarshallingStrategyAcceptor; import org.drools.persistence.jpa.KnowledgeStoreServiceImpl; import org.drools.persistence.jpa.marshaller.JPAPlaceholderResolverStrategy; import org.kie.api.KieBase; import org.kie.api.builder.KieScanner; import org.kie.api.builder.ReleaseId; import org.kie.api.marshalling.ObjectMarshallingStrategy; import org.kie.api.persistence.jpa.KieStoreServices; import org.kie.api.runtime.Environment; import org.kie.api.runtime.EnvironmentName; import org.kie.aries.blueprint.helpers.JPAPlaceholderResolverStrategyHelper; import java.util.HashMap; import java.util.List; import java.util.Map; public class KieObjectsFactoryBean { static final ImportInjector importInjector = new ImportInjector(); public static Object fetchKBase(String id, ReleaseId releaseId, KBaseOptions kbaseOptions) { return new KieBaseResolver(releaseId, id); } public static Object fetchKContainer(ReleaseId releaseId){ return new KieContainerResolver(releaseId); } public static Object createKieSessionRef(String id, ReleaseId releaseId, List<KieListenerAdaptor> listeners, List<KieLoggerAdaptor> loggers, List<?> commands){ return new KieSessionRefResolver( releaseId, id, listeners, loggers, commands ); } public static Object createKieSession(String id, ReleaseId releaseId, List<KieListenerAdaptor> listeners, List<KieLoggerAdaptor> loggers, List<?> commands, KSessionOptions kSessionOptions){ return new KieSessionResolver( releaseId, listeners, loggers, commands, kSessionOptions ); } public static KieStoreServices createKieStore() throws Exception { return new KnowledgeStoreServiceImpl(); } public static ReleaseId createReleaseId(String id, String groupId, String artifactId, String version){ return new ReleaseIdImpl(groupId, artifactId, version); } public static Object createImport(String releaseIdName, ReleaseId releaseId, boolean enableScanner, long scannerInterval) { return new KieImportResolver( releaseIdName, releaseId, enableScanner, scannerInterval ); } public static Object createImportedKieSession( String ksessionName ) { KieImportSessionResolver resolver = new KieImportSessionResolver( ksessionName ); importInjector.registerSessionResolver( ksessionName, resolver ); return resolver; } public static Object createImportedKieBase( String kbaseName ) { KieImportBaseResolver resolver = new KieImportBaseResolver( kbaseName ); importInjector.registerBaseResolver( kbaseName, resolver ); return resolver; } public static Object createImportedKieScanner( String kscannerName ) { KieImportScannerResolver resolver = new KieImportScannerResolver( kscannerName ); importInjector.registerScannerResolver( kscannerName, resolver ); return resolver; } public static Environment createEnvironment(String id, HashMap<String, Object> parameters, List<Object> marshallingStrategies){ Environment environment = EnvironmentFactory.newEnvironment(); if ( parameters != null) { for (String key : parameters.keySet()){ environment.set(key, parameters.get(key)); } } for (int i=0; i<marshallingStrategies.size(); i++){ Object object = marshallingStrategies.get(i); if ( object instanceof JPAPlaceholderResolverStrategyHelper) { JPAPlaceholderResolverStrategy jpaPlaceholderResolverStrategy; Environment refEnv = ((JPAPlaceholderResolverStrategyHelper)object).getEnvironment(); if ( refEnv == null) { jpaPlaceholderResolverStrategy = new JPAPlaceholderResolverStrategy(environment); } else { jpaPlaceholderResolverStrategy = new JPAPlaceholderResolverStrategy(refEnv); } marshallingStrategies.set(i, jpaPlaceholderResolverStrategy); break; } } if ( marshallingStrategies != null){ environment.set(EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, marshallingStrategies.toArray(new ObjectMarshallingStrategy[]{})); } return environment; } public static ClassObjectMarshallingStrategyAcceptor createDefaultAcceptor(){ return ClassObjectMarshallingStrategyAcceptor.DEFAULT; } public static class ImportInjector { private Map<String, KieImportSessionResolver> sessionResolvers = new HashMap<String, KieImportSessionResolver>(); private Map<String, KieImportBaseResolver> baseResolvers = new HashMap<String, KieImportBaseResolver>(); private Map<String, KieImportScannerResolver> scannerResolvers = new HashMap<String, KieImportScannerResolver>(); public void registerSessionResolver( String name, KieImportSessionResolver resolver ) { sessionResolvers.put( name, resolver ); } public void registerBaseResolver( String name, KieImportBaseResolver resolver ) { baseResolvers.put( name, resolver ); } public void registerScannerResolver( String name, KieImportScannerResolver resolver ) { scannerResolvers.put( name, resolver ); } public void wireSession(String name, Object kieSession) { KieImportSessionResolver resolver = sessionResolvers.get(name); if (resolver != null) { resolver.setSession( kieSession ); } } public void wireBase(String name, KieBase kieBase ) { KieImportBaseResolver resolver = baseResolvers.get(name); if (resolver != null) { resolver.setBase( kieBase ); } } public void wireScanner(String name, KieScanner kieScanner ) { KieImportScannerResolver resolver = scannerResolvers.get(name); if (resolver != null) { resolver.setScanner( kieScanner ); } } } }