import org.apache.logging.log4j.Logger;\r
import org.zkoss.bind.annotation.AfterCompose;\r
import org.zkoss.bind.annotation.BindingParam;\r
+import org.zkoss.bind.annotation.Command;\r
import org.zkoss.bind.annotation.ContextParam;\r
import org.zkoss.bind.annotation.ContextType;\r
import org.zkoss.bind.annotation.GlobalCommand;\r
+import org.zkoss.json.JSONArray;\r
+import org.zkoss.json.JSONObject;\r
import org.zkoss.zk.ui.Component;\r
import org.zkoss.zk.ui.event.Event;\r
import org.zkoss.zk.ui.event.SelectEvent;\r
\r
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
+import user.jobengine.server.ast.CallJobStepCommand;\r
+import user.jobengine.server.ast.CommandSequence;\r
+import user.jobengine.server.ast.DeclarationSequence;\r
+import user.jobengine.server.ast.InputParameter;\r
+import user.jobengine.server.ast.InputParameterSequence;\r
+import user.jobengine.server.ast.JobTemplate;\r
+import user.jobengine.server.ast.OutputParameter;\r
+import user.jobengine.server.ast.OutputParameterSequence;\r
+import user.jobengine.server.ast.ParameterDeclaration;\r
+import user.jobengine.server.ast.ParameterExpression;\r
+import user.jobengine.server.ast.VariableDeclaration;\r
+import user.jobengine.server.ast.VariableExpression;\r
+import user.jobengine.server.ast.VariableName;\r
+\r
public class JobFlowChartModel extends BaseModel {\r
private static final Logger logger = LogManager.getLogger();\r
private String selectedTabID = "tab0";\r
}\r
}\r
\r
+ @Command\r
+ public void getFlowchartData() {\r
+ Clients.evalJavaScript("getFlowchartData();");\r
+ }\r
+\r
+ @Command\r
+ public void onFlowchartDataChanged(@ContextParam(ContextType.TRIGGER_EVENT) Event event) {\r
+ logger.info("onFlowchartDataChanged");\r
+ logger.info("template: {}", JSONObjectToJobtemplate((JSONObject) ((JSONObject) event.getData()).get("model"))\r
+ .getStringFromTemplate());\r
+ }\r
+\r
+ private JobTemplate JSONObjectToJobtemplate(JSONObject data) {\r
+ JobTemplate template = new JobTemplate();\r
+ DeclarationSequence ds = new DeclarationSequence();\r
+ template.setDeclarationSequence(ds);\r
+ logger.info("template: {}", template.getStringFromTemplate());\r
+\r
+ JSONArray params = (JSONArray) data.get("params");\r
+ for (int i = 0; i < params.size(); i++) {\r
+ JSONObject param = (JSONObject) params.get(i);\r
+ ds.addDeclaration(new ParameterDeclaration(param.get("name").toString(), param.get("type").toString()));\r
+ }\r
+\r
+ if (data.get("variables") != null && !((JSONArray) data.get("variables")).isEmpty()) {\r
+ JSONArray variables = (JSONArray) data.get("variables");\r
+ for (int i = 0; i < variables.size(); i++) {\r
+ JSONObject variable = (JSONObject) variables.get(i);\r
+ ds.addDeclaration(\r
+ new VariableDeclaration(variable.get("name").toString(), variable.get("type").toString()));\r
+ }\r
+ }\r
+\r
+ CommandSequence cs = new CommandSequence();\r
+ template.setCommandSequence(cs);\r
+ JSONArray steps = (JSONArray) data.get("nodes");\r
+ for (int i = 0; i < steps.size(); i++) {\r
+ JSONObject node = (JSONObject) steps.get(i);\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
+ }\r
+ }\r
+\r
+ OutputParameterSequence ops = null;\r
+ if (node.get("outputs") != null) {\r
+ ops = new OutputParameterSequence();\r
+ JSONArray outputs = (JSONArray) node.get("outputs");\r
+\r
+ for (int j = 0; j < outputs.size(); j++) {\r
+ ops.addParameter(new OutputParameter(new VariableName(outputs.get(j).toString())));\r
+ }\r
+ }\r
+\r
+ CallJobStepCommand command = new CallJobStepCommand();\r
+ command.setInputParameterSequence(ips);\r
+ command.setOutputParameterSequence(ops);\r
+ command.setType(node.get("text").toString().concat("Step.java"));\r
+ command.setWeight(1);\r
+ template.getCommandSequence().addCommand(command);\r
+ }\r
+ }\r
+ return template;\r
+ }\r
+\r
@GlobalCommand\r
public void selectedTabChanged(@BindingParam("evt") SelectEvent<Tab, Event> event) {\r
logger.info("selectedTabChanged");\r