public IJobStep createJobStep(String stepUnitName) throws Exception {\r
IJobStep result = null;\r
\r
- boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java") || stepUnitName.toLowerCase().endsWith(".groovy");\r
+ boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java")\r
+ || stepUnitName.toLowerCase().endsWith(".groovy");\r
logger.info("Looking for {} step ClassLoader requirement", stepUnitName);\r
\r
if (resetStepClassLoader) {\r
\r
if (isGroovyClass) {\r
if (dynamicStepsLoader != null)\r
- stepClass = (Class<IJobStep>) dynamicStepsLoader.loadClassFromSourceCode(groovyClassLoader, stepUnitName);\r
+ stepClass = (Class<IJobStep>) dynamicStepsLoader.loadClassFromSourceCode(groovyClassLoader,\r
+ stepUnitName);\r
} else\r
stepClass = (Class<IJobStep>) stepsClassLoader.loadClass(stepUnitName);\r
\r
int newMaxConcurrent = executor.getMaxConcurrent();\r
if (currentMaxConcurrent != newMaxConcurrent) {\r
stepExecutor.setMaxConcurrent(newMaxConcurrent);\r
- logger.info("Executor maxConcurrent changed from {} to {}", currentMaxConcurrent, newMaxConcurrent);\r
+ logger.info("Executor maxConcurrent changed from {} to {}", currentMaxConcurrent,\r
+ newMaxConcurrent);\r
}\r
}\r
\r
JobTemplate jobTemplate = loadTemplate(Paths.get(template));\r
JSONEncoder jsonEncoder = new JSONEncoder();\r
BasicDBObject program = (BasicDBObject) jsonEncoder.visitJobTemplate(jobTemplate, null);\r
- j.put("program", program);\r
+ if (program != null) {\r
+ j.put("program", program);\r
+ } else {\r
+ logger.info("program {} is null!");\r
+ }\r
\r
schedules.add(new SimpleEntry<String, BasicDBObject>(template, j));\r
} catch (Exception e) {\r
BasicDBObject dbo = new BasicDBObject();\r
BasicDBList jobList = new BasicDBList();\r
for (int i = 0; i < schedules.size(); i++) {\r
- BasicDBObject temp= new BasicDBObject();\r
+ BasicDBObject temp = new BasicDBObject();\r
if (schedules.get(i).getValue().get("name") != null) {\r
temp.append("name", schedules.get(i).getValue().get("name"));\r
}\r
if (!Files.isDirectory(templatesPath))\r
throw new FileNotFoundException(templatesPath + " is not a directory!");\r
if (templateToSave.getFileName() != null) {\r
- filePath = templatesPath.toString() + FileSystems.getDefault().getSeparator() + templateToSave.getFileName();\r
+ filePath = templatesPath.toString() + FileSystems.getDefault().getSeparator()\r
+ + templateToSave.getFileName();\r
if (Files.isWritable(Paths.get(filePath))) {\r
logger.info("{} is writable", filePath);\r
} else {\r
logger.info("{} is not writable", filePath);\r
- DosFileAttributeView dos = Files.getFileAttributeView(Paths.get(filePath), DosFileAttributeView.class);\r
+ DosFileAttributeView dos = Files.getFileAttributeView(Paths.get(filePath),\r
+ DosFileAttributeView.class);\r
if (dos != null) {\r
try {\r
dos.setReadOnly(false);\r
String duplicateFileName = null;\r
try {\r
templatesPath = Paths.get(systemConfig.getConfig(DIR_TEMPLATES));\r
- duplicateFileName = FilenameUtils.getName(selectedJob.getString("template")).replace(".xml", "").concat("-copy.xml");\r
+ duplicateFileName = FilenameUtils.getName(selectedJob.getString("template")).replace(".xml", "")\r
+ .concat("-copy.xml");\r
filePath = templatesPath.toString() + FileSystems.getDefault().getSeparator() + duplicateFileName;\r
while (Files.exists(Paths.get(filePath))) {\r
duplicateFileName = FilenameUtils.getName(duplicateFileName).replace(".xml", "").concat("-copy.xml");\r
filePath = templatesPath.toString() + FileSystems.getDefault().getSeparator() + duplicateFileName;\r
}\r
- InputStream is = new FileInputStream(templatesPath.toString() + FileSystems.getDefault().getSeparator() + selectedJob.getString("template"));\r
+ InputStream is = new FileInputStream(templatesPath.toString() + FileSystems.getDefault().getSeparator()\r
+ + selectedJob.getString("template"));\r
Files.copy(is, Paths.get(filePath));\r
} catch (FileNotFoundException e) {\r
logger.error("File not found: {}", filePath);\r
BasicDBObject dbo = (BasicDBObject) o;\r
BasicDBList nodes = (BasicDBList) dbo.get("nodes");\r
BasicDBObject newNode = new BasicDBObject();\r
+ BasicDBList inputs = new BasicDBList();\r
+ BasicDBList outputs = null;\r
+ // az inputs és az outputs elemei egyenként vannak hozzáadva, mert csak\r
+ // Stringgé konvertálva tudja a JS oldal feldolgozni\r
+ List<Parameter> inputParameters = command.getInputParameterSequence().getParameters();\r
+ for (int i = 0; i < inputParameters.size(); i++) {\r
+ BasicDBObject input = new BasicDBObject();\r
+ Expression expression = ((InputParameter) inputParameters.get(i)).getExpression();\r
+ input.append("name", expression.getName());\r
+\r
+ if (expression instanceof ParameterExpression) {\r
+ input.append("type", "param");\r
+ } else {\r
+ input.append("type", "variable");\r
+ }\r
+ inputs.add(input);\r
+ }\r
+ if (command.getOutputParameterSequence() != null) {\r
+ outputs = new BasicDBList();\r
+ List<Parameter> outputParameters = command.getOutputParameterSequence().getParameters();\r
+ for (int i = 0; i < outputParameters.size(); i++) {\r
+ outputs.add(outputParameters.get(i).toString());\r
+ }\r
+ }\r
+\r
newNode.append("name", command.getType().replace("Step.java", "")).append("y", 75).append("w", 100)\r
.append("h", 100).append("connectors", "connectorsForStep")\r
.append("text", command.getType().replace("Step.java", "")).append("fillStyle", "green")\r
- .append("figure", "RectangleWithGradient");\r
+ .append("figure", "RectangleWithGradient").append("inputs", inputs);\r
+ if (outputs != null) {\r
+ newNode.append("outputs", outputs);\r
+ }\r
+\r
nodes.add(newNode);\r
\r
BasicDBList links = (BasicDBList) dbo.get("links");\r
\r
@Override\r
public Object visitDeclarationSequence(DeclarationSequence declarationSequence, Object o) {\r
+ List<Declaration> declarations = declarationSequence.getDeclarations();\r
+ if (declarations != null) {\r
+ for (Declaration declaration : declarations) {\r
+ declaration.visit(this, o);\r
+ }\r
+ }\r
return null;\r
}\r
\r
BasicDBObject dbo = new BasicDBObject();\r
dbo.append("nodes", new BasicDBList());\r
dbo.append("links", new BasicDBList());\r
+ dbo.append("params", new BasicDBList());\r
+ dbo.append("variables", new BasicDBList());\r
\r
+ DeclarationSequence ds = jobTemplate.getDeclarationSequence();\r
+ if (ds != null)\r
+ ds.visit(this, dbo);\r
CommandSequence cs = jobTemplate.getCommandSequence();\r
if (cs != null)\r
cs.visit(this, dbo);\r
\r
@Override\r
public Object visitParameterDeclaration(ParameterDeclaration parameterDeclaration, Object o) {\r
+ BasicDBObject dbo = (BasicDBObject) o;\r
+ BasicDBList params = (BasicDBList) dbo.get("params");\r
+ BasicDBObject newParameter = new BasicDBObject();\r
+ newParameter.append("name", parameterDeclaration.getName()).append("type", parameterDeclaration.getType());\r
+ params.add(newParameter);\r
+\r
return null;\r
}\r
\r
\r
@Override\r
public Object visitVariableDeclaration(VariableDeclaration variableDeclaration, Object o) {\r
+ BasicDBObject dbo = (BasicDBObject) o;\r
+ BasicDBList variables = (BasicDBList) dbo.get("variables");\r
+ BasicDBObject newVariable = new BasicDBObject();\r
+ newVariable.append("name", variableDeclaration.getName()).append("type", variableDeclaration.getType());\r
+ variables.add(newVariable);\r
+\r
return null;\r
}\r
\r
ctx:null,\r
nodes:[],\r
links:[],\r
+ params:[],\r
+ variables:[],\r
myCanvas:null,\r
rough:false,\r
\r
- addNode:function(node){\r
+ addNode: function(node){\r
this.nodes.push(node);\r
},\r
- addLink:function(link){\r
+ \r
+ addLink: function(link){\r
this.links.push(link);\r
},\r
+ \r
+ addParam: function(param){\r
+ this.params.push(param);\r
+ },\r
+ \r
+ addVariable: function(variable){\r
+ this.variables.push(variable);\r
+ },\r
\r
- clean:function(){\r
+ clean: function(){\r
this.ctx.beginPath();\r
\r
var grd = this.ctx.createLinearGradient(0, this.myCanvas.height, this.myCanvas.width, 0);\r
this.ctx.stroke();\r
},\r
\r
- clear:function(){\r
+ clear: function(){\r
this.nodes=[];\r
this.links=[];\r
},\r
\r
- draw:function(){\r
+ draw: function(){\r
this.clean();\r
for (let index = 0; index < this.nodes.length; index++) {\r
this.nodes[index].draw(this.ctx);\r
this.nodes[mouse.selNode].highlight(this.ctx);\r
}\r
},\r
- init:function(canvasName){\r
+ \r
+ init: function(canvasName){\r
this.myCanvas=document.getElementById(canvasName);\r
this.myCanvasContainer=document.getElementById(canvasName).parentElement;\r
this.ctx=this.myCanvas.getContext("2d");\r
\r
},\r
\r
- findNode:function(mouseC){\r
+ findNode: function(mouseC){\r
var minArea=34435345345344;\r
var selIndex=null;\r
for (let index = 0; index < this.nodes.length; index++) {\r
return selIndex;\r
},\r
\r
- copyFrom:function(sourceModel){\r
+ copyFrom: function(sourceModel){\r
model.nodes=[];\r
if (sourceModel.nodes){\r
for (let index = 0; index < sourceModel.nodes.length; index++) {\r
mouse.dragging=null;\r
},\r
\r
- selectNode:function(node){\r
+ selectNode: function(node){\r
mouse.selNode=node;\r
model.draw();\r
},\r
- connector:function(x,y,mode,title,decoration,options){\r
+ \r
+ connector: function(x, y, mode, title, decoration, options){\r
this.x=x;\r
this.y=y;\r
this.mode=mode;\r
return false;\r
};\r
},\r
- anchor:function(x,y,cursorClass)\r
- {\r
+ \r
+ anchor: function(x, y, cursorClass){\r
this.x=x;\r
this.y=y;\r
this.radius=5;\r
return false;\r
};\r
},\r
- node:function(x,y,w,h,connectors,text,fillStyle,figure,args)\r
- {\r
+ \r
+ node: function(x, y, w, h, connectors, text, fillStyle, figure, inputs, outputs, args) {\r
this.textfill=function(ctx) {\r
var fontSize = 12;\r
var lines = new Array();\r
this.h=Number(h);\r
this.data=args;\r
this.connectors=connectors;\r
+ this.inputs=inputs;\r
+ this.outputs=outputs;\r
this.anchors=[\r
new model.anchor(0,0,"nw-resize"),\r
new model.anchor(.5,0,"n-resize"),\r
});\r
}\r
},\r
- link: function(from,to,anchorIndexFrom,anchorIndexTo,text,mode){\r
+ \r
+ link: function(from, to, anchorIndexFrom, anchorIndexTo, text, mode){\r
this.directionToVector=function(cursorClass){\r
switch (cursorClass) {\r
case "w-resize":\r
return false;\r
}\r
},\r
- defaultAnchors:function(figure)\r
- {\r
+ \r
+ param: function(name, type){\r
+ this.name= name;\r
+ this.type= type;\r
+ },\r
+ \r
+ variable: function(name, type){\r
+ this.name= name;\r
+ this.type= type;\r
+ },\r
+ \r
+ defaultAnchors: function(figure) {\r
var anchors=[];\r
switch (figure) {\r
case "Square":\r
}\r
return anchors;\r
}\r
-\r
};\r
\r
var mouse={\r
var optionsInput={\r
dropAllowed:true, \r
dragAllowed:true, \r
- radius:7\r
+ radius: 7\r
};\r
var optionsOutput={\r
dropAllowed:true, \r
dragAllowed:true, \r
- radius:7\r
+ radius: 7\r
};\r
\r
var connectorsForStep=[\r
var arrays= JSON.parse(data);\r
var nodes= arrays.nodes;\r
var links= arrays.links;\r
+ var params= arrays.params;\r
+ var variables= arrays.variables;\r
var xOfNewNode= 30;\r
\r
// start node\r
- model.addNode(new model.node(xOfNewNode, 75, 25, 25, connectorsForStart, "", "black", "Circle"));\r
+ model.addNode(new model.node(xOfNewNode, 75, 25, 25, connectorsForStart, "", "black", "Circle", null, null));\r
xOfNewNode+= 150;\r
\r
for (let i = 0; i < nodes.length; i++) {\r
- model.addNode(new model.node(xOfNewNode, 75, 100, 100, connectorsForStep, nodes[i].text, "", "RectangleWithGradient"));\r
+ model.addNode(new model.node(xOfNewNode, 75, 100, 100, connectorsForStep, nodes[i].text, "", "RectangleWithGradient", nodes[i].inputs, nodes[i].outputs));\r
xOfNewNode+= 150;\r
}\r
// end node\r
- model.addNode(new model.node(xOfNewNode, 75, 25, 25, connectorsForEnd, "", "black", "Circle"));\r
+ model.addNode(new model.node(xOfNewNode, 75, 25, 25, connectorsForEnd, "", "black", "Circle", null, null));\r
\r
//adding links\r
model.addLink(new model.link(0, 1, 0, 0, "", "straight"));\r
- let i = 0; \r
+ let i = 0;\r
if(links.length > 0){\r
- for (; i < links.length; i++) { \r
+ for (; i < links.length; i++) {\r
model.addLink(new model.link(i+1, i+2, 1, 0, "", "straight"));\r
}\r
}\r
model.addLink(new model.link(i, i+1, 1, 0, "", "straight"));\r
model.draw();\r
+ \r
+ for (let i = 0; i < params.length; i++) {\r
+ model.addParam(new model.param(params[i].name, params[i].type));\r
+ }\r
+ \r
+ for (let i = 0; i < variables.length; i++) {\r
+ model.addVariable(new model.variable(variables[i].name, variables[i].type));\r
+ }\r
}
\ No newline at end of file
<tabs visible="true">\r
<tab id="tab0" label="Paraméterek" selected="true" />\r
<tab id="tab1" label="Részletek" />\r
-<!-- <tab id="tab2" label="Folyamat szerkesztő" /> -->\r
+ <tab id="tab2" label="Folyamat szerkesztő" />\r
</tabs>\r
<tabpanels>\r
<tabpanel>\r
<label height="100%" ca:data-syntax-highlight="true" multiline="true" pre="true" \r
value="@bind(jem2.editingJob['xml'])" />\r
</tabpanel>\r
-<!-- <tabpanel> -->\r
-<!-- <include src="/pages/processVisualizer2.zul" /> -->\r
-<!-- </tabpanel> -->\r
+ <tabpanel>\r
+ <include src="/pages/processVisualizer2.zul" />\r
+ </tabpanel>\r
</tabpanels>\r
</tabbox>\r
</vlayout>\r
private Button NewParameterButton;\r
private IJobEngine jobEngine;\r
private ListModelList<BasicDBObject> jobs = new ListModelList<>();\r
-\r
private BasicDBObject selectedJob = new BasicDBObject();\r
private BasicDBObject editingJob = new BasicDBObject();\r
private ListModelList<BasicDBObject> selectedJobs;\r
@NotifyChange("editingJob")\r
public void onNewParameterClicked() {\r
logger.info("onNewParameterClicked");\r
- if(editingJob != null) {\r
- ((BasicDBList) editingJob.get("parameters")).add(new BasicDBObject()\r
- .append("name", "param".concat(String.valueOf(numberOfNewParams)))\r
- .append("type", dataTypes.get(8)));\r
+ if (editingJob != null) {\r
+ ((BasicDBList) editingJob.get("parameters"))\r
+ .add(new BasicDBObject().append("name", "param".concat(String.valueOf(numberOfNewParams)))\r
+ .append("type", dataTypes.get(8)));\r
numberOfNewParams++;\r
}\r
}\r
}\r
\r
@Command\r
- @NotifyChange({"editingJob", "jobs", "selectedJob"})\r
+ @NotifyChange({ "editingJob", "jobs", "selectedJob" })\r
public void saveData() {\r
logger.info("saveData");\r
- \r
+\r
try {\r
jobEngine.getJobEngineConfiguration().saveSchedulesJson(selectedJob, editingJob);\r
} catch (Exception e) {\r
public BasicDBObject getEditingJob() {\r
return editingJob;\r
}\r
- \r
+\r
@NotifyChange("editingJob")\r
public void setEditingJob(BasicDBObject editingJob) {\r
logger.info("setEditingJob");\r
- this.editingJob= editingJob;\r
- if(editingJob == null) {\r
+ this.editingJob = editingJob;\r
+ if (editingJob == null) {\r
return;\r
}\r
updateNextExecutionTime(editingJob);\r
}\r
\r
- @NotifyChange({"editingJob", "selectedJob"})\r
+ @NotifyChange({ "editingJob", "selectedJob" })\r
public void setSelectedJob(BasicDBObject selectedJob) {\r
logger.info("setSelectedJob");\r
if (selectedJob == null) {\r
return;\r
}\r
\r
- this.selectedJob= selectedJob;\r
- this.editingJob= NoSQLUtils.deepCopy(selectedJob);\r
- BindUtils.postGlobalCommand(null, null, "selectedJobChanged", Collections.singletonMap("selectedJob", selectedJob));\r
+ this.selectedJob = selectedJob;\r
+ this.editingJob = NoSQLUtils.deepCopy(selectedJob);\r
+ BindUtils.postGlobalCommand(null, null, "selectedJobChanged",\r
+ Collections.singletonMap("selectedJob", selectedJob));\r
}\r
\r
private void updateNextExecutionTime(BasicDBObject selectedJob) {\r
}\r
\r
@Command\r
- @NotifyChange({"selectedJob", "jobs", "editingJob"})\r
+ @NotifyChange({ "selectedJob", "jobs", "editingJob" })\r
public void reload() {\r
try {\r
jobEngine.reloadGracefully();\r
@NotifyChange("jobs")\r
public void duplicateProcessEntry() {\r
if (selectedJob != null) {\r
- String newTemplateName= jobEngine.getJobEngineConfiguration().duplicateTemplate(selectedJob);\r
+ String newTemplateName = jobEngine.getJobEngineConfiguration().duplicateTemplate(selectedJob);\r
String newProcessName = copyProcessEntry();\r
List<BasicDBObject> innerList = jobs.getInnerList();\r
- \r
- for(int i= 0;i < innerList.size(); i++) {\r
+\r
+ for (int i = 0; i < innerList.size(); i++) {\r
BasicDBObject currentElement = innerList.get(i);\r
- \r
- if(currentElement.get("name").equals(newProcessName)) {\r
+\r
+ if (currentElement.get("name").equals(newProcessName)) {\r
currentElement.replace("template", newTemplateName);\r
break;\r
}\r
}\r
}\r
}\r
- \r
+\r
@Command\r
@NotifyChange("jobs")\r
public String copyProcessEntry() {\r
logger.info("copyProcessEntry");\r
- \r
- String newName= null;\r
+\r
+ String newName = null;\r
if (selectedJob != null) {\r
newName = selectedJob.getString("name").concat("-copy");\r
while (jobEngine.getJobEngineConfiguration().scheduleExists(newName)) {\r
newName = newName.concat("-copy");\r
}\r
- BasicDBObject newEntry= NoSQLUtils.deepCopy(selectedJob);\r
+ BasicDBObject newEntry = NoSQLUtils.deepCopy(selectedJob);\r
newEntry.put("name", newName);\r
- \r
+\r
jobEngine.getJobEngineConfiguration().getSchedules()\r
.add(new SimpleEntry<String, BasicDBObject>(newName, newEntry));\r
jobs.add(newEntry);\r
}\r
- \r
+\r
return newName;\r
}\r
\r
public void setDataTypes(ArrayList<String> dataTypes) {\r
this.dataTypes = dataTypes;\r
}\r
- \r
+\r
public void setJobs(ListModelList<BasicDBObject> jobs) {\r
this.jobs = jobs;\r
}\r
- \r
+\r
public void setSelectedJobs(ListModelList<BasicDBObject> selectedJobs) {\r
this.selectedJobs = selectedJobs;\r
}\r
- \r
+\r
private void initializeDataTypes() {\r
dataTypes.add("java.lang.Byte");\r
dataTypes.add("java.lang.Short");\r