}\r
\r
@Override\r
- public void saveSchedulesJson() throws Exception {\r
+ public void saveSchedulesJson(BasicDBObject originalJob, BasicDBObject newJob) throws Exception {\r
logger.info("saveSchedulesJson()");\r
\r
Path schedulesPath = null;\r
try {\r
schedulesPath = Paths.get(systemConfig.getConfig(CONF_SCHEDULES));\r
-// if (!Files.exists(schedulesPath)) {\r
-// Files.createFile(schedulesPath);\r
-// }\r
if (Files.isDirectory(schedulesPath))\r
throw new FileNotFoundException(schedulesPath + " is a directory!");\r
logger.info("Saving schedules.json to {}", schedulesPath);\r
- BasicDBObject dbo = new BasicDBObject();\r
- BasicDBList jobList = new BasicDBList();\r
- for (int i = 0; i < schedules.size(); i++) {\r
- BasicDBObject temp = schedules.get(i).getValue();\r
- temp.remove("xml");\r
- jobList.add(temp);\r
- }\r
- dbo.put("joblist", jobList);\r
- if (Files.isWritable(schedulesPath)) {\r
- logger.info("{} is writable", schedulesPath);\r
- } else {\r
- logger.info("{} was not writable", schedulesPath);\r
- DosFileAttributeView dos = Files.getFileAttributeView(schedulesPath, DosFileAttributeView.class);\r
- if (dos != null) {\r
- try {\r
- dos.setReadOnly(false);\r
- logger.info("{} is writable");\r
- } catch (IOException e) {\r
- logger.info("IOException: {}", e.getCause());\r
- }\r
+ for (int i = 0; i < getSchedules().size(); i++) {\r
+ BasicDBObject value = getSchedules().get(i).getValue();\r
+ if (value.equals(originalJob)) {\r
+ getSchedules().get(i).setValue(newJob);\r
+ break;\r
}\r
}\r
+ BasicDBObject dbo = assembleSchedulesJson();\r
+ setFileAsWritable(schedulesPath);\r
Files.write(schedulesPath, dbo.toPrettyString("").getBytes());\r
} catch (FileNotFoundException e) {\r
logger.error("File not found: {}", CONF_SCHEDULES);\r
}\r
}\r
\r
+ private BasicDBObject assembleSchedulesJson() {\r
+ BasicDBObject dbo = new BasicDBObject();\r
+ BasicDBList jobList = new BasicDBList();\r
+ for (int i = 0; i < schedules.size(); i++) {\r
+ BasicDBObject temp = schedules.get(i).getValue();\r
+ temp.remove("xml");\r
+ temp.remove("nextTime");\r
+ if(temp.get("active") == null) {\r
+ temp.remove("active");\r
+ }\r
+ if(temp.get("executeimmediate") == null) {\r
+ temp.remove("executeimmediate");\r
+ }\r
+ jobList.add(temp);\r
+ }\r
+ dbo.put("joblist", jobList);\r
+ \r
+ return dbo;\r
+ }\r
+\r
+ private void setFileAsWritable(Path schedulesPath) {\r
+ if (Files.isWritable(schedulesPath)) {\r
+ logger.info("{} is writable", schedulesPath);\r
+ } else {\r
+ logger.info("{} was not writable", schedulesPath);\r
+ DosFileAttributeView dos = Files.getFileAttributeView(schedulesPath, DosFileAttributeView.class);\r
+ if (dos != null) {\r
+ try {\r
+ dos.setReadOnly(false);\r
+ logger.info("{} is now writable");\r
+ } catch (IOException e) {\r
+ logger.info("IOException: {}", e.getCause());\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
@Override\r
public void saveTemplateXml(JobTemplate templateToSave) {\r
logger.info("saveTemplateXml()");\r
}\r
\r
@Override\r
- public void duplicateTemplate(String originalTemplateName) {\r
+ public String duplicateTemplate(BasicDBObject selectedJob) {\r
logger.info("duplicateTemplate()");\r
- if (originalTemplateName == null) {\r
- throw new NullPointerException("originalTemplateName == null");\r
- }\r
\r
Path templatesPath = null;\r
String filePath = null;\r
String duplicateFileName = null;\r
try {\r
templatesPath = Paths.get(systemConfig.getConfig(DIR_TEMPLATES));\r
- if (!Files.isDirectory(templatesPath))\r
- throw new FileNotFoundException(templatesPath + " is not a directory!");\r
- duplicateFileName = FilenameUtils.getName(originalTemplateName).replace(".xml", "").concat("-copy.xml");\r
+ duplicateFileName = FilenameUtils.getName(selectedJob.getString("template")).replace(".xml", "").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(\r
- templatesPath.toString() + FileSystems.getDefault().getSeparator() + originalTemplateName);\r
+ templatesPath.toString() + FileSystems.getDefault().getSeparator() + selectedJob.getString("template"));\r
Files.copy(is, Paths.get(filePath));\r
} catch (FileNotFoundException e) {\r
logger.error("File not found: {}", filePath);\r
} catch (IOException e) {\r
logger.error("IOException: {}", e.getCause());\r
}\r
-\r
+ return duplicateFileName;\r
+ \r
}\r
\r
@Override\r
<toolbar>\r
<toolbarbutton label="Futtatás" iconSclass="z-icon-play" onClick="@command('execute')" \r
disabled="${not sessionScope.userPrincipal.admin}" autodisable="self" />\r
- <toolbarbutton label="scheduledjobs.json mentése" id="SaveScheduleButton" iconSclass="z-icon-save" onClick="@command('saveSchedulesJson')" />\r
- <toolbarbutton label="folyamatsablon mentése" id="SaveTemplateButton" iconSclass="z-icon-save" onClick="@command('saveJobTemplate')" />\r
- <toolbarbutton label="folyamat duplikálása" id="DuplicateTemplateButton" onClick="@command('duplicateTemplate')" />\r
- <toolbarbutton label="folyamat bejegyzés másolása" id="CopyProcessButton" onClick="@command('copyProcessEntry')" />\r
- <toolbarbutton label="Újratöltés" id="reloadButton" iconSclass="z-icon-rotate-right" onClick="@command('reload')" />\r
+ <toolbarbutton label="Duplikálás" iconSclass="z-icon-copy" onClick="@command('duplicateProcessEntry')" />\r
+ <toolbarbutton label="Másolás" id="CopyProcessButton" iconSclass="z-icon-copy" onClick="@command('copyProcessEntry')" />\r
+ <toolbarbutton label="Újratöltés" iconSclass="z-icon-dot-circle-o" onClick="@command('reload')" autodisable="self"/>\r
</toolbar>\r
<borderlayout vflex="true">\r
<center border="none" vflex="true">\r
<tabs visible="true">\r
<tab id="tab0" label="Paraméterek" selected="true" />\r
<tab id="tab1" label="Részletek" />\r
-<!-- <tab id="tab2" label="Ábra" /> -->\r
</tabs>\r
<tabpanels>\r
<tabpanel>\r
- <borderlayout>\r
- <north size="50%" splittable="true">\r
- <grid visible="@bind(not empty jem2.selectedJob)" sizedByContent="false" span="true" vflex="true"\r
- style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" \r
- sclass="listbox-normal-style"\r
- emptyMessage="A részletek megtekintéséhez jelöljön ki egy folyamatot.">\r
- <columns>\r
- <column hflex="min"/>\r
- <column hflex="true"/>\r
- </columns>\r
- <rows>\r
- <row>\r
- <label value="Name"/>\r
- <textbox value="@bind(jem2.selectedJob.name)"/>\r
- </row>\r
- <row>\r
- <label value="Template"/>\r
- <label value="@load(jem2.selectedJob.template)" />\r
- </row>\r
- <row>\r
- <label value="Active" />\r
- <checkbox disabled="true" value="@bind(empty jem2.selectedJob.active ? false : jem2.selectedJob.active)" \r
- onClick="@command('onActiveClicked')" id="ActiveCheckbox"/>\r
- </row>\r
- <row>\r
- <label value="Execute immediate"/>\r
- <checkbox disabled="true" value="@bind(empty jem2.selectedJob.executeimmediate ? false : jem2.selectedJob.executeimmediate)" \r
- onClick="@command('onExecuteImmediateClicked')" id="ExecuteImmediateCheckbox"/>\r
- </row>\r
- <row>\r
- <label value="Cron expression"/>\r
- <textbox value="@bind(jem2.selectedJob.cronexpression)"/>\r
- </row>\r
- <row>\r
- <label value="Next execution"/>\r
- <label value="@bind(jem2.selectedJob.nextTime)"/>\r
- </row>\r
- </rows>\r
- </grid>\r
- </north>\r
- <center border="none" flex="true">\r
- <grid model="@load(jem2.selectedJob.parameters)" style="border: none; background: #e3e3e3 !important;"\r
- oddRowSclass="listbox-odd-style" sclass="listbox-normal-style">\r
+ <vlayout vflex="true" hflex="true">\r
+ <grid visible="@bind(not empty jem2.editingJob)" sizedByContent="false" span="true" \r
+ style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" \r
+ sclass="listbox-normal-style"\r
+ emptyMessage="A részletek megtekintéséhez jelöljön ki egy folyamatot.">\r
+ <columns>\r
+ <column hflex="min"/>\r
+ <column hflex="true"/>\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ <label value="Name"/>\r
+ <textbox value="@bind(jem2.editingJob.name)"/>\r
+ </row>\r
+ <row>\r
+ <label value="Template"/>\r
+ <label value="@load(jem2.editingJob.template)" />\r
+ </row>\r
+ <row>\r
+ <label value="Active" />\r
+ <checkbox disabled="true" value="@bind(empty jem2.editingJob.active ? false : jem2.editingJob.active)" \r
+ onClick="@command('onActiveClicked')" id="ActiveCheckbox"/>\r
+ </row>\r
+ <row>\r
+ <label value="Execute immediate"/>\r
+ <checkbox disabled="true" value="@bind(empty jem2.editingJob.executeimmediate ? false : jem2.editingJob.executeimmediate)" \r
+ onClick="@command('onExecuteImmediateClicked')" id="ExecuteImmediateCheckbox"/>\r
+ </row>\r
+ <row>\r
+ <label value="Cron expression"/>\r
+ <textbox value="@bind(jem2.editingJob.cronexpression)"/>\r
+ </row>\r
+ <row>\r
+ <label value="Next execution"/>\r
+ <label value="@bind(jem2.editingJob.nextTime)"/>\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ <toolbar>\r
+ <toolbarbutton id="NewParameterButton" label="Új paraméter" onClick="@command('onNewParameterClicked')"\r
+ iconSclass="z-icon-plus"/>\r
+ </toolbar>\r
+ <vlayout hflex="true" vflex="true" style="overflow: auto !important;">\r
+ <grid model="@load(jem2.editingJob.parameters)" style="border: none; background: #e3e3e3 !important;"\r
+ oddRowSclass="listbox-odd-style" sclass="listbox-normal-style">\r
<columns sizable="true">\r
<column label="Name" hflex="4"/>\r
<column label="Value" hflex="9"/>\r
</template>\r
</combobox>\r
<button iconSclass="z-icon-trash-o" onClick="@command('onParameterDelete', toBeDeleted=each)" />\r
-<!-- <label value="@load(each.name)" /> -->\r
-<!-- <label value="@load(each.value)" /> -->\r
-<!-- <label value="@load(each.type)" /> -->\r
</row>\r
</template>\r
</rows>\r
</grid>\r
- </center>\r
- <south>\r
- <hlayout>\r
- <button id="SaveButton" label="Save" onClick="@command('saveButtonClicked')" />\r
- <button id="NewParameterButton" label="Új paraméter" onClick="@command('onNewParameterClicked')"/>\r
- </hlayout>\r
- </south>\r
- </borderlayout>\r
+ </vlayout>\r
+ <button label="Save" onClick="@command('saveData')" />\r
+ </vlayout>\r
</tabpanel>\r
<tabpanel>\r
<label height="100%" ca:data-syntax-highlight="true" multiline="true" pre="true" \r
- value="@bind(jem2.selectedJob['xml'])" />\r
+ value="@bind(jem2.editingJob['xml'])" />\r
</tabpanel>\r
-<!-- <tabpanel> -->\r
-<!-- <include src="pages/processVisualizer2.zul" /> -->\r
-<!-- </tabpanel> -->\r
</tabpanels>\r
</tabbox>\r
</vlayout>\r
import java.util.Collections;\r
import java.util.Date;\r
import java.util.List;\r
-\r
-import javax.xml.parsers.ParserConfigurationException;\r
+import java.util.Map.Entry;\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import user.jobengine.gui.ComponentBinder;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.ast.JobTemplate;\r
-import user.jobengine.server.ast.ParameterDeclaration;\r
import user.jobengine.server.scheduler.ScheduledJob;\r
-import user.jobengine.server.scheduler.SchedulerService;\r
\r
public class JobEditorModel2 extends BaseModel {\r
private static final String XML = "xml";\r
private static final String CRONEXPRESSION = "cronexpression";\r
@Wire("#resultWin")\r
private Window resultWin;\r
- @Wire("#SaveButton")\r
- private Button saveButton;\r
@Wire("#ActiveCheckbox")\r
private Checkbox activeCheckbox;\r
@Wire("#ExecuteImmediateCheckbox")\r
private Checkbox executeImmediateCheckbox;\r
@Wire("#NewParameterButton")\r
private Button NewParameterButton;\r
- private boolean processDataChanged = false;\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
-// private ChangeValidator changeValidator = new ChangeValidator(this);\r
-// private TemplateNameValidator templateNameValidator = new TemplateNameValidator(this);\r
-// private CronExpressionValidator cronExpressionValidator = new CronExpressionValidator(this);\r
-// private ParameterNameValidator parameterNameValidator = new ParameterNameValidator(this);\r
-// private ParameterTypeValidator parameterTypeValidator = new ParameterTypeValidator(this);\r
-// private ParameterValueValidator parameterValueValidator = new ParameterValueValidator(this);\r
- private String originalJobName;\r
- private boolean changedSinceLastSave = false;\r
- private boolean parameterTypeChanged = false;\r
- private boolean parameterNameChanged = false;\r
- private boolean jobsListModified;\r
- private BasicDBObject originalJob = new BasicDBObject();\r
private ArrayList<String> dataTypes = new ArrayList<String>();\r
private int numberOfNewParams = 1;\r
\r
- public BasicDBObject getOriginalJob() {\r
- return originalJob;\r
- }\r
-\r
- public void setOriginalJob(BasicDBObject originalJob) {\r
- this.originalJob = originalJob;\r
- }\r
-\r
@AfterCompose\r
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
Selectors.wireComponents(view, this, false);\r
}\r
\r
@Command\r
- public void saveButtonClicked() {\r
-// if (processDataChanged) {\r
-// setChangedSinceLastSave(true);\r
-// setSelectedJob(editingJob);\r
-// setJobsListModified(true);\r
- saveData();\r
-// }\r
-// processDataChanged = false;\r
-// saveButton.setDisabled(true);\r
- }\r
-\r
- @NotifyChange("selectedJob")\r
- @Command\r
+ @NotifyChange("editingJob")\r
public void onNewParameterClicked() {\r
logger.info("onNewParameterClicked()");\r
- ((BasicDBList) selectedJob.get("parameters")).add(new BasicDBObject()\r
- .append("name", "param".concat(String.valueOf(numberOfNewParams)))\r
- .append("value", "default".concat(String.valueOf(numberOfNewParams))).append("type", dataTypes.get(8)));\r
- numberOfNewParams++;\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
+ numberOfNewParams++;\r
+ }\r
}\r
\r
- @NotifyChange("selectedJob")\r
@Command\r
+ @NotifyChange("editingJob")\r
public void onParameterDelete(@BindingParam("toBeDeleted") BasicDBObject toBeDeleted) {\r
logger.info("onParameterDelete(toBeDeleted)");\r
- ((BasicDBList) selectedJob.get("parameters")).remove(toBeDeleted);\r
+ ((BasicDBList) editingJob.get("parameters")).remove(toBeDeleted);\r
}\r
\r
- private void saveData() {\r
+ @Command\r
+ @NotifyChange({"editingJob", "jobs", "selectedJob"})\r
+ public void saveData() {\r
logger.info("saveData()");\r
-// NoSQLUtils.deepCopy(editingJob, selectedJob); \r
- for (int i = 0; i < jobEngine.getJobEngineConfiguration().getSchedules().size(); i++) {\r
- if (jobEngine.getJobEngineConfiguration().getSchedules().get(i).getValue().get("name")\r
- .equals(originalJobName)) {\r
- jobEngine.getJobEngineConfiguration().getSchedules().get(i).getValue().put("name",\r
- selectedJob.get("name"));\r
- jobEngine.getJobEngineConfiguration().getSchedules().get(i).getValue().put("cronexpression",\r
- selectedJob.get("cronexpression"));\r
- jobEngine.getJobEngineConfiguration().getSchedules().get(i).getValue().put("active",\r
- selectedJob.get("active"));\r
- jobEngine.getJobEngineConfiguration().getSchedules().get(i).getValue().put("executeimmediate",\r
- selectedJob.get("executeimmediate"));\r
- ((BasicDBList) jobEngine.getJobEngineConfiguration().getSchedules().get(i).getValue().get("parameters"))\r
- .putAll((BasicDBList) selectedJob.get("parameters"));\r
- originalJobName = selectedJob.getString("name");\r
- }\r
+ \r
+ try {\r
+ jobEngine.getJobEngineConfiguration().saveSchedulesJson(selectedJob, editingJob);\r
+ } catch (Exception e) {\r
+ logger.info("Exception: {}", e.getMessage());\r
}\r
}\r
\r
public BasicDBObject getEditingJob() {\r
return editingJob;\r
}\r
+ \r
+ @NotifyChange("editingJob")\r
+ public void setEditingJob(BasicDBObject editingJob) {\r
+ logger.info("setEditingJob()");\r
+ this.editingJob= editingJob;\r
+ if(editingJob == null) {\r
+ return;\r
+ }\r
+ updateNextExecutionTime(editingJob);\r
+ }\r
\r
+ @NotifyChange({"editingJob", "selectedJob"})\r
public void setSelectedJob(BasicDBObject selectedJob) {\r
- this.selectedJob = selectedJob;\r
- if (selectedJob != null) {\r
- setOriginalJobName(selectedJob.getString("name"));\r
- NoSQLUtils.deepCopy(selectedJob, originalJob);\r
- String cronExpression = selectedJob.getString(CRONEXPRESSION);\r
- if (StringUtils.isBlank(cronExpression))\r
- return;\r
-\r
- try {\r
- CronExpression ce = new CronExpression(cronExpression);\r
- Date nextTime = ce.getNextValidTimeAfter(new Date());\r
- selectedJob.put(NEXT_TIME, nextTime);\r
- } catch (ParseException e) {\r
- logger.catching(e);\r
- }\r
+ logger.info("setSelectedJob()");\r
+ if (selectedJob == null) {\r
+ this.selectedJob = null;\r
+ this.editingJob = null;\r
+ return;\r
+ }\r
+\r
+ this.selectedJob= selectedJob;\r
+ this.editingJob= NoSQLUtils.deepCopy(selectedJob);\r
+ }\r
+\r
+ private void updateNextExecutionTime(BasicDBObject selectedJob) {\r
+ String cronExpression = selectedJob.getString(CRONEXPRESSION);\r
+ if (StringUtils.isBlank(cronExpression))\r
+ return;\r
+\r
+ try {\r
+ CronExpression ce = new CronExpression(cronExpression);\r
+ Date nextTime = ce.getNextValidTimeAfter(new Date());\r
+ selectedJob.put(NEXT_TIME, nextTime);\r
+ } catch (ParseException e) {\r
+ logger.catching(e);\r
}\r
}\r
\r
return selectedJobs;\r
}\r
\r
- public boolean isProcessDataChanged() {\r
- return processDataChanged;\r
- }\r
-\r
- public void setProcessDataChanged(boolean processDataChanged) {\r
- this.processDataChanged = processDataChanged;\r
- }\r
-\r
@Init\r
public void init() {\r
- dataTypes.add("java.lang.Byte");\r
- dataTypes.add("java.lang.Short");\r
- dataTypes.add("java.lang.Integer");\r
- dataTypes.add("java.lang.Long");\r
- dataTypes.add("java.lang.Float");\r
- dataTypes.add("java.lang.Double");\r
- dataTypes.add("java.lang.Boolean");\r
- dataTypes.add("java.lang.Char");\r
- dataTypes.add("java.lang.String");\r
- dataTypes.add("com.ibm.nosql.json.api.BasicDBList");\r
- dataTypes.add("com.ibm.nosql.json.api.BasicDBObject");\r
+ initializeDataTypes();\r
\r
jobEngine = (IJobEngine) Executions.getCurrent().getArg().get("jobEngine");\r
if (jobEngine == null)\r
\r
private void initJobList() {\r
setSelectedJob(null);\r
- setOriginalJobName(null);\r
-// setEditingJob(null);\r
+ setEditingJob(null);\r
jobs.clear();\r
List<BasicDBObject> jobsCollection = new ArrayList<BasicDBObject>();\r
\r
- for (int index = 0; index < jobEngine.getJobEngineConfiguration().getSchedules().size(); index++) {\r
- jobsCollection.add(jobEngine.getJobEngineConfiguration().getSchedules().get(index).getValue());\r
+ ArrayList<Entry<String, BasicDBObject>> schedules = jobEngine.getJobEngineConfiguration().getSchedules();\r
+ for (int index = 0; index < schedules.size(); index++) {\r
+ jobsCollection.add(schedules.get(index).getValue());\r
}\r
\r
Collections.sort(jobsCollection, (a, b) -> {\r
}\r
\r
@Command\r
- @NotifyChange("jobs")\r
+ @NotifyChange({"selectedJob", "jobs", "editingJob"})\r
public void reload() {\r
- SchedulerService scheduler = jobEngine.getScheduler();\r
try {\r
- scheduler.restart();\r
- initJobList();\r
+ jobEngine.reloadGracefully();\r
} catch (Exception e) {\r
- logger.info("Scheduler reload error. System message: {}", e.getMessage());\r
+ Messagebox.show(e.getMessage(), "Hiba!", Messagebox.OK, Messagebox.ERROR);\r
}\r
- }\r
-\r
- public void setJobs(ListModelList<BasicDBObject> jobs) {\r
- this.jobs = jobs;\r
- }\r
-\r
- public void setSelectedJobs(ListModelList<BasicDBObject> selectedJobs) {\r
- this.selectedJobs = selectedJobs;\r
- }\r
-\r
- @Command\r
- public void saveSchedulesJson() throws Exception {\r
- logger.info("saveSchedulesJson()");\r
-// if (jobsListModified) {\r
- jobEngine.getJobEngineConfiguration().saveSchedulesJson();\r
-// setJobsListModified(false);\r
-// }\r
+ initJobList();\r
}\r
\r
@Command\r
- public void saveJobTemplate(JobTemplate template) throws Exception {\r
- logger.info("saveJobTemplate()");\r
- JobTemplate jt = new JobTemplate();\r
-\r
- try {\r
- for (int i = 0; i < jobEngine.getJobEngineConfiguration().getTemplates().size(); i++) {\r
- JobTemplate currentTemplate = jobEngine.getJobEngineConfiguration().getTemplates().get(i);\r
- if (currentTemplate.getName() != null) {\r
- if (currentTemplate.getName().equals(originalJobName)) {\r
- jt = currentTemplate;\r
- } else if (currentTemplate.getFileName().equals(selectedJob.getString("template"))) {\r
- jt = currentTemplate;\r
- }\r
- } else if (currentTemplate.getFileName() != null) {\r
- if (currentTemplate.getFileName().equals(selectedJob.getString("template"))) {\r
- jt = currentTemplate;\r
- }\r
- }\r
- }\r
-\r
- if (changedSinceLastSave) {\r
- if (parameterNameChanged || parameterTypeChanged) {\r
- int j = 0;\r
- for (int i = 0; i < jt.getDeclarationSequence().getDeclarations().size(); i++) {\r
- String simpleName = jt.getDeclarationSequence().getDeclarations().get(i).getType().getClass()\r
- .getSimpleName();\r
- if (simpleName.equals("ParameterDeclaration")) {\r
- String name = ((BasicDBObject) ((BasicDBList) selectedJob.get("parameters")).get(j))\r
- .getString("name");\r
- String type = ((BasicDBObject) ((BasicDBList) selectedJob.get("parameters")).get(j))\r
- .getString("type");\r
- j++;\r
- jt.getDeclarationSequence().getDeclarations().set(i, new ParameterDeclaration(name, type));\r
- }\r
- }\r
- }\r
-\r
- if (originalJobName != null) {\r
- jt.setName(originalJobName);\r
+ @NotifyChange("jobs")\r
+ public void duplicateProcessEntry() {\r
+ if (selectedJob != null) {\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
+ BasicDBObject currentElement = innerList.get(i);\r
+ \r
+ if(currentElement.get("name").equals(newProcessName)) {\r
+ currentElement.replace("template", newTemplateName);\r
+ break;\r
}\r
-\r
}\r
-\r
- jobEngine.getJobEngineConfiguration().saveTemplateXml(jt);\r
- } catch (ParserConfigurationException e) {\r
- logger.info("ParserConfigurationException: {}", e.getCause());\r
}\r
}\r
-\r
- @Command\r
- public void duplicateTemplate() {\r
-// if (editingJob != null) {\r
- jobEngine.getJobEngineConfiguration().duplicateTemplate(selectedJob.getString("template"));\r
-// }\r
- }\r
-\r
+ \r
@Command\r
@NotifyChange("jobs")\r
- public void copyProcessEntry() {\r
- logger.info("copyScheduleEntry()");\r
-// if (editingJob != null) {\r
-// String newName = editingJob.getString("name").concat("-copy");\r
- String newName = selectedJob.getString("name").concat("-copy");\r
- while (jobEngine.getJobEngineConfiguration().scheduleExists(newName)) {\r
- newName = newName.concat("-copy");\r
+ public String copyProcessEntry() {\r
+ logger.info("copyProcessEntry()");\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
+ newEntry.put("name", newName);\r
+ \r
+ jobEngine.getJobEngineConfiguration().getSchedules()\r
+ .add(new SimpleEntry<String, BasicDBObject>(newName, newEntry));\r
+ jobs.add(newEntry);\r
}\r
- BasicDBObject newEntry = new BasicDBObject();\r
-// NoSQLUtils.deepCopy(editingJob, newEntry);\r
- NoSQLUtils.deepCopy(selectedJob, newEntry);\r
- newEntry.put("name", newName);\r
-\r
- jobEngine.getJobEngineConfiguration().getSchedules()\r
- .add(new SimpleEntry<String, BasicDBObject>(newName, newEntry));\r
- jobs.add(newEntry);\r
- setJobsListModified(true);\r
-// }\r
- }\r
-\r
-// public CronExpressionValidator getCronExpressionValidator() {\r
-// return cronExpressionValidator;\r
-// }\r
-//\r
-// public void setCronExpressionValidator(CronExpressionValidator cronExpressionValidator) {\r
-// this.cronExpressionValidator = cronExpressionValidator;\r
-// }\r
-\r
-// public TemplateNameValidator getTemplateNameValidator() {\r
-// return templateNameValidator;\r
-// }\r
-\r
-// public ChangeValidator getChangeValidator() {\r
-// return changeValidator;\r
-// }\r
-\r
-// public ParameterNameValidator getParameterNameValidator() {\r
-// return parameterNameValidator;\r
-// }\r
-//\r
-// public void setParameterNameValidator(ParameterNameValidator parameterNameValidator) {\r
-// this.parameterNameValidator = parameterNameValidator;\r
-// }\r
-//\r
-// public ParameterTypeValidator getParameterTypeValidator() {\r
-// return parameterTypeValidator;\r
-// }\r
-//\r
-// public void setParameterTypeValidator(ParameterTypeValidator parameterTypeValidator) {\r
-// this.parameterTypeValidator = parameterTypeValidator;\r
-// }\r
-\r
-// public ParameterValueValidator getParameterValueValidator() {\r
-// return parameterValueValidator;\r
-// }\r
-//\r
-// public void setParameterValueValidator(ParameterValueValidator parameterValueValidator) {\r
-// this.parameterValueValidator = parameterValueValidator;\r
-// }\r
-\r
- public Button getSaveButton() {\r
- return saveButton;\r
- }\r
-\r
- public String getOriginalJobName() {\r
- return originalJobName;\r
- }\r
-\r
- public void setOriginalJobName(String originalJobName) {\r
- this.originalJobName = originalJobName;\r
- }\r
-\r
- public void setParameterTypeChanged(boolean parameterTypeChanged) {\r
- this.parameterTypeChanged = parameterTypeChanged;\r
- }\r
-\r
- public void setParameterNameChanged(boolean parameterNameChanged) {\r
- this.parameterNameChanged = parameterNameChanged;\r
- }\r
-\r
- public boolean isChangedSinceLastSave() {\r
- return changedSinceLastSave;\r
- }\r
-\r
- public void setChangedSinceLastSave(boolean changedSinceLastSave) {\r
- this.changedSinceLastSave = changedSinceLastSave;\r
- }\r
-\r
- public boolean isJobsListModified() {\r
- return jobsListModified;\r
- }\r
-\r
- public void setJobsListModified(boolean jobsListModified) {\r
- this.jobsListModified = jobsListModified;\r
+ \r
+ return newName;\r
}\r
\r
public BasicDBObject getSelectedJob() {\r
return selectedJob;\r
}\r
\r
-// public void setSelectedJob(BasicDBObject selectedJob) {\r
-// this.selectedJob = selectedJob;\r
-// }\r
-\r
-// public void setEditingJob(BasicDBObject editingJob) {\r
-//\r
-// }\r
-\r
public ArrayList<String> getDataTypes() {\r
return dataTypes;\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
+ public void setSelectedJobs(ListModelList<BasicDBObject> selectedJobs) {\r
+ this.selectedJobs = selectedJobs;\r
+ }\r
+ \r
+ private void initializeDataTypes() {\r
+ dataTypes.add("java.lang.Byte");\r
+ dataTypes.add("java.lang.Short");\r
+ dataTypes.add("java.lang.Integer");\r
+ dataTypes.add("java.lang.Long");\r
+ dataTypes.add("java.lang.Float");\r
+ dataTypes.add("java.lang.Double");\r
+ dataTypes.add("java.lang.Boolean");\r
+ dataTypes.add("java.lang.Char");\r
+ dataTypes.add("java.lang.String");\r
+ dataTypes.add("com.ibm.nosql.json.api.BasicDBList");\r
+ dataTypes.add("com.ibm.nosql.json.api.BasicDBObject");\r
+ }\r
}
\ No newline at end of file