Package com.founder.fix.fixflow.core.impl

Source Code of com.founder.fix.fixflow.core.impl.ProcessEngineConfigurationImpl

/**
* Copyright 1996-2013 Founder International Co.,Ltd.
*
* 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.
*
* @author kenshin
*/
package com.founder.fix.fixflow.core.impl;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

import javax.jms.JMSException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.founder.fix.bpmn2extensions.coreconfig.AllUserInfo;
import com.founder.fix.bpmn2extensions.coreconfig.AssignPolicyConfig;
import com.founder.fix.bpmn2extensions.coreconfig.ConnectionManagementInstanceConfig;
import com.founder.fix.bpmn2extensions.coreconfig.CoreconfigPackage;
import com.founder.fix.bpmn2extensions.coreconfig.DBType;
import com.founder.fix.bpmn2extensions.coreconfig.DataBase;
import com.founder.fix.bpmn2extensions.coreconfig.EventSubscriptionConfig;
import com.founder.fix.bpmn2extensions.coreconfig.ExpandClass;
import com.founder.fix.bpmn2extensions.coreconfig.ExpandClassConfig;
import com.founder.fix.bpmn2extensions.coreconfig.ExpandCmdConfig;
import com.founder.fix.bpmn2extensions.coreconfig.FixFlowConfig;
import com.founder.fix.bpmn2extensions.coreconfig.GroupInfo;
import com.founder.fix.bpmn2extensions.coreconfig.ImportDataVariableConfig;
import com.founder.fix.bpmn2extensions.coreconfig.InternationalizationConfig;
import com.founder.fix.bpmn2extensions.coreconfig.PigeonholeConfig;
import com.founder.fix.bpmn2extensions.coreconfig.Priority;
import com.founder.fix.bpmn2extensions.coreconfig.PriorityConfig;
import com.founder.fix.bpmn2extensions.coreconfig.QuartzConfig;
import com.founder.fix.bpmn2extensions.coreconfig.ResourcePath;
import com.founder.fix.bpmn2extensions.coreconfig.ResourcePathConfig;
import com.founder.fix.bpmn2extensions.coreconfig.RulesResource;
import com.founder.fix.bpmn2extensions.coreconfig.RulesResourceConfig;
import com.founder.fix.bpmn2extensions.coreconfig.ScriptLanguageConfig;
import com.founder.fix.bpmn2extensions.coreconfig.SysMailConfig;
import com.founder.fix.bpmn2extensions.coreconfig.TaskCommandConfig;
import com.founder.fix.bpmn2extensions.coreconfig.TaskCommandDef;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.BusinessRules;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Column;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.DataBaseTable;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Delete;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Insert;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Result;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.ResultMap;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Rule;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Select;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.SqlmappingconfigFactory;
import com.founder.fix.bpmn2extensions.sqlmappingconfig.Update;
import com.founder.fix.bpmn2extensions.variableconfig.DataVariableConfig;
import com.founder.fix.bpmn2extensions.variableconfig.VariableconfigPackage;
import com.founder.fix.fixflow.core.ConnectionManagement;
import com.founder.fix.fixflow.core.FormService;
import com.founder.fix.fixflow.core.HistoryService;
import com.founder.fix.fixflow.core.IdentityService;
import com.founder.fix.fixflow.core.ManagementService;
import com.founder.fix.fixflow.core.ModelService;
import com.founder.fix.fixflow.core.ProcessEngine;
import com.founder.fix.fixflow.core.ProcessEngineConfiguration;
import com.founder.fix.fixflow.core.RuntimeService;
import com.founder.fix.fixflow.core.ScheduleService;
import com.founder.fix.fixflow.core.TaskService;
import com.founder.fix.fixflow.core.cache.CacheHandler;
import com.founder.fix.fixflow.core.database.DataBaseTableEnum;
import com.founder.fix.fixflow.core.db.pagination.Pagination;
import com.founder.fix.fixflow.core.exception.ExceptionResourceCore;
import com.founder.fix.fixflow.core.exception.FixFlowClassLoadingException;
import com.founder.fix.fixflow.core.exception.FixFlowException;
import com.founder.fix.fixflow.core.impl.cache.CacheImpl;
import com.founder.fix.fixflow.core.impl.db.DbConfig;
import com.founder.fix.fixflow.core.impl.db.DbType;
import com.founder.fix.fixflow.core.impl.filter.AbstractCommandFilter;
import com.founder.fix.fixflow.core.impl.identity.AbstractAuthentication;
import com.founder.fix.fixflow.core.impl.identity.GroupDefinition;
import com.founder.fix.fixflow.core.impl.identity.UserDefinition;
import com.founder.fix.fixflow.core.impl.interceptor.CommandContextFactory;
import com.founder.fix.fixflow.core.impl.interceptor.CommandContextInterceptor;
import com.founder.fix.fixflow.core.impl.interceptor.CommandExecutor;
import com.founder.fix.fixflow.core.impl.interceptor.CommandExecutorImpl;
import com.founder.fix.fixflow.core.impl.jms.MessageReceiver;
import com.founder.fix.fixflow.core.impl.message.FlowMessageListener;
import com.founder.fix.fixflow.core.impl.persistence.deployer.BpmnDeployer;
import com.founder.fix.fixflow.core.impl.persistence.deployer.Deployer;
import com.founder.fix.fixflow.core.impl.persistence.deployer.DeploymentCache;
import com.founder.fix.fixflow.core.impl.processversion.FixFlowVersion;
import com.founder.fix.fixflow.core.impl.threadpool.FixThreadPoolExecutor;
import com.founder.fix.fixflow.core.impl.util.QuartzUtil;
import com.founder.fix.fixflow.core.impl.util.ReflectUtil;
import com.founder.fix.fixflow.core.impl.util.StringUtil;
import com.founder.fix.fixflow.core.impl.util.XmlUtil;
import com.founder.fix.fixflow.core.internationalization.ExceptionCode;
import com.founder.fix.fixflow.core.internationalization.FixFlowResources;
import com.founder.fix.fixflow.core.variable.BizData;

public class ProcessEngineConfigurationImpl extends ProcessEngineConfiguration {

  private static Logger log = LoggerFactory.getLogger(ProcessEngineConfigurationImpl.class);
  protected CommandExecutor commandExecutor;
  protected CommandContextFactory commandContextFactory;
  protected CacheHandler cacheHandler;
  protected DeploymentCache deploymentCache;
  protected List<GroupDefinition> groupDefinitions;
  protected UserDefinition userDefinition;

  protected DbConfig dbConfig;

  protected ModelService modelService = new ModelServiceImpl();
  protected RuntimeService runtimeService = new RuntimeServiceImpl();
  protected HistoryService historyService = new HistoryServiceImpl();
  protected IdentityService identityService = new IdentityServiceImpl();
  protected TaskService taskService = new TaskServiceImpl();
  protected FormService formService = new FormServiceImpl();
  protected ScheduleService scheduleService = new ScheduleServiceImpl();
  protected ManagementService managementService = new ManagementServiceImpl();
  protected FixFlowConfig fixFlowConfig;

  protected FixFlowVersion fixFlowVersion;

  public AbstractAuthentication authenticationInstance;

  protected DataBase selectedDatabase;
  protected SysMailConfig sysMailConfig;
  protected EventSubscriptionConfig eventSubscriptionConfig;

  protected ScriptLanguageConfig scriptLanguageConfig;

  protected InternationalizationConfig internationalizationConfig;

  protected FixFlowResources fixFlowResources;

  protected PigeonholeConfig pigeonholeConfig;

  protected ExpandCmdConfig expandCmdConfig;

  protected TaskCommandConfig taskCommandConfig;

  protected Map<String, TaskCommandDef> taskCommandDefMap;

  protected Map<String, AbstractCommandFilter> abstractCommandFilterMap;

  List<GroupInfo> groupInfos;

  protected BizData bizData;

  protected PriorityConfig priorityConfig;

  protected ExpandClassConfig expandClassConfig;
 

  protected Map<String, Class<?>> expandClassMap=new HashMap<String, Class<?>>();

 

  protected SchedulerFactory schedulerFactory;

  protected AssignPolicyConfig assignPolicyConfig;

  protected ImportDataVariableConfig importDataVariableConfig;

  protected QuartzConfig quartzConfig;

  protected ConnectionManagementInstanceConfig connectionManagementInstanceConfigDefault;

  protected List<ConnectionManagementInstanceConfig> connectionManagementInstanceConfigs;

  protected DataVariableConfig dataVariableConfig;

  protected Map<String, DataBaseTable> dataBaseTables = new HashMap<String, DataBaseTable>();
 
  protected Map<String, ResultMap> resultMaps = new HashMap<String, ResultMap>();
 

 
  protected Map<String, Column> columnMap = new HashMap<String, Column>();

  protected Map<String, Rule> ruleMap = new HashMap<String, Rule>();
 
  protected Map<String, Class<?>> ruleClassMap=new HashMap<String, Class<?>>();



  /**
   * 线程池
   */
  protected Map<String, FixThreadPoolExecutor> threadPoolMap;

  public ProcessEngine buildProcessEngine() {

    init();
    return new ProcessEngineImpl(this);
  }

  protected void init() {
    initExceptionResource();
    initEmfFile();
    initRulesConfig();
    // initSqlMappingFile();
    initResourcePathConfig();
    initDataVariableConfig();
    initCommandContextFactory();
    initCommandExecutors();
    initConnectionManagementConfig();
    initServices();
    initConnection();
    // initDataBaseTable();
    initCache();
    initDeployers();
    initGroupDefinitions();
    initDbConfig();// dbType
    // 任务命令配置加载
    initTaskCommandConfig();

    initImportDataVariableConfig();

    initQuartz();
    initUserDefinition();
    initSysMailConfig();
    initExpandClassConfig();
    initEventSubscriptionConfig();
    initMessageSubscription();
    initScriptLanguageConfig();
    initInternationalizationConfig();
    initFixFlowResources();
    initPigeonholeConfig();
    initExpandCmdConfig();
    initAbstractCommandFilter();
    initBizData();
    initPriorityConfig();
    initAssignPolicyConfig();
    initThreadPool();

  }
 
  public void initExceptionResource(){
    ExceptionResourceCore.system_init("internationalization/exceptionresource");
  }

  private void initRulesConfig() {
    // this.rulesConfigs=new ArrayList<RulesConfig>();
    ruleMap.clear();

    RulesResourceConfig rulesResourceConfig = getFixFlowConfig().getRulesResourceConfig();
    List<RulesResource> rulesResources = rulesResourceConfig.getRulesResource();

    for (RulesResource rulesResource : rulesResources) {
      String classPath = rulesResource.getSrc();
      Document document = null;
      try {
        InputStream in = ReflectUtil.getResourceAsStream(classPath);
        document = XmlUtil.read(in);
      } catch (DocumentException e) {
        log.error("持久化配置文件:"+classPath+"加载出错",e);
        throw new FixFlowClassLoadingException(ExceptionCode.CLASSLOAD_EXCEPTION_DCUMENT,classPath,e);
      }

      for (Object ele : document.getRootElement().elements("dataBaseTable")) {
        Element element = (Element) ele;

        DataBaseTable dataBaseTable = SqlmappingconfigFactory.eINSTANCE.createDataBaseTable();
        dataBaseTable.setTableId(element.attributeValue("tableId"));
        dataBaseTable.setTableName(element.attributeValue("tableName"));
        dataBaseTable.setTableValue(element.attributeValue("tableValue"));
        dataBaseTable.setArchiveTable(element.attributeValue("archiveTable"));
        //dataBaseTable.setMappingType(element.attributeValue("mappingType"));

        for (Object eleNew : element.elements("column")) {
          Element columnElement = (Element) eleNew;
          Column column = SqlmappingconfigFactory.eINSTANCE.createColumn();
          column.setColumn(columnElement.attributeValue("column"));
          column.setName(columnElement.attributeValue("name"));
          column.setJdbcType(columnElement.attributeValue("jdbcType"));
          //column.setProperty(columnElement.attributeValue("property"));
          //column.setSimpleKey(columnElement.attributeValue("property"));

          dataBaseTable.getColumn().add(column);
          columnMap.put(dataBaseTable.getTableId()+"_"+column.getColumn(), column);
        }

        dataBaseTables.put(dataBaseTable.getTableId(), dataBaseTable);

      }
     

      for (Object ele : document.getRootElement().elements("resultMap")) {
        Element element = (Element) ele;

        ResultMap resultMap = SqlmappingconfigFactory.eINSTANCE.createResultMap();
        resultMap.setId(element.attributeValue("id"));
        resultMap.setName(element.attributeValue("name"));
        resultMap.setType(element.attributeValue("type"));
       
        for (Object eleNew : element.elements("result")) {
          Element resultMappingElement = (Element) eleNew;
          Result result = SqlmappingconfigFactory.eINSTANCE.createResult();
          result.setColumn(resultMappingElement.attributeValue("column"));
          result.setName(resultMappingElement.attributeValue("name"));
          result.setJdbcType(resultMappingElement.attributeValue("jdbcType"));
          result.setProperty(resultMappingElement.attributeValue("property"));
          //result.setSimpleKey(columnMappingElement.attributeValue("property"));

          resultMap.getResult().add(result);
          //columnMappingMap.put(dataBaseTable.getTableId()+"_"+columnMapping.getColumn(), columnMapping);
        }

        resultMaps.put(resultMap.getId(), resultMap);

      }

      for (Object ele : document.getRootElement().elements("insert")) {
        Element element = (Element) ele;

        Insert insertObj = SqlmappingconfigFactory.eINSTANCE.createInsert();
        insertObj.setId(element.attributeValue("id"));
        insertObj.setParameterType(element.attributeValue("parameterType"));
        insertObj.setRemark(element.attributeValue("remark"));
        insertObj.setSqlValue(element.getText());
       
        String classPathString=element.attributeValue("classPath");

        if(StringUtil.isNotEmpty(classPathString)){
          Class<?> classObj=ReflectUtil.loadClass(classPathString);
          if(classObj!=null){
            insertObj.setClassPath(classPathString);
            ruleClassMap.put(element.attributeValue("id"), classObj);
          }
        }

     
        ruleMap.put(insertObj.getId(), insertObj);

      }

      for (Object ele : document.getRootElement().elements("delete")) {
        Element element = (Element) ele;

        Delete deleteObj = SqlmappingconfigFactory.eINSTANCE.createDelete();
        deleteObj.setId(element.attributeValue("id"));
        deleteObj.setParameterType(element.attributeValue("parameterType"));
        deleteObj.setRemark(element.attributeValue("remark"));
        deleteObj.setSqlValue(element.getText());
       
        String classPathString=element.attributeValue("classPath");

        if(StringUtil.isNotEmpty(classPathString)){
          Class<?> classObj=ReflectUtil.loadClass(classPathString);
          if(classObj!=null){
            deleteObj.setClassPath(classPathString);
            ruleClassMap.put(element.attributeValue("id"), classObj);
          }
        }

        ruleMap.put(deleteObj.getId(), deleteObj);

      }

      for (Object ele : document.getRootElement().elements("update")) {
        Element element = (Element) ele;
        Update updateObj = SqlmappingconfigFactory.eINSTANCE.createUpdate();
        updateObj.setId(element.attributeValue("id"));
        updateObj.setParameterType(element.attributeValue("parameterType"));
        updateObj.setRemark(element.attributeValue("remark"));
        updateObj.setSqlValue(element.getText());
        String classPathString=element.attributeValue("classPath");

        if(StringUtil.isNotEmpty(classPathString)){
          Class<?> classObj=ReflectUtil.loadClass(classPathString);
          if(classObj!=null){
            updateObj.setClassPath(classPathString);
            ruleClassMap.put(element.attributeValue("id"), classObj);
          }
        }
        ruleMap.put(updateObj.getId(), updateObj);
      }

      for (Object ele : document.getRootElement().elements("select")) {
        Element element = (Element) ele;
        Select selectObj = SqlmappingconfigFactory.eINSTANCE.createSelect();
        selectObj.setId(element.attributeValue("id"));
        selectObj.setParameterType(element.attributeValue("parameterType"));
        selectObj.setRemark(element.attributeValue("remark"));
        selectObj.setSqlValue(element.getText());
        selectObj.setResultMap(element.attributeValue("resultMap"));
        String classPathString=element.attributeValue("classPath");
        if(StringUtil.isNotEmpty(classPathString)){
          Class<?> classObj=ReflectUtil.loadClass(classPathString);
          if(classObj!=null){
            selectObj.setClassPath(classPathString);
            ruleClassMap.put(element.attributeValue("id"), classObj);
          }
        }
        ruleMap.put(selectObj.getId(), selectObj);
      }

      for (Object ele : document.getRootElement().elements("businessRules")) {
        Element element = (Element) ele;
        BusinessRules businessRules = SqlmappingconfigFactory.eINSTANCE.createBusinessRules();
        businessRules.setId(element.attributeValue("id"));
        businessRules.setParameterType(element.attributeValue("parameterType"));
        businessRules.setRemark(element.attributeValue("remark"));
        businessRules.setSqlValue(element.getText());
        businessRules.setResultType(element.attributeValue("resultType"));
        String classPathString=element.attributeValue("classPath");
        if(StringUtil.isNotEmpty(classPathString)){
          Class<?> classObj=ReflectUtil.loadClass(classPathString);
          if(classObj!=null){
            businessRules.setClassPath(classPathString);
            ruleClassMap.put(element.attributeValue("id"), classObj);
          }
        }
        ruleMap.put(businessRules.getId(), businessRules);
      }
    }
  }

  protected ResourcePathConfig resourcePathConfig;

  private void initResourcePathConfig() {
    this.resourcePathConfig = getFixFlowConfig().getResourcePathConfig();
  }

  private void initDataVariableConfig() {
    ResourceSet resourceSet = new ResourceSetImpl();
    resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml", new XMIResourceFactoryImpl());
    String classPath = getDataVariableConfigPath();
    URL url = this.getClass().getClassLoader().getResource(classPath);
    if(url == null){
      log.error("未能从{}目录下加载到datavariableconfig文件",classPath);
      throw new FixFlowClassLoadingException(ExceptionCode.CLASSLOAD_EXCEPTION_FILENOTFOUND, classPath);
    }
    String filePath = url.toString();
    Resource resource = null;
    try {
      if (!filePath.startsWith("jar")) {
        filePath = java.net.URLDecoder.decode(ReflectUtil.getResource(classPath).getFile(), "utf-8");
        resource = resourceSet.createResource(URI.createFileURI(filePath));
      } else {
        resource = resourceSet.createResource(URI.createURI(filePath));
      }
      resourceSet.getPackageRegistry().put(VariableconfigPackage.eINSTANCE.getNsURI(), VariableconfigPackage.eINSTANCE);
      resource.load(null);
    } catch (Exception e) {
      log.error("datavariableconfig.xml文件加载失败");
      throw new FixFlowException("datavariableconfig.xml文件加载失败", e);
    }
    dataVariableConfig = (DataVariableConfig) resource.getContents().get(0);
  }

  private void initImportDataVariableConfig() {
    this.importDataVariableConfig = this.fixFlowConfig.getImportDataVariableConfig();
  }

  protected ConnectionManagement connectionManagementDefault;
  protected Map<String, ConnectionManagement> connectionManagementMap;

  private void initConnectionManagementConfig() {
   
    connectionManagementMap = new HashMap<String, ConnectionManagement>();
    connectionManagementInstanceConfigs = this.fixFlowConfig.getConnectionManagementConfig().getConnectionManagementInstanceConfig();
    String selectId = this.fixFlowConfig.getConnectionManagementConfig().getSelected();
    for (ConnectionManagementInstanceConfig connectionManagementInstanceConfigTemp : connectionManagementInstanceConfigs) {
      if (connectionManagementInstanceConfigTemp.getId().equals(selectId)) {
        this.connectionManagementInstanceConfigDefault = connectionManagementInstanceConfigTemp;
        connectionManagementDefault = (ConnectionManagement) ReflectUtil.instantiate(this.connectionManagementInstanceConfigDefault
            .getClassImpl());
        if (this.connectionManagementDefault == null) {
          log.error("数据库管理器{}加载失败",connectionManagementInstanceConfigTemp.getId());
          throw new FixFlowClassLoadingException(ExceptionCode.CLASSLOAD_EXCEPTION_DEFAULT,connectionManagementInstanceConfigTemp.getClassImpl());
        }
        connectionManagementMap.put(connectionManagementInstanceConfigTemp.getId(), connectionManagementDefault);
      } else {
        ConnectionManagement connectionManagementOther = (ConnectionManagement) ReflectUtil
            .instantiate(connectionManagementInstanceConfigTemp.getClassImpl());
        connectionManagementMap.put(connectionManagementInstanceConfigTemp.getId(), connectionManagementOther);
      }
    }
  }

  protected void initEmfFile() {
    ResourceSet resourceSet = new ResourceSetImpl();
    resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml", new XMIResourceFactoryImpl());
    InputStream inputStream = null;
    String classPath = "config/fixflowconfig.xml";
    inputStream = ReflectUtil.getResourceAsStream("fixflowconfig.xml");
    if (inputStream != null) {
      classPath = "fixflowconfig.xml";
      log.info("开始从classes根目录加载fixflowconfig.xml文件");
    }else{
      log.info("开始从classes/config/fixflowconfig.xml目录加载fixflowconfig.xml文件");
    }
    URL url = this.getClass().getClassLoader().getResource(classPath);
    if(url == null){
      log.error("未能从{}目录下找到fixflowconfig.xml文件",classPath);
      throw new FixFlowClassLoadingException(ExceptionCode.CLASSLOAD_EXCEPTION_FILENOTFOUND ,"fixflowconfig.xml");
    }
    String filePath = url.toString();
    Resource resource = null;
    try {
      if (!filePath.startsWith("jar")) {
        filePath = java.net.URLDecoder.decode(ReflectUtil.getResource(classPath).getFile(), "utf-8");
        resource = resourceSet.createResource(URI.createFileURI(filePath));
      } else {
        resource = resourceSet.createResource(URI.createURI(filePath));
      }
      resourceSet.getPackageRegistry().put(CoreconfigPackage.eINSTANCE.getNsURI(), CoreconfigPackage.eINSTANCE);
      resource.load(null);
    } catch (Exception e) {
      log.error("fixflowconfig.xml文件加载失败", e);
      throw new FixFlowClassLoadingException(ExceptionCode.CLASSLOAD_EXCEPTION,"fixflowconfig.xml", e);
    }
    fixFlowConfig = (FixFlowConfig) resource.getContents().get(0);
    String versionString = fixFlowConfig.getVersion();
    this.fixFlowVersion = new FixFlowVersion(versionString);
  }

  protected void initThreadPool() {

    // 这里以后要从配置文件读取现在是写死的
    threadPoolMap = new HashMap<String, FixThreadPoolExecutor>();
    BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
    FixThreadPoolExecutor executor = new FixThreadPoolExecutor("default", "默认线程池", 1, 1, 1, TimeUnit.DAYS, queue);
    threadPoolMap.put(executor.getThreadPoolKey(), executor);

  }

  // 加载任务分配策略配置
  protected void initAssignPolicyConfig() {
    assignPolicyConfig = fixFlowConfig.getAssignPolicyConfig();
  }

  protected void initPriorityConfig() {
    priorityConfig = fixFlowConfig.getPriorityConfig();
  }

  protected void initBizData() {

    ExpandClassConfig expandClassConfig = getExpandClassConfig();
    List<ExpandClass> expandClasses = expandClassConfig.getExpandClass();
    for (ExpandClass expandClass : expandClasses) {
      if (expandClass.getClassId().equals("BizData")) {
        bizData = (BizData) ReflectUtil.instantiate(expandClass.getClassImpl());
        break;
      }
    }
  }

  protected void initAbstractCommandFilter() {

    abstractCommandFilterMap = new HashMap<String, AbstractCommandFilter>();
    List<TaskCommandDef> taskCommandDefs = fixFlowConfig.getTaskCommandConfig().getTaskCommandDef();
    for (TaskCommandDef taskCommandDef : taskCommandDefs) {
      if (StringUtil.getBoolean(taskCommandDef.getIsEnabled()) && taskCommandDef.getFilter() != null && !taskCommandDef.getFilter().equals("")) {
        AbstractCommandFilter abstractCommandFilter = (AbstractCommandFilter) ReflectUtil.instantiate(taskCommandDef.getFilter());
        abstractCommandFilterMap.put(taskCommandDef.getId(), abstractCommandFilter);
      }
    }
  }

  protected void initExpandCmdConfig() {
    this.expandCmdConfig = fixFlowConfig.getExpandCmdConfig();
  }

  protected void initPigeonholeConfig() {
    pigeonholeConfig = fixFlowConfig.getPigeonholeConfig();
  }

  protected void initFixFlowResources() {
    if (!StringUtil.getBoolean(internationalizationConfig.getIsEnable())) {
      return;
    }
    List<ExpandClass> expandClasses = expandClassConfig.getExpandClass();
    for (ExpandClass expandClass : expandClasses) {
      if (expandClass.getClassId().equals("FixFlowResources")) {
        fixFlowResources = (FixFlowResources) ReflectUtil.instantiate(expandClass.getClassImpl());
        break;
      }
    }
    if (fixFlowResources == null) {
      throw new FixFlowClassLoadingException(ExceptionCode.CLASSLOAD_EXCEPTION_DEFAULT,"FixFlowResources");
    }
    try {
      String path = getInternationPath();
      fixFlowResources.systemInit(path);
    } catch (Exception e) {
      log.error("国际化功能初始化失败!",e);
    }
  }

  protected void initInternationalizationConfig() {
    internationalizationConfig = fixFlowConfig.getInternationalizationConfig();
  }

  protected void initScriptLanguageConfig() {
    this.scriptLanguageConfig = fixFlowConfig.getScriptLanguageConfig();
  }

  protected void initMessageSubscription() {

    if (StringUtil.getBoolean(this.eventSubscriptionConfig.getIsEnable())) {
      String serverAddress = this.eventSubscriptionConfig.getServerAddress();
      String ServerPort = this.eventSubscriptionConfig.getServerPort();
      String messageInfo = this.eventSubscriptionConfig.getMessageInfo();
      MessageReceiver reciver = null;
      try {
        reciver = new MessageReceiver("tcp://" + serverAddress + ":" + ServerPort + "");
        FlowMessageListener listener = new FlowMessageListener();
        reciver.addTopicListener(messageInfo, listener);
        log.info("Message监听启动成功!\n");
      } catch (JMSException e) {
        log.error("Message监听启动失败!\n",e);
      }
    }
  }

  protected void initEventSubscriptionConfig() {
    this.eventSubscriptionConfig = fixFlowConfig.getEventSubscriptionConfig();
  }

  protected void initExpandClassConfig() {
    this.expandClassConfig = fixFlowConfig.getExpandClassConfig();
    for (ExpandClass expandClass : expandClassConfig.getExpandClass()) {
     
      String classPathString=expandClass.getClassImpl();
     
      if(StringUtil.isNotEmpty(classPathString)){
        Class<?> classObj=ReflectUtil.loadClass(classPathString);
        if(classObj!=null){
          expandClassMap.put(expandClass.getClassId(), classObj);
        }
      }
     
     
     
      if (expandClass.getClassId().equals("Authentication")) {
        this.authenticationInstance = (AbstractAuthentication) ReflectUtil.instantiate(expandClass.getClassImpl());
      }
    }

  }

  protected void initSysMailConfig() {
    this.sysMailConfig = fixFlowConfig.getSysMailConfig();
  }

  protected void initUserDefinition() {

    UserDefinition userDefinitionObj = (UserDefinition) ReflectUtil.instantiate("com.founder.fix.fixflow.expand.identity.UserDefinitionImpl");
    AllUserInfo allUserInfo = fixFlowConfig.getDesignerOrgConfig().getAllUserInfo();
    userDefinitionObj.setUserInfoConfig(allUserInfo);
    this.userDefinition = userDefinitionObj;

  }

  protected void initConnection() {
    String selectedDB = fixFlowConfig.getDataBaseConfig().getSelected();
    for (DataBase dataBase : fixFlowConfig.getDataBaseConfig().getDataBase()) {
      if (dataBase.getId().equals(selectedDB)) {
        selectedDatabase = dataBase;
        ConnectionManagement.defaultDataBaseId = selectedDatabase.getId();
        break;
      }
    }

  }

  protected Scheduler scheduler;

  public Scheduler getScheduler() {
    return scheduler;
  }

  protected void initQuartz() {
    /*
     * SchedulerFactory schedulerFactory =
     * QuartzUtil.createSchedulerFactory(); Scheduler scheduler = null;
     */

    this.quartzConfig = fixFlowConfig.getQuartzConfig();

    if (!StringUtil.getBoolean(quartzConfig.getIsEnable())) {
      return;
    }

    String driverClassName = "";
    String url = "";
    String username = "";
    String driverDelegateClass = "";
    String password = "";
    DataBase quartzDataBase = null;

    if (StringUtil.getBoolean(quartzConfig.getIsDefaultConfig())) {
      quartzDataBase = selectedDatabase;
    } else {

      String selectedDB = quartzConfig.getDataBaseId();
      for (DataBase dataBase : fixFlowConfig.getDataBaseConfig().getDataBase()) {
        if (dataBase.getId().equals(selectedDB)) {
          quartzDataBase = dataBase;
        }
      }

    }

    if (quartzDataBase == null) {
      throw new FixFlowException("定时任务框架启动失败!未找到指定的数据库");
    }

    driverClassName = quartzDataBase.getDriverClassName();
    url = quartzDataBase.getUrl();
    username = quartzDataBase.getUsername();
    password = quartzDataBase.getPassword();

    if (quartzDataBase.getDbtype().equals(DBType.ORACLE)) {
      driverDelegateClass = "com.founder.fix.fixflow.expand.quartz.jdbcjobstore.oracle.OracleDelegate";
      // driverDelegateClass =
      // "org.quartz.impl.jdbcjobstore.oracle.OracleDelegate";//org.quartz.impl.jdbcjobstore.StdJDBCDelegate
    } else {

      if (quartzDataBase.getDbtype().equals(DBType.SQLSERVER)) {
        driverDelegateClass = "org.quartz.impl.jdbcjobstore.MSSQLDelegate";
      } else {
        driverDelegateClass = "org.quartz.impl.jdbcjobstore.StdJDBCDelegate";
      }

    }

    /*
     * if(quartzDataBase.getId().toLowerCase().equals("sqlserver")) {
     * driverDelegateClass = "org.quartz.impl.jdbcjobstore.MSSQLDelegate"; }
     * else { driverDelegateClass =
     * "org.quartz.impl.jdbcjobstore.oracle.OracleDelegate"
     * ;//org.quartz.impl.jdbcjobstore.StdJDBCDelegate }
     */

    Properties props = new Properties();
    props.put("org.quartz.scheduler.instanceName", "FixFlowQuartzScheduler");
    props.put("org.quartz.scheduler.instanceId", "AUTO");
    props.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
    props.put("org.quartz.threadPool.threadCount", "15");
    props.put("org.quartz.threadPool.threadPriority", "5");

    props.put("org.quartz.jobStore.misfireThreshold", "60000");

    // props.put("org.quartz.scheduler.jmx.export", "true");

    // JobStoreTX
    props.put("org.quartz.jobStore.class", "com.founder.fix.fixflow.expand.quartz.jdbcjobstore.JobStoreFix");
    // props.put("org.quartz.jobStore.class",
    // "org.quartz.impl.jdbcjobstore.JobStoreTX");
    props.put("org.quartz.jobStore.driverDelegateClass", driverDelegateClass);
    props.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
    props.put("org.quartz.jobStore.dataSource", "fixDS");
    props.put("org.quartz.jobStore.isClustered", "false");
    props.put("org.quartz.dataSource.fixDS.driver", driverClassName);
    props.put("org.quartz.dataSource.fixDS.URL", url);
    props.put("org.quartz.dataSource.fixDS.user", username);
    props.put("org.quartz.dataSource.fixDS.password", password);
    props.put("org.quartz.dataSource.fixDS.maxConnections", "5");

    Properties prop = new Properties();
    InputStream inputStream = null;
    String quartzConfigPath = "";
    try {
      quartzConfigPath = getQuartzConfigPath();
      inputStream = ReflectUtil.getResourceAsStream(quartzConfigPath);
      if (inputStream != null) {
        prop.load(inputStream);
        inputStream.close();
        Set<Object> objects = prop.keySet();
        for (Object object : objects) {
          props.put(StringUtil.getString(object), prop.getProperty(StringUtil.getString(object)));
        }
      }
    } catch (IOException e) {
      log.info("未能从{}加载到quartzconfig.xml文件,自动加载默认配置!",quartzConfigPath);
    }
    props.putAll(prop);
    schedulerFactory = null;
    schedulerFactory = QuartzUtil.createSchedulerFactory(props);
    try {
      scheduler = schedulerFactory.getScheduler();
      scheduler.start();
      log.info("定时框架启动成功");
    } catch (SchedulerException e) {
      log.error("定时框架启动失败",e);
      throw new FixFlowException(ExceptionCode.JOB_EXCEPTION_DEFAULT, e);
    }
  }

  protected void initTaskCommandConfig() {
    this.taskCommandConfig = fixFlowConfig.getTaskCommandConfig();
    taskCommandDefMap = new HashMap<String, TaskCommandDef>();
    for (TaskCommandDef taskCommandDef : taskCommandConfig.getTaskCommandDef()) {
      String id = taskCommandDef.getId();
      taskCommandDefMap.put(id, taskCommandDef);
    }
  }
 
  public Connection createConnection() {
    DataBase dataBase = this.selectedDatabase;
    Connection connection = null;
    String driver = dataBase.getDriverClassName();
    String url = dataBase.getUrl();
    String user = dataBase.getUsername();
    String password = dataBase.getPassword();

    try {
      Class.forName(driver);
    } catch (Exception e) {
      throw new FixFlowException("数据库链接创建失败!", e);
    }// com.mysql.jdbc.Driver

    try {
      connection = DriverManager.getConnection(url, user, password);
    } catch (Exception e) {

    }

    return connection;

  }

  protected void initDbConfig() {
    // Element dataBaseConfigEle =
    // getDataBaseConfigEle(getFixFlowConfigDoc());

    DataBase dataBase = this.selectedDatabase;
    if (dataBase != null) {
      if (dataBase.getDbtype().toString().toLowerCase().equals(DbType.SQLSERVER.toString().toLowerCase())) {
        initSqlServerDbConfig();
        return;
      }
      if (dataBase.getDbtype().toString().toLowerCase().equals(DbType.ORACLE.toString().toLowerCase())) {
        initOracleDbConfig();
        return;
      }
      if (dataBase.getDbtype().toString().toLowerCase().equals(DbType.MYSQL.toString().toLowerCase())) {
        initMySqlDbConfig();
        return;
      }
      if (dataBase.getDbtype().toString().toLowerCase().equals(DbType.DB2.toString().toLowerCase())) {
        initDB2DbConfig();
        return;
      }
      initOracleDbConfig();
    } else {
      initOracleDbConfig();
      return;
    }

    /*
     * if (ProcessEngineManagement.dbType != null) { if
     * (ProcessEngineManagement.dbType == DbType.SQLSERVER) {
     * initSqlServerDbConfig(); return; } if (ProcessEngineManagement.dbType
     * == DbType.ORACLE) { initOracleDbConfig(); return; }
     * initOracleDbConfig(); } else { initOracleDbConfig(); return; }
     */
  }

  protected void initSqlServerDbConfig() {

    DataBase dataBase = this.selectedDatabase;

    // OraclePaginationImpl
    Pagination pagination = (Pagination) ReflectUtil.instantiate(dataBase.getPaginationImpl());
    DbConfig dbConfig = new DbConfig();
    dbConfig.setDbType(DbType.SQLSERVER);
    dbConfig.setPagination(pagination);
    dbConfig.setKeyword("?");

    Map<String, String> map = new HashMap<String, String>();
    map.put("topOrderBy", " top 100 percent ");

    dbConfig.setDbSqlMap(map);

    this.dbConfig = dbConfig;
  }

  protected void initMySqlDbConfig() {

    DataBase dataBase = this.selectedDatabase;
    // OraclePaginationImpl
    Pagination pagination = (Pagination) ReflectUtil.instantiate(dataBase.getPaginationImpl());
    DbConfig dbConfig = new DbConfig();
    dbConfig.setDbType(DbType.ORACLE);
    dbConfig.setPagination(pagination);
    dbConfig.setKeyword("?");

    Map<String, String> map = new HashMap<String, String>();
    map.put("topOrderBy", " ");

    dbConfig.setDbSqlMap(map);

    this.dbConfig = dbConfig;
  }

  protected void initDB2DbConfig() {
    DataBase dataBase = this.selectedDatabase;
    // OraclePaginationImpl
    Pagination pagination = (Pagination) ReflectUtil.instantiate(dataBase.getPaginationImpl());
    DbConfig dbConfig = new DbConfig();
    dbConfig.setDbType(DbType.ORACLE);
    dbConfig.setPagination(pagination);
    dbConfig.setKeyword("?");

    Map<String, String> map = new HashMap<String, String>();
    map.put("topOrderBy", " ");

    dbConfig.setDbSqlMap(map);

    this.dbConfig = dbConfig;
  }

  protected void initOracleDbConfig() {
    DataBase dataBase = this.selectedDatabase;
    // OraclePaginationImpl
    Pagination pagination = (Pagination) ReflectUtil.instantiate(dataBase.getPaginationImpl());
    DbConfig dbConfig = new DbConfig();
    dbConfig.setDbType(DbType.ORACLE);
    dbConfig.setPagination(pagination);
    dbConfig.setKeyword("?");

    Map<String, String> map = new HashMap<String, String>();
    map.put("topOrderBy", " ");

    dbConfig.setDbSqlMap(map);

    this.dbConfig = dbConfig;
  }

  protected void initGroupDefinitions() {
    groupDefinitions = new ArrayList<GroupDefinition>();

    groupInfos = fixFlowConfig.getDesignerOrgConfig().getGroupInfo();

    for (GroupInfo groupInfo : groupInfos) {

      GroupDefinition groupDefinition = (GroupDefinition) ReflectUtil.instantiate(groupInfo.getGroupDefinitionImpl());
      groupDefinition.setId(groupInfo.getGroupId());
      groupDefinition.setName(groupInfo.getGroupName());
      groupDefinition.setGroupInfo(groupInfo);
      groupDefinitions.add(groupDefinition);

    }

  }

  protected void initServices() {
    initService(modelService);
    initService(runtimeService);
    initService(historyService);
    initService(identityService);
    initService(taskService);
    initService(managementService);
    initService(formService);
    initService(scheduleService);
  }

  protected void initService(Object service) {
    if (service instanceof ServiceImpl) {
      ((ServiceImpl) service).setCommandExecutor(commandExecutor);
    }
  }

  protected void initCache() {
    // 这里以后要改到从conf文件中读取!!!
    this.cacheHandler = new CacheImpl();

  }

  protected void initCommandContextFactory() {
    if (commandContextFactory == null) {
      commandContextFactory = new CommandContextFactory();
      commandContextFactory.setProcessEngineConfiguration(this);
    }
  }

  protected void initCommandExecutors() {

    CommandContextInterceptor commandContextInterceptor = new CommandContextInterceptor(commandContextFactory, this);
    commandContextInterceptor.setNext(new CommandExecutorImpl());
    this.commandExecutor = commandContextInterceptor;
  }

  protected void initDeployers() {

    if (deploymentCache == null) {
      List<Deployer> deployers = new ArrayList<Deployer>();

      deployers.add(new BpmnDeployer());
      deploymentCache = new DeploymentCache();
      deploymentCache.setDeployers(deployers);
    }
  }

  public DeploymentCache getDeploymentCache() {
    return deploymentCache;
  }

  public void setDeploymentCache(DeploymentCache deploymentCache) {
    this.deploymentCache = deploymentCache;
  }

  public CommandExecutor getCommandExecutor() {
    return this.commandExecutor;
  }

  public ProcessEngineConfigurationImpl setCommandExecutor(CommandExecutor commandExecutor) {
    this.commandExecutor = commandExecutor;
    return this;
  }

  public DbConfig getDbConfig() {
    return dbConfig;
  }

  public ModelService getModelService() {
    return modelService;
  }

  public ProcessEngineConfigurationImpl setModelService(ModelService modelService) {
    this.modelService = modelService;
    return this;
  }

  public RuntimeService getRuntimeService() {
    return runtimeService;
  }

  public ProcessEngineConfigurationImpl setRuntimeService(RuntimeService runtimeService) {
    this.runtimeService = runtimeService;
    return this;
  }

  public HistoryService getHistoryService() {
    return historyService;
  }

  public ProcessEngineConfigurationImpl setHistoryService(HistoryService historyService) {
    this.historyService = historyService;
    return this;
  }

  public IdentityService getIdentityService() {
    return identityService;
  }

  public ProcessEngineConfigurationImpl setIdentityService(IdentityService identityService) {
    this.identityService = identityService;
    return this;
  }

  public ManagementService getManagementService() {
    return managementService;
  }

  public ProcessEngineConfigurationImpl setManagementService(ManagementService managementService) {
    this.managementService = managementService;
    return this;
  }

  public TaskService getTaskService() {
    return taskService;
  }

  public List<GroupDefinition> getGroupDefinitions() {
    return groupDefinitions;
  }

  public TaskCommandConfig getTaskCommandConfig() {
    return taskCommandConfig;
  }

  public ProcessEngineConfigurationImpl setTaskService(TaskService taskService) {
    this.taskService = taskService;
    return this;
  }

  public FormService getFormService() {
    return formService;
  }

  public ProcessEngineConfigurationImpl setFormService(FormService formService) {
    this.formService = formService;
    return this;
  }

  public ScheduleService getScheduleService() {
    return scheduleService;
  }

  public ProcessEngineConfigurationImpl setScheduleService(ScheduleService scheduleService) {
    this.scheduleService = scheduleService;
    return this;
  }

  public CacheHandler getCacheHandler() {
    return cacheHandler;
  }

  public ProcessEngineConfigurationImpl setCacheHandler(CacheHandler cacheHandler) {
    this.cacheHandler = cacheHandler;
    return this;
  }

  public InternationalizationConfig getInternationalizationConfig() {
    return internationalizationConfig;
  }

  public void setInternationalizationConfig(InternationalizationConfig internationalizationConfig) {
    this.internationalizationConfig = internationalizationConfig;
  }

  public Map<String, TaskCommandDef> getTaskCommandDefMap() {
    return taskCommandDefMap;
  }

  public Map<String, FixThreadPoolExecutor> getThreadPoolMap() {
    return threadPoolMap;
  }

  public Map<String, AbstractCommandFilter> getAbstractCommandFilterMap() {
    return abstractCommandFilterMap;
  }

  public DataBase getSelectedDatabase() {
    return selectedDatabase;
  }

  public UserDefinition getUserDefinition() {
    return userDefinition;
  }

  public void setUserDefinition(UserDefinition userDefinition) {
    this.userDefinition = userDefinition;
  }

  /**
   * 获取系统配置邮件
   *
   * @return
   */
  public SysMailConfig getSysMailConfig() {
    return sysMailConfig;
  }

  /**
   * 获取调度工厂对象
   *
   * @return 调度工厂对象
   */
  public SchedulerFactory getSchedulerFactory() {
    return schedulerFactory;
  }

  public ExpandClassConfig getExpandClassConfig() {
    return expandClassConfig;
  }

  public EventSubscriptionConfig getEventSubscriptionConfig() {
    return eventSubscriptionConfig;
  }

  public ScriptLanguageConfig getScriptLanguageConfig() {
    return scriptLanguageConfig;
  }

  public FixFlowResources getFixFlowResources() {
    return fixFlowResources;
  }

  public void setFixFlowResources(FixFlowResources fixFlowResources) {
    this.fixFlowResources = fixFlowResources;
  }

  public PigeonholeConfig getPigeonholeConfig() {
    return pigeonholeConfig;
  }

  public ExpandCmdConfig getExpandCmdConfig() {

    return expandCmdConfig;
  }

  public BizData getBizData() {
    return bizData;
  }

  public PriorityConfig getPriorityConfig() {

    return priorityConfig;
  }

  public Priority getPriority(int priorityValue) {

    for (Priority priority : priorityConfig.getPriority()) {
      if (priority.getValue().equals(StringUtil.getString(priorityValue))) {
        return priority;
      }
    }

    return priorityConfig.getPriority().get(1);

  }

  public AssignPolicyConfig getAssignPolicyConfig() {
    return assignPolicyConfig;
  }

  public ImportDataVariableConfig getImportDataVariableConfig() {
    return importDataVariableConfig;
  }

  public ConnectionManagementInstanceConfig getConnectionManagementInstanceConfigDefault() {
    return connectionManagementInstanceConfigDefault;
  }

  public ConnectionManagement getConnectionManagementDefault() {
    return connectionManagementDefault;
  }

  public ConnectionManagement getConnectionManagement(String cmId) {
    return connectionManagementMap.get(cmId);
  }

  public FixFlowConfig getFixFlowConfig() {
    return fixFlowConfig;
  }

  public FixFlowVersion getFixFlowVersion() {
    return fixFlowVersion;
  }

  public QuartzConfig getQuartzConfig() {
    return quartzConfig;
  }

  public AbstractAuthentication getAuthenticationInstance() {
    return authenticationInstance;
  }

  public DataVariableConfig getDataVariableConfig() {
    return dataVariableConfig;
  }

  public DataBaseTable getDataBaseTableConfig(DataBaseTableEnum dataBaseTableEnum) {

    return this.dataBaseTables.get(dataBaseTableEnum.toString().toLowerCase());

  }

  public ResourcePathConfig getResourcePathConfig() {
    return resourcePathConfig;
  }

  public ResourcePath getResourcePath(String resourceId) {

    List<ResourcePath> resourcePaths = this.resourcePathConfig.getResourcePath();
    for (ResourcePath resourcePath : resourcePaths) {
      if (resourcePath.getId().equals(resourceId)) {
        return resourcePath;
      }
    }
    return null;
  }

  public DataBaseTable getDataBaseTable(String tableId) {

    return this.dataBaseTables.get(tableId);

  }

  public Rule getRule(String ruleId) {

    return this.ruleMap.get(ruleId);

  }
 
  public Map<String, Rule> getRuleMap() {
    return ruleMap;
  }
 
 
 
  public Map<String, DataBaseTable> getDataBaseTables() {
    return dataBaseTables;
  }
 
  public Column getColumn(String tableId,String columnId) {
   
   
    return columnMap.get(tableId+"_"+columnId);
   
  }
 
  public Map<String,Column> getColumnMap(String tableId) {
    Map<String, Column> columnMapObj=new HashMap<String, Column>();
    DataBaseTable dataBaseTable=dataBaseTables.get(tableId);
    if(dataBaseTable!=null){
      for (Column column : dataBaseTable.getColumn()) {
        columnMapObj.put(column.getColumn(), column);
      }
    }
   
    return columnMapObj;
   
  }
  public Map<String, ResultMap> getResultMaps() {
    return resultMaps;
  }
 
  public ResultMap getResultMap(String id) {
    return resultMaps.get(id);
  }
 
  public Map<String, Class<?>> getRuleClassMap() {
    return ruleClassMap;
  }
 
  public Class<?> getRuleClass(String id) {
    return ruleClassMap.get(id);
  }

 
  public Map<String, Class<?>> getExpandClassMap() {
    return expandClassMap;
  }
 
 
  public Class<?> getExpandClass(String classId) {
    return expandClassMap.get(classId);
  }
 
  public String getNoneTemplateFilePath(){
    return getResourcePath("none_template").getSrc();
  }
 
  public String getDataVariableConfigPath(){
    return getResourcePath("dataVariableConfig").getSrc();
  }

  public String getQuartzConfigPath(){
    return getResourcePath("quartz").getSrc();
  }
 
  public String getInternationPath(){
    return getResourcePath("internationalization").getSrc();
  }
 
  public String getDefaultTemplatePath(){
    return getResourcePath("fixflow-repository-flow-template").getSrc() + "default_process"+File.separator+"default_process.bpmn";
  }
 
  public String getCopyTemplatePath(){
    return getResourcePath("copy_template").getSrc();
  }

}
TOP

Related Classes of com.founder.fix.fixflow.core.impl.ProcessEngineConfigurationImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.