/*
* Copyright (c) 2013, Effektif GmbH. All rights reserved.
*/
package com.effektif.script;
import java.util.Map;
import com.effektif.workflow.api.workflow.Script;
import com.effektif.workflow.impl.WorkflowParser;
import com.effektif.workflow.impl.activity.AbstractActivityType;
import com.effektif.workflow.impl.data.TypedValueImpl;
import com.effektif.workflow.impl.workflow.ActivityImpl;
import com.effektif.workflow.impl.workflowinstance.ActivityInstanceImpl;
/**
* @author Tom Baeyens
*/
public class ScriptTaskImpl extends AbstractActivityType<ScriptTask> {
protected ScriptService scriptService;
public ScriptImpl script;
public ScriptTaskImpl() {
super(ScriptTask.class);
}
@Override
public void parse(ActivityImpl activityImpl, ScriptTask scriptTask, WorkflowParser parser) {
super.parse(activityImpl, scriptTask, parser);
this.scriptService = parser.getConfiguration(ScriptService.class);
Script script = scriptTask.getScript();
if (script!=null) {
try {
this.script = scriptService.compile(script, parser);
} catch (Exception e) {
parser.addWarning("Invalid script '%s' : %s", script, e.getMessage());
}
}
}
@Override
public void execute(ActivityInstanceImpl activityInstance) {
if (script!=null) {
ScriptResult scriptResult = script.run(activityInstance);
Map<String, TypedValueImpl> updates = scriptResult!=null ? scriptResult.getUpdates() : null;
if (scriptResult!=null && updates!=null) {
for (String variableId: updates.keySet()) {
TypedValueImpl typedValue = updates.get(variableId);
activityInstance.setVariableValue(variableId, typedValue.value);
}
}
}
activityInstance.onwards();
}
@Override
public boolean isAsync(ActivityInstanceImpl activityInstance) {
return true;
}
}