use of io.automatiko.engine.api.workflow.VariableInitializer in project automatiko-engine by automatiko-io.
the class AbstractProtobufProcessInstanceMarshaller method readVariableScope.
protected void readVariableScope(MarshallerReaderContext context, Process process, WorkflowProcessInstanceImpl processInstance, AutomatikoMessages.ProcessInstance _instance) throws IOException {
if (_instance.getVariableCount() > 0) {
VariableScope variableScope = (VariableScope) ((io.automatiko.engine.workflow.base.core.Process) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance(variableScope);
for (AutomatikoMessages.Variable _variable : _instance.getVariableList()) {
try {
Object _value = ProtobufProcessMarshaller.unmarshallVariableValue(context, _variable);
if ((boolean) context.env.getOrDefault("_import_", false)) {
VariableInitializer initializer = ((ProcessRuntimeServiceProvider) context.env.get("_services_")).getVariableInitializer();
for (VariableAugmentor augmentor : initializer.augmentors()) {
Variable var = variableScope.findVariable(_variable.getName());
if (augmentor.accept(var, _value)) {
_value = augmentor.augmentOnCreate(process.getId(), process.getVersion(), _instance.getId(), var, _value);
}
}
}
variableScopeInstance.internalSetVariable(_variable.getName(), _value);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("Could not reload variable " + _variable.getName());
}
}
}
}
use of io.automatiko.engine.api.workflow.VariableInitializer in project automatiko-engine by automatiko-io.
the class LightProcessRuntime method createProcessInstance.
private io.automatiko.engine.workflow.base.instance.ProcessInstance createProcessInstance(Process process, CorrelationKey correlationKey, Map<String, Object> parameters) {
io.automatiko.engine.workflow.base.instance.ProcessInstance pi = runtimeContext.createProcessInstance(process, correlationKey);
pi.setProcessRuntime(this);
runtimeContext.setupParameters(pi, parameters, variableInitializer);
Map<String, Object> temp = new HashMap<>();
if (parameters != null) {
temp.putAll(parameters);
}
temp.putAll(pi.getVariables());
String uuid;
if (correlationKey != null) {
uuid = UUID.nameUUIDFromBytes(correlationKey.toExternalForm().getBytes(StandardCharsets.UTF_8)).toString();
((WorkflowProcessInstanceImpl) pi).setCorrelationKey(correlationKey.toExternalForm());
} else {
VariableScope variableScope = (VariableScope) ((ContextContainer) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
Optional<Object> businessKeyVar = variableScope.getVariables().stream().filter(var -> var.hasTag(Variable.BUSINESS_KEY_TAG)).map(v -> temp.get(v.getName())).filter(var -> var != null).findAny();
if (businessKeyVar.isPresent()) {
Object businessKey = businessKeyVar.get();
uuid = UUID.nameUUIDFromBytes(businessKey.toString().getBytes(StandardCharsets.UTF_8)).toString();
((WorkflowProcessInstanceImpl) pi).setCorrelationKey(businessKey.toString());
} else {
uuid = UUID.randomUUID().toString();
}
}
pi.setId(uuid);
VariableScope variableScope = (VariableScope) ((ContextContainer) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
VariableScopeInstance variableScopeInstance = (VariableScopeInstance) pi.getContextInstance(VariableScope.VARIABLE_SCOPE);
// set input parameters
if (parameters != null) {
if (variableScope != null) {
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
variableScope.validateVariable(process.getName(), entry.getKey(), entry.getValue());
variableScopeInstance.setVariable(entry.getKey(), entry.getValue());
}
} else {
throw new IllegalArgumentException("This process does not support parameters!");
}
}
variableScopeInstance.enforceRequiredVariables();
return pi;
}
Aggregations