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