/*
* Copyright (c) 2010-2013 Evolveum
*
* 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 com.evolveum.midpoint.wf.impl.messages;
import com.evolveum.midpoint.wf.impl.processes.ProcessInterfaceFinder;
import com.evolveum.midpoint.wf.impl.processes.ProcessMidPointInterface;
import com.evolveum.midpoint.wf.impl.processes.common.CommonProcessVariableNames;
import org.activiti.engine.delegate.DelegateExecution;
import java.util.HashMap;
import java.util.Map;
/**
* Process instance event - signals that something has happened with process instance.
*/
public class ProcessEvent {
/**
* Workflow process instance variables.
*/
private final Map<String,Object> variables = new HashMap<>();
/**
* Workflow process instance ID.
*/
private final String pid;
/**
* Is the process still running?
*/
private boolean running;
private String outcome;
public ProcessEvent(DelegateExecution execution, ProcessInterfaceFinder processInterfaceFinder) {
pid = execution.getProcessInstanceId();
running = true;
addVariablesFrom(execution.getVariables());
computeOutcome(processInterfaceFinder);
}
private void computeOutcome(ProcessInterfaceFinder processInterfaceFinder) {
ProcessMidPointInterface pmi = processInterfaceFinder.getProcessInterface(variables);
outcome = pmi.getOutcome(variables);
}
public ProcessEvent(String pid, Map<String, Object> variables, ProcessInterfaceFinder processInterfaceFinder) {
this.pid = pid;
addVariablesFrom(variables);
computeOutcome(processInterfaceFinder);
}
public String getPid() {
return pid;
}
public Map<String, Object> getVariables() {
return variables;
}
public <T> T getVariable(String name, Class<T> clazz) {
return (T) variables.get(name);
}
public void putVariable(String name, Object value) {
variables.put(name, value);
}
public boolean isRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
public void addVariablesFrom(Map<String, Object> map) {
variables.putAll(map);
}
public String getOutcome() {
return outcome;
}
@Override
public String toString() {
return this.getClass().getSimpleName() + "[pid=" + pid + ", running=" + running + ", variables=" + variables + "]";
}
public boolean containsVariable(String varname) {
if (variables == null) {
return false;
} else {
return variables.containsKey(varname);
}
}
public String getProcessDebugInfo() {
return "pid=" + pid + ", name=" + getVariable(CommonProcessVariableNames.VARIABLE_PROCESS_INSTANCE_NAME, String.class);
}
}