package peal.impl.instance; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Objects; import javax.jws.WebService; import betsy.bpmn.engines.AbstractBPMNEngine; import betsy.bpmn.engines.BPMNProcessStarter; import betsy.common.engines.EngineAPI; import peal.InstanceService; import peal.InstanceStateDetailed; import peal.Variable; import peal.helper.ZipFileHelper; import peal.identifier.InstanceId; import peal.identifier.ProcessModelId; import peal.impl.engine.EngineServiceImpl; import peal.observer.InstanceState; import peal.packages.LogPackage; @WebService public class InstanceServiceImpl implements InstanceService { private final EngineServiceImpl engineService; public InstanceServiceImpl(EngineServiceImpl engineService) { this.engineService = Objects.requireNonNull(engineService); } @Override public InstanceId start(ProcessModelId processID, List<Variable> variables) throws RuntimeException { EngineAPI<?> engine = engineService.getEngineByID(processID.toEngineId()); AbstractBPMNEngine bpmnEngine = (AbstractBPMNEngine) engine; BPMNProcessStarter processStarter = bpmnEngine.getProcessStarter(); List<pebl.benchmark.test.steps.vars.Variable> variableList = new LinkedList<>(); for (Variable variable : variables) { variableList.add(new pebl.benchmark.test.steps.vars.Variable(variable.getName(), variable.getType(), variable.getValue().toString())); } processStarter.start(processID.getProcessId().getLocalPart(), variableList); return new InstanceId(processID.getEngineId(), processID.getProcessId(), "1"); } @Override public InstanceStateDetailed getStateDetailed(InstanceId instanceId) { /* BPMNProcessInstanceOutcomeChecker processInstanceOutcomeChecker; BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome processInstanceOutcome = processInstanceOutcomeChecker.checkProcessOutcome(instanceId.getProcessId().getLocalPart()); if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.UNDEPLOYED_PROCESS) { return InstanceStateDetailed.UNDEPLOYED_PROCESS; } else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.UNKNOWN){ return InstanceStateDetailed.UNKNOWN; } else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.OK){ return InstanceStateDetailed.OK; }else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.COULD_NOT_CHECK_PROCESS_INSTANCE_STATUS){ return InstanceStateDetailed.COULD_NOT_CHECK_PROCESS_INSTANCE_STATUS; }else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.PROCESS_INSTANCE_ABORTED){ return InstanceStateDetailed.PROCESS_INSTANCE_ABORTED; }else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.PROCESS_INSTANCE_ABORTED_BECAUSE_ERROR_EVENT_THROWN){ return InstanceStateDetailed.PROCESS_INSTANCE_ABORTED_BECAUSE_ERROR_EVENT_THROWN; }else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.PROCESS_INSTANCE_ABORTED_BECAUSE_ESCALATION_EVENT_THROWN){ return InstanceStateDetailed.PROCESS_INSTANCE_ABORTED_BECAUSE_ESCALATION_EVENT_THROWN; }else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.RUNTIME){ return InstanceStateDetailed.RUNTIME; } else { throw new IllegalStateException("outcome " + processInstanceOutcome + "not mappable"); } */ return null; } @Override public InstanceState getState(InstanceId instanceId) { Path logForInstance = getInstanceLog(instanceId); if (!Files.exists(logForInstance)) { return InstanceState.NOT_STARTED; } else { return InstanceState.STOPPED; } /* BPMNProcessInstanceOutcomeChecker processInstanceOutcomeChecker; BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome processInstanceOutcome = processInstanceOutcomeChecker.checkProcessOutcome(instanceId.getProcessId().getLocalPart()); if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.UNDEPLOYED_PROCESS) { return InstanceState.NOT_STARTED; } else if(processInstanceOutcome == BPMNProcessInstanceOutcomeChecker.ProcessInstanceOutcome.UNKNOWN){ return InstanceState.STARTED; } else { return InstanceState.STOPPED; } */ } @Override public LogPackage getLogs(InstanceId instanceId) { Path logForInstance = getInstanceLog(instanceId); List<Path> logs = Collections.singletonList(logForInstance); return ZipFileHelper.createLogPackage(logs); } private Path getInstanceLog(InstanceId instanceId) { EngineAPI<?> engine = engineService.getEngineByID(instanceId.toEngineId()); AbstractBPMNEngine bpmnEngine = (AbstractBPMNEngine) engine; return bpmnEngine.getLogForInstance(instanceId.getProcessId().getLocalPart(), instanceId.getInstanceID()); } }