All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.schoolwow.quickflow.service.quickFlow.option.QuickFlowOptionImpl Maven / Gradle / Ivy

package cn.schoolwow.quickflow.service.quickFlow.option;

import cn.schoolwow.quickflow.QuickFlow;
import cn.schoolwow.quickflow.domain.FlowConfig;
import cn.schoolwow.quickflow.domain.FlowContext;
import cn.schoolwow.quickflow.listener.FlowConfigRequestDataHandler;
import cn.schoolwow.quickflow.listener.FlowMappingHandler;
import cn.schoolwow.quickflow.listener.SingleFlowListener;
import cn.schoolwow.quickflow.listener.TryCatchFinallyHandler;
import com.alibaba.fastjson.JSONObject;

import java.util.Map;

public class QuickFlowOptionImpl implements QuickFlowOption{
    private FlowConfig flowConfig;

    public QuickFlowOptionImpl(FlowConfig flowConfig) {
        this.flowConfig = flowConfig;
    }

    @Override
    public QuickFlow startDebugMode() {
        flowConfig.flowConfigSwitcherContext.debug = true;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow stopDebugMode() {
        flowConfig.flowConfigSwitcherContext.debug = false;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow printTrace(boolean printTrace) {
        flowConfig.flowConfigSwitcherContext.printTrace = printTrace;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow traceLevel(int traceLevel) {
        flowConfig.flowConfigSwitcherContext.traceLevel = traceLevel;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow ignoreBroken(boolean ignoreBroken) {
        flowConfig.flowConfigSwitcherContext.ignoreBroken = ignoreBroken;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow ignoreException(boolean ignoreException) {
        flowConfig.flowConfigSwitcherContext.ignoreException = ignoreException;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow flowNameInstanceMappingHandler(FlowMappingHandler flowMappingHandler) {
        flowConfig.flowConfigHandlerContext.flowMappingHandler = flowMappingHandler;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow tryCatchFinallyHandler(TryCatchFinallyHandler tryCatchFinallyHandler) {
        flowConfig.flowConfigHandlerContext.tryCatchFinallyHandler = tryCatchFinallyHandler;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow tryCatchFinallyHandler(TryCatchFinallyHandler... tryCatchFinallyHandlerArray) {
        if(null==tryCatchFinallyHandlerArray){
            return flowConfig.quickFlow;
        }
        for(TryCatchFinallyHandler tryCatchFinallyHandler:tryCatchFinallyHandlerArray){
            if(null==tryCatchFinallyHandler.name()||tryCatchFinallyHandler.name().isEmpty()){
                throw new IllegalArgumentException("监听器名称不能为空!监听器类名:"+tryCatchFinallyHandler.getClass().getName());
            }
        }
        flowConfig.flowConfigHandlerContext.tryCatchFinallyHandler = new TryCatchFinallyHandler() {
            @Override
            public void handleTryStart(FlowContext flowContext) throws Exception {
                for(TryCatchFinallyHandler tryCatchFinallyHandler:tryCatchFinallyHandlerArray){
                    tryCatchFinallyHandler.handleTryStart(flowContext);
                }
            }

            @Override
            public void handleTryEnd(FlowContext flowContext) throws Exception {
                for(TryCatchFinallyHandler tryCatchFinallyHandler:tryCatchFinallyHandlerArray){
                    tryCatchFinallyHandler.handleTryEnd(flowContext);
                }
            }

            @Override
            public void handleException(FlowContext flowContext, Exception e) {
                for(TryCatchFinallyHandler tryCatchFinallyHandler:tryCatchFinallyHandlerArray){
                    tryCatchFinallyHandler.handleException(flowContext, e);
                }
            }

            @Override
            public void handleFinally(FlowContext flowContext) {
                for(TryCatchFinallyHandler tryCatchFinallyHandler:tryCatchFinallyHandlerArray){
                    tryCatchFinallyHandler.handleFinally(flowContext);
                }
            }

            @Override
            public String name() {
                return "综合TryCatchFinally处理器";
            }
        };
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow singleFlowListener(SingleFlowListener singleFlowListener) {
        if(null==singleFlowListener){
            return flowConfig.quickFlow;
        }
        if(null==singleFlowListener.name()||singleFlowListener.name().isEmpty()){
            throw new IllegalArgumentException("监听器名称不能为空!监听器类名:"+singleFlowListener.getClass().getName());
        }
        flowConfig.flowConfigHandlerContext.singleFlowListener = singleFlowListener;
        return flowConfig.quickFlow;
    }

    @Override
    public QuickFlow flowConfigRequestDataHandler(FlowConfigRequestDataHandler flowConfigRequestDataHandler) {
        if(null==flowConfigRequestDataHandler){
            return flowConfig.quickFlow;
        }
        flowConfig.flowConfigHandlerContext.flowConfigRequestDataHandler = flowConfigRequestDataHandler;
        try {
            Map flowConfigMap = flowConfig.flowConfigHandlerContext.flowConfigRequestDataHandler.loadFlowConfigRequestDataMap();
            if(null!=flowConfigMap&&!flowConfigMap.isEmpty()){
                flowConfig.flowConfigDataContext.flowConfigDataMap.putAll(flowConfigMap);
            }
            return flowConfig.quickFlow;
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    @Override
    public JSONObject getFlowConfigRequestData(String name) {
        if(!flowConfig.flowConfigDataContext.flowConfigDataMap.containsKey(name)){
            throw new IllegalArgumentException("流程配置数据不存在!流程名称:"+name);
        }
        JSONObject requestData = flowConfig.flowConfigDataContext.flowConfigDataMap.get(name);
        return requestData;
    }

    @Override
    public QuickFlow saveFlowConfigRequestData(String categoryName, String name, JSONObject requestData) {
        flowConfig.flowConfigDataContext.flowConfigDataMap.put(name, requestData);
        if(null==flowConfig.flowConfigHandlerContext.flowConfigRequestDataHandler){
            throw new IllegalArgumentException("请配置FlowConfigHandler处理器!");
        }
        try {
            flowConfig.flowConfigHandlerContext.flowConfigRequestDataHandler.saveFlowConfigRequestData(categoryName, name, requestData);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
        return flowConfig.quickFlow;
    }

    @Override
    public FlowConfig getFlowConfig() {
        return flowConfig;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy