--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import java.util.Collection;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.BindingParam;\r
+import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zul.ListModelList;\r
+import org.zkoss.zul.Window;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.commons.ListUtils;\r
+import user.jobengine.db.ItemManagerData.SignalType;\r
+import user.jobengine.server.IJobChangedListener;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobChangedEvent;\r
+import user.jobengine.server.JobEngine;\r
+import user.jobengine.zk.util.SessionUtil;\r
+\r
+public class MaestroJobListModel extends AsyncBaseModel implements IJobChangedListener {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private ListModelList<IJobRuntime> jobList = new ListModelList<IJobRuntime>();\r
+ private IJobEngine jobEngine = null;\r
+ private int newPriority = 1;\r
+ private Collection<BasicDBObject> selectedJobs;\r
+ private String currentUser = SessionUtil.getUserPrincipal().getAccount();\r
+\r
+ @Command\r
+ public void executeJob() {\r
+ String template = "/pages/jobselector.zul";\r
+ Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("jobEngine", jobEngine));\r
+ window.doModal();\r
+ }\r
+\r
+ public ListModelList<IJobRuntime> getJobList() {\r
+ return jobList;\r
+ }\r
+\r
+ public int getNewPriority() {\r
+ return newPriority;\r
+ }\r
+\r
+ public Collection<BasicDBObject> getSelectedJobs() {\r
+ return selectedJobs;\r
+ }\r
+\r
+ @Init\r
+ public void init() {\r
+ try {\r
+ this.jobEngine = JobEngine.getInstance();\r
+\r
+ if (jobEngine == null)\r
+ throw new Exception("Internal error! JobEngine instance unavailable.");\r
+\r
+ SessionUtil.registerJobChangedListener(this);\r
+\r
+ initializeList();\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ }\r
+\r
+ private void initializeList() {\r
+ jobList.clear();\r
+ Map<Long, IJobRuntime> jobMap = jobEngine.getJobs();\r
+ for (int i=0;i<jobMap.size();i++){\r
+ if (jobMap.get(i).getOwner() == currentUser){\r
+ jobList.add(i, jobMap.get(i));\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void jobChanged(JobChangedEvent event) {\r
+ JobChangedEvent jobEvent = event;\r
+ final IJobRuntime job = jobEvent.getJob();\r
+ if (jobEvent.getSignalType().equals(SignalType.CREATE)) {\r
+ registerTask(() -> onJobCreated(job));\r
+ return;\r
+ }\r
+ if (jobEvent.getSignalType().equals(SignalType.DELETE)) {\r
+ registerTask(() -> onJobDeleted(job));\r
+ return;\r
+ }\r
+ if (jobEvent.getSignalType().equals(SignalType.UPDATE)) {\r
+ registerTask(() -> onJobUpdated(job));\r
+ return;\r
+ }\r
+ }\r
+\r
+ private void onJobCreated(IJobRuntime job) {\r
+ jobList.add(job);\r
+ notifyChange("jobList");\r
+ }\r
+\r
+ private void onJobDeleted(IJobRuntime job) {\r
+ jobList.remove(job);\r
+ notifyChange("jobList");\r
+ }\r
+\r
+ private void onJobUpdated(IJobRuntime job) {\r
+ jobList.notifyChange(job);\r
+ }\r
+\r
+ public void setJobList(ListModelList<IJobRuntime> jobList) {\r
+ this.jobList = jobList;\r
+ }\r
+\r
+\r
+ public void setNewPriority(int newPriority) {\r
+ this.newPriority = newPriority;\r
+ }\r
+\r
+ @NotifyChange({ "updatePriorityDisabled" })\r
+ public void setSelectedJobs(Collection<BasicDBObject> selectedJobs) {\r
+ this.selectedJobs = selectedJobs;\r
+ }\r
+\r
+ @Command\r
+ public void showParameters(@BindingParam("item") IJobRuntime jobRuntime) {\r
+ String template = "/pages/jobparameters.zul";\r
+ Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("jobRuntime", jobRuntime));\r
+ window.doModal();\r
+ }\r
+}\r