package com.github.qinyou.oa.activiti;

import com.jfinal.plugin.IPlugin;
import com.jfinal.plugin.activerecord.DbKit;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;

/***
 *  Jfinal activiti 插件
 * @author chuang
 */
@Slf4j
public class ActivitiPlugin implements IPlugin {
    public static ProcessEngine processEngine = null;

    @Override
    public boolean start() {
        try {
            createProcessEngine();
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            e.printStackTrace();
        }
        return true;
    }

    @Override
    public boolean stop() {
        ProcessEngines.destroy();
        ActivitiPlugin.processEngine = null;
        return true;
    }

    /**
     * 创建工作流引擎
     * @return
     */
    private Boolean createProcessEngine(){
        if (processEngine != null) {
            return true;
        }
        StandaloneProcessEngineConfiguration conf =
                (StandaloneProcessEngineConfiguration) ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        conf.setDataSource(DbKit.getConfig().getDataSource())
            .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE) // 自动更新数据库表
            .setDbHistoryUsed(true);                                                   // 历史表生效功能
        // conf.setTransactionsExternallyManaged(true); // 使用托管事务工厂(不配置,事务也可生效)


        conf.setTransactionFactory(new ActivitiTransactionFactory());

        ActivitiPlugin.processEngine = conf.buildProcessEngine();
        return true;
    }
}