import org.apache.logging.log4j.Logger;\r
import org.w3c.dom.Document;\r
import org.w3c.dom.Element;\r
+import org.w3c.dom.NodeList;\r
\r
public class XMLEncoder implements Visitor {\r
private static final Logger logger = LogManager.getLogger(JobTemplate.class);\r
}\r
inputs.appendChild(newInput);\r
}\r
+\r
if (command.getOutputParameterSequence() != null) {\r
Element outputs = document.createElement("outputs");\r
newCommand.appendChild(outputs);\r
@Override\r
public Object visitParameterDeclaration(ParameterDeclaration parameterDeclaration, Object o) {\r
Document document = (Document) o;\r
- logger.info("document: {}", document.toString());\r
+ boolean parameterExists = false;\r
Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0);\r
Element declarations = (Element) jobtemplate.getElementsByTagName("declarations").item(0);\r
Element parameters = (Element) declarations.getElementsByTagName("parameters").item(0);\r
- Element newParameter = document.createElement("parameter");\r
- newParameter.setAttribute("name", parameterDeclaration.getName());\r
- newParameter.setAttribute("type", parameterDeclaration.getType());\r
- parameters.appendChild(newParameter);\r
+ if (parameters.hasChildNodes()) {\r
+ NodeList childNodes = parameters.getChildNodes();\r
+ for (int i = 0; i < childNodes.getLength(); i++) {\r
+ if (childNodes.item(i).getAttributes().getNamedItem("name").getNodeValue()\r
+ .equals(parameterDeclaration.getName())) {\r
+ parameterExists = true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
\r
+ if (!parameterExists) {\r
+ Element newParameter = document.createElement("parameter");\r
+ newParameter.setAttribute("name", parameterDeclaration.getName());\r
+ newParameter.setAttribute("type", parameterDeclaration.getType());\r
+ parameters.appendChild(newParameter);\r
+ }\r
+ parameterExists = false;\r
return null;\r
+\r
}\r
\r
@Override\r
@Override\r
public Object visitVariableDeclaration(VariableDeclaration variableDeclaration, Object o) {\r
Document document = (Document) o;\r
- logger.info("document: {}", document.toString());\r
+ boolean variableExists = false;\r
Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0);\r
Element declarations = (Element) jobtemplate.getElementsByTagName("declarations").item(0);\r
Element variables = (Element) declarations.getElementsByTagName("variables").item(0);\r
- Element newVariable = document.createElement("variable");\r
- newVariable.setAttribute("name", variableDeclaration.getName());\r
- newVariable.setAttribute("type", variableDeclaration.getType());\r
- variables.appendChild(newVariable);\r
+ if (variables.hasChildNodes()) {\r
+ NodeList childNodes = variables.getChildNodes();\r
+ for (int i = 0; i < childNodes.getLength(); i++) {\r
+ if (childNodes.item(i).getAttributes().getNamedItem("name").getNodeValue()\r
+ .equals(variableDeclaration.getName())) {\r
+ variableExists = true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
\r
+ if (!variableExists) {\r
+ Element newVariable = document.createElement("variable");\r
+ newVariable.setAttribute("name", variableDeclaration.getName());\r
+ newVariable.setAttribute("type", variableDeclaration.getType());\r
+ variables.appendChild(newVariable);\r
+ }\r
+ variableExists = false;\r
return null;\r
}\r
\r
if (!node.get("text").toString().isEmpty()) {\r
JSONArray inputs = (JSONArray) node.get("inputs");\r
InputParameterSequence ips = new InputParameterSequence();\r
- for (int j = 0; j < inputs.size(); j++) {\r
- JSONObject input = (JSONObject) inputs.get(j);\r
- if (input.get("type").toString().equals("param")) {\r
- ips.addParameter(new InputParameter(new ParameterExpression(input.get("name").toString())));\r
- } else {\r
- ips.addParameter(new InputParameter(new VariableExpression(input.get("name").toString())));\r
+ if (inputs != null) {\r
+ for (int j = 0; j < inputs.size(); j++) {\r
+ JSONObject input = (JSONObject) inputs.get(j);\r
+ if (input.get("type").toString().equals("param")) {\r
+ ips.addParameter(new InputParameter(new ParameterExpression(input.get("name").toString())));\r
+ } else {\r
+ ips.addParameter(new InputParameter(new VariableExpression(input.get("name").toString())));\r
+ }\r
}\r
}\r
\r
\r
CallJobStepCommand command = new CallJobStepCommand();\r
command.setInputParameterSequence(ips);\r
- command.setOutputParameterSequence(ops);\r
+ if (ops != null) {\r
+ command.setOutputParameterSequence(ops);\r
+ }\r
command.setType(node.get("text").toString().concat("Step.java"));\r
command.setWeight(1);\r
- template.getCommandSequence().addCommand(command);\r
+ cs.addCommand(command);\r
}\r
}\r
return template;\r