git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorSweidan Omar <TFS\sweidan.omar>
Mon, 25 Apr 2022 11:47:29 +0000 (11:47 +0000)
committerSweidan Omar <TFS\sweidan.omar>
Mon, 25 Apr 2022 11:47:29 +0000 (11:47 +0000)
server/user.mediacube.gui/src/user/jobengine/zk/model/JobEditorModel2.java [new file with mode: 0644]

diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/JobEditorModel2.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/JobEditorModel2.java
new file mode 100644 (file)
index 0000000..fd7be21
--- /dev/null
@@ -0,0 +1,395 @@
+package user.jobengine.zk.model;\r
+\r
+import java.text.ParseException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.quartz.CronExpression;\r
+import org.zkoss.bind.annotation.AfterCompose;\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.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zk.ui.Component;\r
+import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zk.ui.select.Selectors;\r
+import org.zkoss.zk.ui.select.annotation.Wire;\r
+import org.zkoss.zk.ui.util.Clients;\r
+import org.zkoss.zul.Button;\r
+import org.zkoss.zul.Checkbox;\r
+import org.zkoss.zul.ListModelList;\r
+import org.zkoss.zul.Messagebox;\r
+import org.zkoss.zul.Textbox;\r
+import org.zkoss.zul.Window;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.jobengine.gui.ComponentBinder;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\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.VariableName;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
+import user.jobengine.server.scheduler.SchedulerService;\r
+import user.jobengine.zk.validator.ChangeValidator;\r
+\r
+public class JobEditorModel2 extends BaseModel {\r
+       private static final String XML = "xml";\r
+       private static final String NEXT_TIME = "nextTime";\r
+       private static final String TEMPLATE = "template";\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String CRONEXPRESSION = "cronexpression";\r
+       @Wire("#resultWin")\r
+       private Window resultWin;\r
+       @Wire("#SaveButton")\r
+       private Button saveButton;\r
+//     @Wire("#nameTextbox")\r
+//     private Textbox nameTextbox;\r
+       @Wire("#templateNameTextbox")\r
+       private Textbox templateNameTextbox;\r
+       @Wire("#activeCheckbox")\r
+       private Checkbox activeCheckbox;\r
+       @Wire("#executeImmediateCheckbox")\r
+       private Checkbox executeImmediateCheckbox;\r
+       @Wire("#cronExpressionTextbox")\r
+       private Textbox cronExpressionTextbox;\r
+       @Wire("#parameterNameTextbox")\r
+       private Textbox parameterNameTextbox;\r
+       @Wire("#parameterValueTextbox")\r
+       private Textbox parameterValueTextbox;\r
+       @Wire("#parameterTypeTextbox")\r
+       private Textbox parameterTypeTextbox;\r
+       private boolean processDataChanged = false;\r
+       private IJobEngine jobEngine;\r
+       private ListModelList<BasicDBObject> jobs;\r
+       private BasicDBObject selectedJob;\r
+       private BasicDBObject editingJob;\r
+       private String oldSelectedJob;\r
+       private BasicDBObject selectedJob2;\r
+       private ListModelList<BasicDBObject> selectedJobs;\r
+       private ChangeValidator changeValidator;\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 close() {\r
+               if (resultWin != null)\r
+                       resultWin.detach();\r
+       }\r
+\r
+       @Command\r
+       public void execute() throws Exception {\r
+               if (selectedJob == null)\r
+                       return;\r
+               String template = selectedJob.getString("template");\r
+\r
+               ScheduledJob scheduledJob = jobEngine.getScheduledJob(template);\r
+\r
+               try {\r
+                       IJobRuntime runtime = scheduledJob.doManualJob();\r
+                       toast(runtime);\r
+               } catch (Exception e) {\r
+                       Messagebox.show(e.getMessage());\r
+               }\r
+               close();\r
+       }\r
+\r
+       @Command\r
+       public void saveButtonClicked() {\r
+               if (processDataChanged) {\r
+                       saveData();\r
+               }\r
+               processDataChanged = false;\r
+               saveButton.setDisabled(true);\r
+       }\r
+\r
+       private void saveData() {\r
+//             selectedJob.remove("name");\r
+//             selectedJob.append("name", nameTextbox.getValue());\r
+               selectedJob.remove("template");\r
+               selectedJob.append("template", templateNameTextbox.getValue());\r
+               selectedJob.remove("active");\r
+               selectedJob.append("active", activeCheckbox.isChecked());\r
+               selectedJob.remove("executeimmediate");\r
+               selectedJob.append("executeimmediate", executeImmediateCheckbox.isChecked());\r
+               selectedJob.remove("cronexpression");\r
+               selectedJob.append("cronexpression", cronExpressionTextbox.getValue());\r
+       }\r
+\r
+//     @Command\r
+//     public void onNameChanged() {\r
+//             setProcessDataChanged(true);\r
+//             selectedJob.remove("name");\r
+//             selectedJob.append("name", nameTextbox.getValue());\r
+//             saveButton.setDisabled(false);\r
+//             logger.info("onNameChanged()");\r
+//     }\r
+\r
+//     @Command\r
+//     public void onNameTextboxClicked() {\r
+//             oldSelectedJob = selectedJob.get("name").toString();\r
+//     }\r
+\r
+       @Command\r
+       public void onTemplateNameChanged() {\r
+               setProcessDataChanged(true);\r
+               selectedJob.remove("templateName");\r
+               selectedJob.append("templateName", templateNameTextbox.getValue());\r
+               saveButton.setDisabled(false);\r
+               logger.info("onTemplateNameChanged()");\r
+       }\r
+\r
+       @Command\r
+       public void onActiveChanged() {\r
+               setProcessDataChanged(true);\r
+               selectedJob.remove("active");\r
+               selectedJob.append("active", activeCheckbox.isChecked());\r
+               saveButton.setDisabled(false);\r
+               logger.info("onActiveCheckBoxChanged()");\r
+       }\r
+\r
+       @Command\r
+       public void onExecuteImmediateChanged() {\r
+               setProcessDataChanged(true);\r
+               selectedJob.remove("executeimmediate");\r
+               selectedJob.append("executeimmediate", executeImmediateCheckbox.isChecked());\r
+               saveButton.setDisabled(false);\r
+               logger.info("onExecuteImmediateCheckBoxChanged()");\r
+       }\r
+\r
+       @Command\r
+       public void onCronExpressionChanged() {\r
+               setProcessDataChanged(true);\r
+               selectedJob.remove("cronexpression");\r
+               selectedJob.append("cronexpression", cronExpressionTextbox.getValue());\r
+               saveButton.setDisabled(false);\r
+               logger.info("onCronExpressionChangedChanged()");\r
+       }\r
+\r
+//     @Command\r
+//     public void onParameterNameChanged() {\r
+//             setProcessDataChanged(!isProcessDataChanged());\r
+//             BasicDBList parameters = (BasicDBList) selectedJob.get("parameters");\r
+//             selectedJob.remove("cronexpression");\r
+//             selectedJob.append("cronexpression", parameterNameTextbox.getValue());\r
+//             saveButton.setDisabled(false);\r
+//             logger.info("onParameterNameChanged()");\r
+//     }\r
+//\r
+//     @Command\r
+//     public void onParameterValueChanged() {\r
+//             setProcessDataChanged(!isProcessDataChanged());\r
+//             BasicDBList parameters = (BasicDBList) selectedJob.get("parameters");\r
+//             selectedJob.remove("cronexpression");\r
+//             selectedJob.append("cronexpression", parameterValueTextbox.getValue());\r
+//             saveButton.setDisabled(false);\r
+//             logger.info("onParameterValueChanged()");\r
+//     }\r
+//\r
+//     @Command\r
+//     public void onParameterTypeChanged() {\r
+//             setProcessDataChanged(!isProcessDataChanged());\r
+//             BasicDBList parameters = (BasicDBList) selectedJob.get("parameters");\r
+//             selectedJob.remove("cronexpression");\r
+//             selectedJob.append("cronexpression", parameterTypeTextbox.getValue());\r
+//             saveButton.setDisabled(false);\r
+//             logger.info("onParameterTypeChanged()");\r
+//     }\r
+\r
+       private void toast(IJobRuntime runtime) {\r
+               Clients.evalJavaScript(\r
+                               String.format("showToast('<b>%s</b> elindĂ­tva.</br>ID %d')", runtime.getName(), runtime.getId()));\r
+       }\r
+\r
+       public ListModelList<BasicDBObject> getJobs() {\r
+               return jobs;\r
+       }\r
+\r
+       public BasicDBObject getSelectedJob() {\r
+               return selectedJob;\r
+       }\r
+\r
+       public ListModelList<BasicDBObject> getSelectedJobs() {\r
+               return selectedJobs;\r
+       }\r
+\r
+       private boolean isProcessDataChanged() {\r
+               return processDataChanged;\r
+       }\r
+\r
+       private void setProcessDataChanged(boolean processDataChanged) {\r
+               this.processDataChanged = processDataChanged;\r
+       }\r
+\r
+       @Init\r
+       public void init() {\r
+               jobEngine = (IJobEngine) Executions.getCurrent().getArg().get("jobEngine");\r
+               if (jobEngine == null)\r
+                       jobEngine = ComponentBinder.getJobEngine();\r
+\r
+               initJobList();\r
+       }\r
+\r
+       private void initJobList() {\r
+               List<BasicDBObject> jobsCollection = new ArrayList<BasicDBObject>();\r
+               for (int index = 0; index < jobEngine.getJobEngineConfiguration().getSchedules().size(); index++) {\r
+                       jobsCollection.add(jobEngine.getJobEngineConfiguration().getSchedules().get(index).getValue());\r
+               }\r
+\r
+               Collections.sort(jobsCollection, (a, b) -> {\r
+                       String aName = a.getString("name");\r
+                       if (aName == null)\r
+                               aName = a.getString("template");\r
+                       String bName = b.getString("name");\r
+                       if (bName == null)\r
+                               bName = b.getString("template");\r
+                       return aName.toLowerCase().compareTo(bName.toLowerCase());\r
+               });\r
+               jobs = new ListModelList<>(jobsCollection);\r
+\r
+       }\r
+\r
+       @Command\r
+       @NotifyChange("jobs")\r
+       public void reload() {\r
+               SchedulerService scheduler = jobEngine.getScheduler();\r
+               try {\r
+                       scheduler.restart();\r
+                       initJobList();\r
+\r
+               } catch (Exception e) {\r
+                       logger.info("Scheduler reload error. System message: {}", e.getMessage());\r
+               }\r
+\r
+       }\r
+\r
+       public void setJobs(ListModelList<BasicDBObject> jobs) {\r
+               this.jobs = jobs;\r
+       }\r
+\r
+       public void setSelectedJob(BasicDBObject selectedJob) {\r
+               this.selectedJob = selectedJob;\r
+\r
+               if (selectedJob == null) {\r
+                       // reset cron next time display\r
+                       // reset editing job\r
+               } else {\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
+                       // update editingJob, create deep copy from selectedJob: a megoldas a\r
+                       // NoSQLUtils-ba keruljon\r
+                       // notify editingJob changed\r
+\r
+               }\r
+\r
+       }\r
+\r
+       public void setSelectedJobs(ListModelList<BasicDBObject> selectedJobs) {\r
+               this.selectedJobs = selectedJobs;\r
+       }\r
+\r
+       @Command\r
+       public void saveSchedule() throws Exception {\r
+               if (selectedJob != null && isProcessDataChanged()) {\r
+                       BasicDBObject scheduleToSave = collectProcessScheduleSettings();\r
+                       jobEngine.getJobEngineConfiguration().saveSchedule(selectedJob);\r
+               }\r
+       }\r
+\r
+       @Command\r
+       public void saveTemplateXml() throws Exception {\r
+               logger.info("saveTemplateXml()");\r
+               if (selectedJob != null && isProcessDataChanged()) {\r
+                       JobTemplate jobTemplateToSave2 = collectProcessTemplateSettings();\r
+                       jobEngine.getJobEngineConfiguration().saveTemplateXml(oldSelectedJob, jobTemplateToSave2);\r
+               }\r
+       }\r
+\r
+       private JobTemplate createDummyTemplate() {\r
+               JobTemplate dummy = new JobTemplate();\r
+               dummy.setName("default-process");\r
+               dummy.setDescription("ez egy description");\r
+\r
+               DeclarationSequence ds = new DeclarationSequence();\r
+               ds.addDeclaration(new ParameterDeclaration("path1", "java.lang.String"));\r
+               ds.addDeclaration(new VariableDeclaration("path2", "java.lang.String"));\r
+\r
+               CallJobStepCommand cjsc = new CallJobStepCommand();\r
+               cjsc.setType("CreateMissingLowresStep.java");\r
+               cjsc.setWeight(1);\r
+               InputParameterSequence ips = new InputParameterSequence();\r
+               ips.addParameter(new InputParameter(new ParameterExpression("path1")));\r
+               cjsc.setInputParameterSequence(ips);\r
+               OutputParameterSequence ops = new OutputParameterSequence();\r
+               ops.addParameter(new OutputParameter(new VariableName("path2")));\r
+               cjsc.setOutputParameterSequence(ops);\r
+\r
+               CommandSequence cs = new CommandSequence();\r
+               cs.addCommand(cjsc);\r
+\r
+               dummy.setDeclarationSequence(ds);\r
+               dummy.setCommandSequence(cs);\r
+\r
+               return dummy;\r
+       }\r
+\r
+       private JobTemplate collectProcessTemplateSettings() {\r
+               JobTemplate jobTemplate = new JobTemplate();\r
+\r
+//             jobTemplate.setName(nameTextbox.getValue());\r
+               jobTemplate.setFileName(templateNameTextbox.getValue());\r
+\r
+               return jobTemplate;\r
+       }\r
+\r
+       private BasicDBObject collectProcessScheduleSettings() {\r
+               return null;\r
+       }\r
+\r
+       @Command\r
+       public void duplicateProcess() {\r
+               if (selectedJob != null) {\r
+                       JobTemplate processToDuplicate = collectProcessTemplateSettings();\r
+//                     jobEngine.getJobEngineConfiguration().duplicateProcess(selectedJob);\r
+                       logger.info("duplicateProcess()");\r
+               }\r
+       }\r
+\r
+       @Command\r
+       public void copyProcessEntry() {\r
+               if (selectedJob != null) {\r
+//                     BasicDBObject scheduleToCopy = collectProcessScheduleSettings();\r
+                       jobEngine.getJobEngineConfiguration().copyProcessEntry(selectedJob);\r
+                       logger.info("copyScheduleEntry()");\r
+               }\r
+       }\r
+}
\ No newline at end of file