/* 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.activiti.crystalball.simulator.impl;
import org.activiti.crystalball.simulator.RuntimeService;
import org.activiti.crystalball.simulator.SimulationEngine;
import org.activiti.crystalball.simulator.impl.cfg.SimulationEngineConfigurationImpl;
import org.activiti.crystalball.simulator.impl.cfg.TransactionContextFactory;
import org.activiti.crystalball.simulator.impl.db.DbSimulatorSqlSession;
import org.activiti.crystalball.simulator.impl.db.DbSimulatorSqlSessionFactory;
import org.activiti.crystalball.simulator.impl.interceptor.CommandExecutor;
import org.activiti.crystalball.simulator.impl.simulationexecutor.JobExecutor;
import org.activiti.engine.impl.el.ExpressionManager;
import org.activiti.engine.impl.interceptor.SessionFactory;
import java.util.Map;
import java.util.logging.Logger;
public class SimulationEngineImpl implements SimulationEngine {
private static Logger log = Logger.getLogger(SimulationEngineImpl.class.getName());
protected String name;
protected String databaseSchemaUpdate;
protected RuntimeService runtimeService;
protected CommandExecutor commandExecutor;
protected Map<Class<?>, SessionFactory> sessionFactories;
protected ExpressionManager expressionManager;
protected JobExecutor jobExecutor;
protected TransactionContextFactory transactionContextFactory;
protected SimulationEngineConfigurationImpl simulationEngineConfiguration;
public SimulationEngineImpl(SimulationEngineConfigurationImpl simulationEngineConfiguration) {
this.simulationEngineConfiguration = simulationEngineConfiguration;
this.name = simulationEngineConfiguration.getProcessEngineName();
this.runtimeService = simulationEngineConfiguration.getRuntimeService();
this.databaseSchemaUpdate = simulationEngineConfiguration.getDatabaseSchemaUpdate();
this.jobExecutor = simulationEngineConfiguration.getJobExecutor();
this.commandExecutor = simulationEngineConfiguration.getCommandExecutorTxRequired();
this.sessionFactories = simulationEngineConfiguration.getSessionFactories();
this.transactionContextFactory = simulationEngineConfiguration.getTransactionContextFactory();
commandExecutor.execute(new SchemaOperationsSimulationEngineBuild());
if (name == null) {
log.info("default activiti SimulationEngine created");
} else {
log.info("SimulationEngine " + name + " created");
}
if ((jobExecutor != null) && (jobExecutor.isAutoActivate())) {
jobExecutor.start();
}
}
public void close() {
if ((jobExecutor != null) && (jobExecutor.isActive())) {
jobExecutor.shutdown();
}
commandExecutor.execute(new SchemaOperationSimulationEngineClose());
}
public DbSimulatorSqlSessionFactory getDbSqlSessionFactory() {
return (DbSimulatorSqlSessionFactory) sessionFactories.get(DbSimulatorSqlSession.class);
}
// getters and setters //////////////////////////////////////////////////////
public String getName() {
return name;
}
@Override
public RuntimeService getRuntimeService() {
return runtimeService;
}
}