git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 9 Feb 2018 16:06:21 +0000 (16:06 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 9 Feb 2018 16:06:21 +0000 (16:06 +0000)
server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/util/SessionListener.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/util/SessionUtil.java

diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml b/server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml
new file mode 100644 (file)
index 0000000..8a900df
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Archivált anyag visszatöltése">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="fileName" type="java.lang.String" />\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="user.jobengine.server.steps.TSMRetrieveMissingMaterialStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="fileName" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java
new file mode 100644 (file)
index 0000000..d068808
--- /dev/null
@@ -0,0 +1,27 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class TSMRetrieveMissingMaterialStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(String fileName, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               logger.info(jobRuntime.getMarker(), "Starting");\r
+               try {\r
+                       for (int i = 0; i < 10; i++) {\r
+                               jobRuntime.incrementProgress((i + 1) * 10);\r
+                               Thread.sleep(1000);\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(e.getMessage());\r
+               }\r
+               logger.info(jobRuntime.getMarker(), "Finished");\r
+               return null;\r
+       }\r
+\r
+}\r
index 57b9f54e89366d7dec4e78d40a6d46bf0527c942..8fb779e79947fba95990a29ece3321b7f1c4c945 100644 (file)
@@ -89,7 +89,7 @@ public class JobListModel extends BaseModel implements IJobChangedListener {
                        setShutdownDisabled(!jobEngine.isRunning());\r
                        setStartupDisabled(jobEngine.isRunning());\r
 \r
-                       SessionUtil.addJobChangedListener(this); //sessionlistener fog leiratkozni\r
+                       SessionUtil.registerJobChangedListener(this); //sessionlistener fog leiratkozni\r
 \r
                        initializeList();\r
 \r
index b8c0d18bae3929b1ecbd7d1b879ff3d27010dd6b..241dd640488b00b4cf6f942dff4f7fae93dd016c 100644 (file)
@@ -2,6 +2,7 @@ package user.jobengine.zk.model;
 \r
 import java.util.ArrayList;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.Optional;\r
 import java.util.Set;\r
 \r
@@ -18,6 +19,7 @@ import com.ibm.nosql.json.api.DB;
 import com.ibm.nosql.json.api.DBCollection;\r
 import com.ibm.nosql.json.api.DBCursor;\r
 \r
+import user.commons.ListUtils;\r
 import user.commons.nosql.NoSQLUtils;\r
 import user.jobengine.db.ItemManagerData.SignalType;\r
 import user.jobengine.server.IJobChangedListener;\r
@@ -33,6 +35,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        private static final Logger logger = LogManager.getLogger();\r
        private static final String TEMPLATE = "template";\r
        private static final String IMPORT_TEMPLATE = "import-morpheus-missing-materials.xml";\r
+       private static final String RETRIEVE_TEMPLATE = "retrieve-missing-material.xml";\r
        private static final String COLLECTION_NAME = "missing_materials";\r
        private ListModelList<BasicDBObject> jobList = new ListModelList<BasicDBObject>();\r
        private BasicDBObject selectedJob = null;\r
@@ -67,16 +70,26 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
 \r
        @Command\r
        public void executeRestoreJobs() {\r
-               logger.info(selectedJobs.size());\r
-               registerTask(() -> {\r
-\r
-                       for (BasicDBObject job : selectedJobs) {\r
-                               job.put("Status", "???");\r
-                               BindUtils.postNotifyChange(null, null, job, "*");\r
+               //logger.info("Selected: " + selectedJobs.size());\r
+               for (BasicDBObject job : selectedJobs) {\r
+                       String name = job.getString("MaterialID");\r
+                       List<IJobRuntime> jobRuntimes = new ArrayList<>(jobEngine.getJobs().values());\r
+                       Optional<IJobRuntime> findFirst = jobRuntimes.stream().filter(j -> isRetrieveJobFor(j, "fileName", name)).findFirst();\r
+                       if (findFirst.isPresent()) {\r
+                               logger.warn("'{}' already retrieving", name);\r
+                       } else {\r
+                               try {\r
+                                       jobEngine.submit(RETRIEVE_TEMPLATE, String.format("%s hiányzó anyag visszatöltése", name), ListUtils.asMap("fileName", name));\r
+                               } catch (Exception e) {\r
+                                       logger.catching(e);\r
+                               }\r
                        }\r
-                       //BasicDBObject dbObject = jobList.get(0);\r
-               });\r
 \r
+                       job.put("Status", "RETRIEVING");\r
+                       registerTask(() -> {\r
+                               BindUtils.postNotifyChange(null, null, job, "*");\r
+                       });\r
+               }\r
        }\r
 \r
        public ListModelList<BasicDBObject> getJobList() {\r
@@ -95,7 +108,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        public void init() {\r
                try {\r
                        jobList.setMultiple(true);\r
-                       SessionUtil.addJobChangedListener(this);\r
+                       SessionUtil.registerJobChangedListener(this);\r
                        this.jobEngine = JobEngine.getInstance();\r
                        if (jobEngine == null)\r
                                throw new Exception("Belső hiba! A JobEngine szolgáltatás elérhetetlen.");\r
@@ -129,6 +142,21 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                return IMPORT_TEMPLATE.equals(template);\r
        }\r
 \r
+       private boolean isRetrieveJob(String template) {\r
+               return RETRIEVE_TEMPLATE.equals(template);\r
+       }\r
+\r
+       private boolean isRetrieveJobFor(IJobRuntime job, String parameterName, String name) {\r
+               boolean result = false;\r
+               if (RETRIEVE_TEMPLATE.equals(job.getTemplate())) {\r
+                       Map<String, Object> parameters = job.getParameters();\r
+                       Object parameter = parameters.get(parameterName);\r
+                       if (parameter != null && parameter instanceof String)\r
+                               result = name.equals(parameter);\r
+               }\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public void jobChanged(JobChangedEvent event) {\r
                IJobRuntime job = event.getJob();\r
@@ -136,6 +164,12 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                        if (SignalType.DELETE.equals(event.getSignalType()))\r
                                registerTask(() -> onImportCompleted());\r
                }\r
+               if (isRetrieveJob(job.getTemplate())) {\r
+                       if (SignalType.DELETE.equals(event.getSignalType()))\r
+                               registerTask(() -> onRetrieveCompleted(job));\r
+                       if (SignalType.UPDATE.equals(event.getSignalType()))\r
+                               registerTask(() -> onRetrieveJobChanged(job));\r
+               }\r
        }\r
 \r
        private void onImportCompleted() {\r
@@ -143,6 +177,16 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                setImportDisabled(false);\r
        }\r
 \r
+       private Object onRetrieveCompleted(IJobRuntime job) {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       private Object onRetrieveJobChanged(IJobRuntime job) {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
        @Command\r
        public void selectJob() {\r
                //only for notification\r
index fc85592fcbdfa96744630a99d4c093005739a5d0..d92b7568ea3dd77450cb4f51232ff7860f131cf2 100644 (file)
@@ -38,7 +38,7 @@ public class SessionListener implements HttpSessionListener{
                try{\r
                        HttpSession     session = se.getSession();\r
                        if(session != null){\r
-                               ArrayList<IJobChangedListener> list = (ArrayList<IJobChangedListener>)session.getAttribute(SessionUtil.JOBLISTENERLIST);\r
+                               ArrayList<IJobChangedListener> list = (ArrayList<IJobChangedListener>)session.getAttribute(SessionUtil.JOBLISTENER);\r
                                if(list != null){\r
                                        for(IJobChangedListener listener : list){\r
                                                JobEngine.getInstance().removeJobChangedEventListener(listener);\r
index bc31d167437ad5ebf351b43366f1556a238509f1..576e2bafb3670cd60e78122a8432943ab0f4c29c 100644 (file)
@@ -2,7 +2,6 @@ package user.jobengine.zk.util;
 \r
 import java.io.FileInputStream;\r
 import java.io.InputStream;\r
-import java.util.ArrayList;\r
 import java.util.Properties;\r
 \r
 import javax.servlet.http.HttpSession;\r
@@ -24,18 +23,12 @@ public class SessionUtil {
        private static final String LOCAL_JOBSUBMITTERS = "local_jobsubmitters";\r
        private static final String USERPRINCIPAL = "userPrincipal";\r
        private static final String AUTH_LOCATION = "mediacube.auth.location";\r
-       public static final String JOBLISTENERLIST = "joblistenerlist";\r
+       public static final String JOBLISTENER = "joblistener";\r
 \r
-       static public void addJobChangedListener(IJobChangedListener listener) {\r
+       static public void registerJobChangedListener(IJobChangedListener listener) {\r
+               cleanup();\r
                JobEngine.getInstance().addJobChangedEventListener(listener);\r
-               ArrayList<IJobChangedListener> list = (ArrayList<IJobChangedListener>) getAttribute(JOBLISTENERLIST);\r
-               if (list == null) {\r
-                       list = new ArrayList<IJobChangedListener>();\r
-                       setAttribute(JOBLISTENERLIST, list);\r
-               }\r
-               if (!list.contains(listener)) {\r
-                       list.add(listener);\r
-               }\r
+               setAttribute(JOBLISTENER, listener);\r
        }\r
 \r
        public static boolean authenticate(String account, String password) {\r
@@ -77,12 +70,10 @@ public class SessionUtil {
        }\r
 \r
        static public void cleanup() {\r
-               ArrayList<IJobChangedListener> list = (ArrayList<IJobChangedListener>) getAttribute(SessionUtil.JOBLISTENERLIST);\r
-               if (list != null) {\r
-                       for (IJobChangedListener listener : list) {\r
-                               JobEngine.getInstance().removeJobChangedEventListener(listener);\r
-                       }\r
-                       setAttribute(SessionUtil.JOBLISTENERLIST, null);\r
+               IJobChangedListener listener = (IJobChangedListener) getAttribute(SessionUtil.JOBLISTENER);\r
+               if (listener != null) {\r
+                       JobEngine.getInstance().removeJobChangedEventListener(listener);\r
+                       setAttribute(SessionUtil.JOBLISTENER, null);\r
                }\r
        }\r
 \r