git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 12 Feb 2018 15:49:35 +0000 (15:49 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 12 Feb 2018 15:49:35 +0000 (15:49 +0000)
server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java
server/user.jobengine.osgi.commons/src/user/commons/morpheus/MorpheusStrings.java
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/ScheduledJob.java
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/EscortFiles.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java

index 49bcb3aa10d98ee1e7de54eda014f7f60e397553..cc96b017951946e42b428d9d3294165c07458870 100644 (file)
@@ -3,6 +3,7 @@
        <declarations>\r
                <parameters>\r
                        <parameter name="material" type="com.ibm.nosql.json.api.BasicDBObject" />\r
+                       <parameter name="targetPath" type="java.lang.String" />\r
                </parameters>\r
        </declarations>\r
        <commands>\r
@@ -11,6 +12,9 @@
                                <input>\r
                                        <parameter name="material" />\r
                                </input>\r
+                               <input>\r
+                                       <parameter name="targetPath" />\r
+                               </input>\r
                        </inputs>\r
                </calljobstep>\r
        </commands>\r
index c5796eb4017b77cc3fa8dee331d2d54d02b8b809..4a0eadd98ee33f30273d3f93d69c29b369e8bb30 100644 (file)
@@ -47,7 +47,7 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep {
        private IJobRuntime jobRuntime;\r
        private int overall;\r
        private int current;\r
-       private final SimpleDateFormat enDateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss:S", Locale.ENGLISH);\r
+       private final SimpleDateFormat enDateFormat = new SimpleDateFormat(MorpheusStrings.FORMAT_TIME_TO_AIR, Locale.ENGLISH);\r
 \r
        private Map<String, Integer> buildMetadataMap(Path csvFilePath, String[] data) throws Exception {\r
                Map<String, Integer> result = new HashMap<>();\r
@@ -132,6 +132,7 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep {
                        } else {\r
                                logger.info(jobRuntime.getMarker(), "Az '{}' anyag megtalálható az archívumban.", materialID);\r
                                dbObject.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_RESTORABLE);\r
+                               dbObject.put(MorpheusStrings.MEDIAID, medias.get(0).getId());\r
                        }\r
 \r
                }\r
index 65718f14104c3e9b6033db0d084359068b29e125..db95b6ae7c12f4166114a46df15bba4f93388fd6 100644 (file)
@@ -1,13 +1,7 @@
 package user.jobengine.server.steps;\r
 \r
 import java.io.IOException;\r
-import java.nio.file.Files;\r
-import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
-import java.nio.file.attribute.FileAttribute;\r
-import java.nio.file.attribute.PosixFilePermission;\r
-import java.nio.file.attribute.PosixFilePermissions;\r
-import java.util.Set;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
@@ -42,17 +36,6 @@ public class OutputPathAndNameSelectorStep extends JobStep {
                }\r
        }\r
 \r
-       private void ensureTargetPathExistence(String targetPath) throws IOException {\r
-               Path directoryPath = Paths.get(targetPath);\r
-               boolean create = !Files.exists(directoryPath) || !Files.isDirectory(directoryPath);\r
-\r
-               if (create) {\r
-                       Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
-                       FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
-                       Files.createDirectory(directoryPath, attr);\r
-               }\r
-       }\r
-\r
        @StepEntry\r
        public Object[] execute(String trafficOutputPath, String octopusOutputPath, String genericOutputPath, String houseId, IJobEngine jobEngine,\r
                        IJobRuntime jobRuntime) throws IOException {\r
@@ -75,10 +58,9 @@ public class OutputPathAndNameSelectorStep extends JobStep {
                }\r
                String targetNamePattern = houseId + TARGETNAMEPATTERN;\r
                try {\r
-                       ensureTargetPathExistence(targetPath);\r
+                       EscortFiles.ensureUNCFolder(Paths.get(targetPath));\r
                } catch (Exception e) {\r
-                       logger.catching(e);\r
-                       logger.error(jobRuntime.getMarker(), "A cél mappa '{}' nem létezik és hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage());\r
+                       logger.error(jobRuntime.getMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage());\r
                        throw e;\r
                }\r
                return new Object[] { targetPath, targetNamePattern };\r
index 6d1d78a929e8d9b33651ca5f650a529f8331d330..fa06a547b586be4e81e6dfb7aef4aa371a6cf46f 100644 (file)
@@ -66,7 +66,7 @@ public class TSMRestoreStep extends JobStep {
                } catch (Exception e) {\r
                        Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage());\r
                        logger.error(getMarker(), msg);\r
-                       logger.error(jobRuntime.getMarker(), msg);\r
+                       //logger.error(jobRuntime.getMarker(), msg);\r
                        logger.catching(e);\r
                        throw e;\r
                }\r
index 7cb0e8f6d9d6679e5f498047e9d727cf3268b436..efb9e9081484b19134ec8df6ae3cdc0065183c3b 100644 (file)
@@ -9,37 +9,35 @@ import com.ibm.nosql.json.api.DBCollection;
 \r
 import user.commons.morpheus.MorpheusStrings;\r
 import user.commons.nosql.NoSQLUtils;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 \r
-public class TSMRetrieveMissingMaterialStep extends JobStep {\r
+public class TSMRetrieveMissingMaterialStep extends TSMRestoreStep {\r
+       private static final String TARGETNAMEPATTERN = "%s";\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
-       public Object[] execute(BasicDBObject material, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               logger.info(jobRuntime.getMarker(), "Starting");\r
+       public Object[] execute(BasicDBObject material, String targetPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                try {\r
-                       for (int i = 0; i < 10; i++) {\r
-                               jobRuntime.incrementProgress((i + 1) * 10);\r
-                               Thread.sleep(100);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(e.getMessage());\r
-               }\r
-               logger.info(jobRuntime.getMarker(), "Finished");\r
-\r
-               DB db = NoSQLUtils.getNoSQLDB();\r
-               DBCollection collection = db.getCollection(MorpheusStrings.COLLECTION_NAME);\r
-               try {\r
-                       material.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_DONE);\r
+                       IItemManager itemManager = jobEngine.getItemManager();\r
+                       Media mediaCubeMedia = itemManager.getMedia(material.getLong(MorpheusStrings.MEDIAID));\r
+                       super.execute(mediaCubeMedia, targetPath, TARGETNAMEPATTERN, null, 0, jobEngine, jobRuntime);\r
+                       saveMaterial(material, MorpheusStrings.STATUS_DONE);\r
                } catch (Exception e) {\r
+                       saveMaterial(material, MorpheusStrings.STATUS_ERROR);\r
                        logger.catching(e);\r
-                       material.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_ERROR);\r
                        throw e;\r
-               } finally {\r
-                       collection.save(material);\r
                }\r
                return null;\r
        }\r
 \r
+       private void saveMaterial(BasicDBObject material, String status) throws Exception {\r
+               DB db = NoSQLUtils.getNoSQLDB();\r
+               DBCollection collection = db.getCollection(MorpheusStrings.COLLECTION_NAME);\r
+               material.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_DONE);\r
+               collection.save(material);\r
+       }\r
+\r
 }\r
index 56e25655a7041feaa273d5eacae662670cca16b2..9e775f5f0d03e46b105e273139c54bb260d6e5dc 100644 (file)
@@ -15,6 +15,9 @@ public class MorpheusStrings {
        public static final String TIMETOAIR = "TimetoAir";\r
        public static final String TIME_TO_AIR = "Time to Air";\r
        public static final String STATUS = "Status";\r
+       public static final String MEDIAID = "MediaID";\r
+\r
+       public static final String FORMAT_TIME_TO_AIR = "dd-MMM-yyyy HH:mm:ss:S";\r
 \r
        public static final String STATUS_RETRIEVING = "RETRIEVING";\r
        public static final String STATUS_RESTORABLE = "RESTORABLE";\r
index 1b7bdb4b5a38ddeb501ec7bbaa5ceaa3112bd29d..6786db7326169541a35faa7d10b79f1fdecf115b 100644 (file)
@@ -18,7 +18,7 @@
        <custom-attributes org.zkoss.zul.listbox.preloadSize="50" />\r
        \r
        <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')" >\r
-               <timer id="timer" delay="500" repeats="true" onTimer="@command('refreshJobList')" />\r
+               <timer id="timer" delay="100" repeats="true" onTimer="@command('uiTick')" />\r
 \r
                <space bar="false" />\r
                \r
index b4dfc69c4124a03c2019584b03172750b2f7f381..a7313a249b3574154265ca6d80107373aad2e49c 100644 (file)
@@ -70,6 +70,10 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                return jobName;\r
        }\r
 \r
+       public Map<String, Object> getJobParameters() {\r
+               return jobParameters;\r
+       }\r
+\r
        public String getTemplateName() {\r
                return templateName;\r
        }\r
@@ -125,4 +129,5 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
        public String toString() {\r
                return String.format("!%s! %s", jobName, templateName);\r
        }\r
+\r
 }\r
index fb66fee7a91093b1b6ec4e46bbb85387c1ca0749..3c5e6072e0347baf937dce44459047af09834f88 100644 (file)
@@ -34,14 +34,20 @@ import user.commons.CalendarUtils;
 \r
 public class EscortFiles {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private static final String KILLDATE_NAME = "%s.%s.killdate";\r
-       private static final String YYYYMMDD = "yyyyMMdd";\r
+       private static final String EXTENDEDAGENCY = "ExtendedAgency";\r
+       private static final String EXTENDEDDESCRIPTION = "ExtendedDescription";\r
+       private static final String KILLDATE = "KillDate";\r
+       private static final String FORMAT_KILLDATE = "MM-dd-yyyy";\r
+       private static final String EXTENDEDID = "extendedId";\r
+       private static final String ID = "ID";\r
+       private static final String KILLDATE_FILENAME = "%s.%s.killdate";\r
+       private static final String FORMAT_KILLDATENAME = "yyyyMMdd";\r
        public static final String STATUSFOLDER = ".STATUS";\r
 \r
        public static String composeKillDate(int days) {\r
                Calendar killDate = Calendar.getInstance();\r
                killDate.add(Calendar.DAY_OF_YEAR, days);\r
-               SimpleDateFormat dateFormat = new SimpleDateFormat(YYYYMMDD);\r
+               SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT_KILLDATENAME);\r
                return dateFormat.format(killDate.getTime());\r
        }\r
        /*\r
@@ -54,7 +60,7 @@ public class EscortFiles {
        */\r
 \r
        private static String composeKillDateFileName(String fileName, int days) {\r
-               return String.format(KILLDATE_NAME, fileName, composeKillDate(days));\r
+               return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days));\r
        }\r
 \r
        public static byte[] createNEXIOKillDateFile(String fileName, Date killDate, String description, String agency) throws Exception {\r
@@ -63,17 +69,17 @@ public class EscortFiles {
                DOMImplementation impl = db.getDOMImplementation();\r
                Document xmlDocument = impl.createDocument(null, null, null);\r
 \r
-               Element root = xmlDocument.createElement("ID");\r
-               root.setAttribute("extendedId", fileName);\r
+               Element root = xmlDocument.createElement(ID);\r
+               root.setAttribute(EXTENDEDID, fileName);\r
                if (killDate != null) {\r
-                       String sKillDate = CalendarUtils.toString(CalendarUtils.createCalendar(killDate), "MM-dd-yyyy");\r
-                       root.appendChild(xmlDocument.createElement("KillDate")).appendChild(xmlDocument.createTextNode(sKillDate));\r
+                       String sKillDate = CalendarUtils.toString(CalendarUtils.createCalendar(killDate), FORMAT_KILLDATE);\r
+                       root.appendChild(xmlDocument.createElement(KILLDATE)).appendChild(xmlDocument.createTextNode(sKillDate));\r
                }\r
 \r
                if (StringUtils.isNotBlank(description))\r
-                       root.appendChild(xmlDocument.createElement("ExtendedDescription")).appendChild(xmlDocument.createTextNode(description));\r
+                       root.appendChild(xmlDocument.createElement(EXTENDEDDESCRIPTION)).appendChild(xmlDocument.createTextNode(description));\r
                if (StringUtils.isNotBlank(agency))\r
-                       root.appendChild(xmlDocument.createElement("ExtendedAgency")).appendChild(xmlDocument.createTextNode(agency));\r
+                       root.appendChild(xmlDocument.createElement(EXTENDEDAGENCY)).appendChild(xmlDocument.createTextNode(agency));\r
                xmlDocument.appendChild(root);\r
 \r
                DOMSource domSource = new DOMSource(xmlDocument);\r
@@ -101,19 +107,27 @@ public class EscortFiles {
                        Files.createFile(killDatePath);\r
        }\r
 \r
-       public static void ensureUNCFolder(String filePath, String folderName) throws IOException {\r
-               Path statusPath = Paths.get(filePath, folderName);\r
-               File statusFolder = statusPath.toFile();\r
-               if (!statusFolder.exists() || !statusFolder.isDirectory()) {\r
+       public static void ensureUNCFolder(Path filePath) throws IOException {\r
+               File folder = filePath.toFile();\r
+               if (!folder.exists() || !folder.isDirectory()) {\r
                        Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
                        FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
-\r
                        try {\r
-                               Files.createDirectories(statusPath, attr);\r
+                               Files.createDirectories(filePath, attr);\r
                        } catch (Exception e) {\r
                                logger.catching(e);\r
-                               Files.createDirectories(statusPath);\r
+                               try {\r
+                                       Files.createDirectory(filePath);\r
+                               } catch (Exception e1) {\r
+                                       logger.catching(e);\r
+                                       throw e;\r
+                               }\r
                        }\r
                }\r
        }\r
+\r
+       public static void ensureUNCFolder(String filePath, String folderName) throws IOException {\r
+               Path statusPath = Paths.get(filePath, folderName);\r
+               ensureUNCFolder(statusPath);\r
+       }\r
 }\r
index 8fb779e79947fba95990a29ece3321b7f1c4c945..fd5c91998760f2b609fe4084e614ce55aed6a145 100644 (file)
@@ -1,18 +1,16 @@
 package user.jobengine.zk.model;\r
 \r
-import java.util.ArrayList;\r
 import java.util.HashMap;\r
-import java.util.List;\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.BindUtils;\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.Messagebox;\r
 import org.zkoss.zul.Window;\r
 \r
 import user.jobengine.db.ItemManagerData.SignalType;\r
@@ -23,13 +21,8 @@ import user.jobengine.server.JobChangedEvent;
 import user.jobengine.server.JobEngine;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
-public class JobListModel extends BaseModel implements IJobChangedListener {\r
-       private class EnableServerStart {\r
-       }\r
-\r
+public class JobListModel extends AsyncBaseModel implements IJobChangedListener {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private List<Object> jobEvents = new ArrayList<Object>();\r
-       //protected CachedListModel searchResult = null;\r
        private ListModelList<IJobRuntime> jobList = new ListModelList<IJobRuntime>();\r
        private IJobRuntime selectedJob = null;\r
        private IJobEngine jobEngine = null;\r
@@ -43,7 +36,6 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
                        for (IJobRuntime job : this.jobList.getSelection()) {\r
                                job.setPriority(newPriority);\r
                                jobEngine.rePrioritization(job);\r
-                               //                              this.jobList.notifyChange(job);\r
                        }\r
                }\r
        }\r
@@ -89,7 +81,7 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
                        setShutdownDisabled(!jobEngine.isRunning());\r
                        setStartupDisabled(jobEngine.isRunning());\r
 \r
-                       SessionUtil.registerJobChangedListener(this); //sessionlistener fog leiratkozni\r
+                       SessionUtil.registerJobChangedListener(this);\r
 \r
                        initializeList();\r
 \r
@@ -104,11 +96,6 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
                jobList.clear();\r
                Map<Long, IJobRuntime> jobMap = this.jobEngine.getJobs();\r
                jobList.addAll(jobMap.values());\r
-               //                      List<IEntityBase> allItems = jobEngine.getItemManager().getAll(Job.class);\r
-               //                      for (IEntityBase entity : allItems) {\r
-               //                              jobList.add(new JobRuntime((IJob) entity));\r
-               //                      }\r
-\r
                //Collections.sort(jobList, (o1, o2) -> compare(o1, o2));\r
        }\r
 \r
@@ -116,8 +103,6 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
                return shutdownDisabled;\r
        }\r
 \r
-       //TEST CODE *****************************************************\r
-\r
        public boolean isStartupDisabled() {\r
                return startupDisabled;\r
        }\r
@@ -133,48 +118,42 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
 \r
        @Override\r
        public void jobChanged(JobChangedEvent event) {\r
-               if (event != null) {\r
-                       synchronized (jobEvents) {\r
-                               jobEvents.add(event);\r
-                       }\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
-       @Command\r
-       //@NotifyChange({ "jobList" })\r
-       public void refreshJobList() {\r
-               synchronized (jobEvents) {\r
-                       if (jobEvents.size() > 0) {\r
-                               boolean mustRefreshList = false;\r
-                               for (Object event : jobEvents) {\r
-                                       if (event instanceof JobChangedEvent) {\r
-                                               JobChangedEvent jobEvent = (JobChangedEvent) event;\r
-                                               IJobRuntime job = jobEvent.getJob();\r
-                                               if (jobEvent.getSignalType().equals(SignalType.DELETE)) {\r
-                                                       this.jobList.remove(jobEvent.getJob());\r
-                                                       mustRefreshList = true;\r
-                                               } else if (jobEvent.getSignalType().equals(SignalType.CREATE)) {\r
-                                                       this.jobList.add(jobEvent.getJob());\r
-                                                       mustRefreshList = true;\r
-                                               } else if (jobEvent.getSignalType().equals(SignalType.UPDATE)) {\r
-                                                       this.jobList.notifyChange(job);\r
-                                               }\r
-                                       }\r
-                                       if (event instanceof EnableServerStart) {\r
-                                               setStartupDisabled(false);\r
-                                               BindUtils.postNotifyChange(null, null, this, "startupDisabled");\r
-                                       }\r
-                               }\r
-                               if (mustRefreshList) {\r
-                                       BindUtils.postNotifyChange(null, null, this, "jobList");\r
-                               }\r
-                               jobEvents.clear();\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
+       private void onShutdown() {\r
+               jobEngine.shutdown();\r
+               setStartupDisabled(false);\r
        }\r
 \r
        @Command\r
-       @NotifyChange({ "shutdownDisabled", "startupDisabled" })\r
        public void restart() {\r
                startupDisabled = true;\r
                try {\r
@@ -203,42 +182,31 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
                this.selectedJob = _selectedJob;\r
        }\r
 \r
-       //@NotifyChange({ "shutdownDisabled" })\r
        public void setShutdownDisabled(boolean shutdownDisabled) {\r
                this.shutdownDisabled = shutdownDisabled;\r
+               NotifyChange("shutdownDisabled");\r
        }\r
 \r
-       @NotifyChange({ "startupDisabled" })\r
        public void setStartupDisabled(boolean startupDisabled) {\r
                this.startupDisabled = startupDisabled;\r
+               NotifyChange("startupDisabled");\r
        }\r
 \r
        @Command\r
-       @NotifyChange({ "shutdownDisabled", "startupDisabled" })\r
        public void shutdown() {\r
-               shutdownDisabled = true;\r
-               Runnable r = new Runnable() {\r
-                       @Override\r
-                       public void run() {\r
-                               jobEngine.shutdown();\r
-                               synchronized (jobEvents) {\r
-                                       jobEvents.add(new EnableServerStart());\r
-                               }\r
-                       }\r
-               };\r
-               Thread t = new Thread(r);\r
-               t.start();\r
+               setShutdownDisabled(true);\r
+               registerTask(() -> onShutdown());\r
        }\r
 \r
        @Command\r
-       @NotifyChange({ "shutdownDisabled", "startupDisabled" })\r
        public void startup() {\r
-               startupDisabled = true;\r
+               setStartupDisabled(true);\r
                try {\r
                        jobEngine.startup();\r
                } catch (Exception e) {\r
+                       Messagebox.show(e.getMessage());\r
                }\r
-               shutdownDisabled = false;\r
+               setShutdownDisabled(false);\r
                initializeList();\r
        }\r
 }\r
index 3fb885fd623416f5849a8a408918760c6c2f3705..bc6268e8848ed895b2a73acfdbcc8c1b5ff7c392 100644 (file)
@@ -34,6 +34,7 @@ import user.jobengine.zk.util.SessionUtil;
 \r
 public class MissingMaterialsModel extends AsyncBaseModel implements IJobChangedListener {\r
        private static final Logger logger = LogManager.getLogger();\r
+       private static final String TARGETPATH = "targetPath";\r
        private static final String IMPORT_DISABLED = "importDisabled";\r
        private static final String TEMPLATE = "template";\r
        private static final String IMPORT_TEMPLATE = "import-morpheus-missing-materials.xml";\r
@@ -44,26 +45,14 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        private IJobEngine jobEngine = null;\r
        private boolean importDisabled;\r
        private DBCollection collection;\r
+       private ScheduledJob importJob;\r
 \r
        @Command\r
        public void executeImportJob() {\r
                try {\r
                        setImportDisabled(true);\r
-                       SchedulerService scheduler = jobEngine.getScheduler();\r
-                       List<BasicDBObject> jobs = NoSQLUtils.asList(scheduler.getScheduleJobs());\r
-                       BasicDBObject importJob = null;\r
-                       for (BasicDBObject job : jobs) {\r
-                               if (isImportJob(job.getString(TEMPLATE))) {\r
-                                       importJob = job;\r
-                                       //logger.info(job.toString());\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if (importJob == null)\r
-                               throw new NullPointerException("Nem található az import sablon.");\r
-                       ScheduledJob scheduledJob = scheduler.createScheduledJob(importJob);\r
-                       scheduledJob.setJobEngine(jobEngine);\r
-                       scheduledJob.doJob();\r
+                       importJob.setJobEngine(jobEngine);\r
+                       importJob.doJob();\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
                        Messagebox.show(e.getMessage());\r
@@ -72,7 +61,19 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
 \r
        @Command\r
        public void executeRestoreJobs() {\r
-               //logger.info("Selected: " + selectedJobs.size());\r
+               if (importJob == null) {\r
+                       Messagebox.show("Nem található a rendszerben a 'import-morpheus-missing-materials.xml' folyamatsablon.");\r
+                       return;\r
+               }\r
+\r
+               Map<String, Object> jobParameters = importJob.getJobParameters();\r
+               Object targetPath = jobParameters.get(TARGETPATH);\r
+               if (!(targetPath instanceof String)) {\r
+                       Messagebox.show("Nem található a rendszerben a 'import-morpheus-missing-materials.xml' folyamatsablon.");\r
+                       return;\r
+\r
+               }\r
+\r
                for (BasicDBObject material : selectedJobs) {\r
                        String status = material.getString(MorpheusStrings.STATUS);\r
                        if (!MorpheusStrings.STATUS_RESTORABLE.equals(status))\r
@@ -85,8 +86,9 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                                logger.warn("'{}' already retrieving", name);\r
                        } else {\r
                                try {\r
+                                       //String targetPath, String targetNamePattern, String successRecipient\r
                                        jobEngine.submit(RETRIEVE_TEMPLATE, String.format("%s hiányzó anyag visszatöltése", name),\r
-                                                       ListUtils.asMap(MorpheusStrings.MATERIAL, material));\r
+                                                       ListUtils.asMap(MorpheusStrings.MATERIAL, material, TARGETPATH, String.valueOf(targetPath)));\r
                                } catch (Exception e) {\r
                                        logger.catching(e);\r
                                }\r
@@ -100,6 +102,22 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                }\r
        }\r
 \r
+       private ScheduledJob getImportScheduledJob() {\r
+               SchedulerService scheduler = jobEngine.getScheduler();\r
+               List<BasicDBObject> jobs = NoSQLUtils.asList(scheduler.getScheduleJobs());\r
+               BasicDBObject importJob = null;\r
+               for (BasicDBObject job : jobs) {\r
+                       if (isImportJob(job.getString(TEMPLATE))) {\r
+                               importJob = job;\r
+                               //logger.info(job.toString());\r
+                               break;\r
+                       }\r
+               }\r
+               if (importJob == null)\r
+                       throw new NullPointerException("Nem található az import sablon.");\r
+               return scheduler.createScheduledJob(importJob);\r
+       }\r
+\r
        public ListModelList<BasicDBObject> getJobList() {\r
                return jobList;\r
        }\r
@@ -129,6 +147,9 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                        this.jobEngine = JobEngine.getInstance();\r
                        if (jobEngine == null)\r
                                throw new Exception("Belső hiba! A JobEngine szolgáltatás elérhetetlen.");\r
+\r
+                       importJob = getImportScheduledJob();\r
+\r
                        List<IJobRuntime> jobRuntimes = new ArrayList<>(jobEngine.getJobs().values());\r
                        Optional<IJobRuntime> findFirst = jobRuntimes.stream().filter(jobRuntime -> isImportJob(jobRuntime.getTemplate())).findFirst();\r
                        if (findFirst.isPresent())\r
@@ -136,6 +157,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                        initializeList();\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
+                       Messagebox.show(e.getMessage());\r
                }\r
        }\r
 \r