/*
* Copyright (c) 2013, Effektif GmbH. All rights reserved.
*/
package com.effektif.script;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.effektif.workflow.api.activities.NoneTask;
import com.effektif.workflow.api.bpmn.BpmnElement;
import com.effektif.workflow.api.bpmn.BpmnReader;
import com.effektif.workflow.api.bpmn.BpmnWriter;
import com.effektif.workflow.api.bpmn.XmlElement;
import com.effektif.workflow.api.json.TypeName;
import com.effektif.workflow.api.workflow.Script;
/**
* A script task - JavaScript code that will be executed by the process engine.
*
* @see <a href="https://github.com/effektif/effektif/wiki/Script-Task">Script Task</a>
* @author Tom Baeyens
*/
@TypeName("scriptTask")
@BpmnElement("scriptTask")
public class ScriptTask extends NoneTask {
protected Script script;
// @Override
// public void readJson(JsonReader r) {
// script = r.readObject("script");
// super.readJson(r);
// }
//
// @Override
// public void writeJson(JsonWriter w) {
// super.writeJson(w);
// w.writeWritable("script", script);
// }
@Override
public void readBpmn(BpmnReader r) {
r.startExtensionElements();
script = new Script();
script.setLanguage(r.readTextEffektif("language"));
script.setScript(r.readTextEffektif("script"));
List<XmlElement> mappingElements = r.readElementsEffektif("mapping");
Map<String, String> mappings = null;
for (XmlElement mappingElement: mappingElements) {
r.startElement(mappingElement);
if (mappings==null) {
mappings = new HashMap<>();
}
String scriptVariableName = r.readStringAttributeEffektif("scriptVariableName");
String workflowVariableId = r.readStringAttributeEffektif("workflowVariableId");
mappings.put(scriptVariableName, workflowVariableId);
r.endElement();
}
script.setMappings(mappings);
r.endExtensionElements();
super.readBpmn(r);
}
@Override
public void writeBpmn(BpmnWriter w) {
super.writeBpmn(w);
if (script!=null) {
w.startExtensionElements();
w.writeTextElementEffektif("language", script.getLanguage());
w.writeCDataTextEffektif("script", script.getScript());
Map<String, String> mappings = script.getMappings();
if (mappings!=null) {
for (String scriptVariableName: mappings.keySet()) {
String workflowVariableId = mappings.get(scriptVariableName);
w.startElementEffektif("mapping");
w.writeStringAttributeEffektif("scriptVariableName", scriptVariableName);
w.writeStringAttributeEffektif("workflowVariableId", workflowVariableId);
w.endElement();
}
}
w.endExtensionElements();
}
}
@Override
public ScriptTask id(String id) {
super.id(id);
return this;
}
public ScriptTask script(Script script) {
this.script = script;
return this;
}
public ScriptTask script(String script) {
if (this.script == null) {
this.script = new Script();
}
this.script.script(script);
return this;
}
public ScriptTask scriptMapping(String scriptVariableName, String variableId) {
if (this.script == null) {
this.script = new Script();
}
this.script.mapping(scriptVariableName, variableId);
return this;
}
public Script getScript() {
return script;
}
public void setScript(Script script) {
this.script = script;
}
}