git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 4 Jul 2018 13:13:17 +0000 (13:13 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 4 Jul 2018 13:13:17 +0000 (13:13 +0000)
server/-configuration/scheduledjobs.json
server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java
server/user.jobengine.osgi.server/img/ic_delete_forever_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/index.zul
server/user.jobengine.osgi.server/pages/missingmaterials.zul
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java
server/user.jobengine.osgi.services/src/user/jobengine/osgi/ws/nexio/NexioWSServlet.java

index 60a7180fdaa6741adfd53ab2048a9218927dd0f1..de2427f5ff2a02b6ea9b045a68ada3d2abda413c 100644 (file)
@@ -68,7 +68,7 @@
       "template": "sys-import-morpheus-missing-materials.xml",\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "parameters": [ \r
-       {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"},\r
+       {"name": "csvFilePath", "value": "c:\\temp\\__", "type": "java.lang.String"},\r
        {"name": "processedFolder", "value": "DONE", "type": "java.lang.String"},\r
        {"name": "targetPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"}\r
       ]\r
index fad74d42eba95dab4ab697535ddd62078f273e92..ac57183aaf27822dadbe3d6ef142d0aa8a3b0fa8 100644 (file)
@@ -10,6 +10,7 @@ import org.apache.logging.log4j.Logger;
 import com.ibm.nosql.json.api.BasicDBList;\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
 import com.ibm.nosql.json.api.DBCursor;\r
 import com.ibm.nosql.json.api.DBObject;\r
 import com.ibm.nosql.json.api.NoSQLClient;\r
@@ -91,11 +92,17 @@ public class NoSQLUtils {
 \r
        public static List<DBObject> asList(DBCursor cursor) {\r
                List<DBObject> result = null;\r
-               if (cursor.hasNext())\r
-                       result = cursor.toArray();\r
-               cursor.close();\r
-               if (result == null)\r
-                       result = new ArrayList<>();\r
+               try {\r
+                       cursor.lazyFetch();\r
+                       while (cursor.hasNext()) {\r
+                               DBObject obj = cursor.next();\r
+                               if (result == null)\r
+                                       result = new ArrayList<>();\r
+                               result.add(obj);\r
+                       }\r
+               } finally {\r
+                       cursor.close();\r
+               }\r
                return result;\r
        }\r
 \r
@@ -113,6 +120,10 @@ public class NoSQLUtils {
                return result;\r
        }\r
 \r
+       public static DBCollection collection(String name) {\r
+               return getNoSQLDB().getCollection(name);\r
+       }\r
+\r
        public static DB getNoSQLDB() {\r
                try {\r
                        //                      if (noSQLClient == null)\r
@@ -122,5 +133,4 @@ public class NoSQLUtils {
                }\r
                return noSQLClient;\r
        }\r
-\r
 }\r
index 5013aa9709c2056bf991876d5100ded7c19a8ba4..86360d46d9cb83881a0cd4c59f27d45da0a508e4 100644 (file)
@@ -48,6 +48,8 @@ public interface IOctopusAPI {
        static final String STORYID = "storyId";\r
        static final String FORMAT = "format";\r
        static final String REPORTERS = "reporters";\r
+       static final String $DATE = "$date";\r
+       static final String $ELEMMATCH = "$elemMatch";\r
 \r
        DBObject getRundown(Date scheduledDate);\r
 \r
index df2e030085101cb8f07381bfccd9963172831363..4244dd5dd83b31ce315a5c0ab7816a63e5e795c5 100644 (file)
@@ -20,8 +20,6 @@ import user.commons.nosql.NoSQLUtils;
 \r
 public class OctopusAPI implements IOctopusAPI {\r
        //private static final Logger logger = LogManager.getLogger();\r
-       private static final String $DATE = "$date";\r
-       private static final String $ELEMMATCH = "$elemMatch";\r
        private DB db;\r
 \r
        public OctopusAPI() throws SQLException {\r
diff --git a/server/user.jobengine.osgi.server/img/ic_delete_forever_black_18dp.png b/server/user.jobengine.osgi.server/img/ic_delete_forever_black_18dp.png
new file mode 100644 (file)
index 0000000..3a251b6
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/ic_delete_forever_black_18dp.png differ
index 697ac54cab6d9164856a153c68993cbd96180a91..fa02bd7a0e5a639fdbd300e50bf9b476db1bbe1b 100644 (file)
@@ -69,7 +69,7 @@
                                                <east border="0">\r
                                                        <hbox height="100%" width="100%" align="bottom" pack="center" style="background: #008AC8;">\r
                                                                <div style="margin-right: 10px">\r
-                                                                       <label style="color:#e3e3e3;font-size:12px;font-weight:bold" value="Bejelentkezve: ${sessionScope.userPrincipal.displayName}" /> \r
+                                                                       <label style="color:#e3e3e3; font-size:12px; font-weight:bold; cursor: help;" value="Bejelentkezve: ${sessionScope.userPrincipal.displayName}" /> \r
                                                                        <attribute name="tooltip" if="${not empty sessionScope.userPrincipal.email}">\r
                                                                                emailPopup, at_pointer\r
                                                                        </attribute>                                                                                            \r
index 8d67067526f2fd192e1498fc5f49b069c0f0475e..1addebe633361a30d9a833e278bcd45b2d415544 100644 (file)
@@ -2,6 +2,9 @@
 <?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>\r
 <?init class="user.jobengine.zk.util.SubmitterAuthInitiator"?>\r
 <zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
+       <script>\r
+       window.history.pushState(null, "Hiányzó anyagok", "/actions/missingmaterials");                  \r
+       </script>\r
        <custom-attributes org.zkoss.zul.listbox.rod="true" />\r
        <custom-attributes org.zkoss.zul.listbox.initRodSize="50" />\r
        <custom-attributes org.zkoss.zul.listbox.preloadSize="50" />\r
                <div align="left" width="100%">\r
                        <space bar="false" />\r
                        <button label="Importálás" onClick="@command('executeImportJob')" autodisable="self" disabled="@load(jlm.importDisabled)" />\r
-                       <button label="Visszaállítás" onClick="@command('executeRestoreJobs')" autodisable="self" disabled="false" />\r
+                       <button label="Visszaállítás" onClick="@command('executeRestoreJobs')" autodisable="self" disabled="@load(jlm.selectedJobs eq null)" />\r
                </div>\r
 \r
                <div height="100%" width="100%" style="background: #e3e3e3" align="left">\r
                        <groupbox height="94%" closable="false">\r
-                               <caption sclass="boldfont" label="Hiányzó adásanyagok" />\r
-                               <listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging" autopaging="true"\r
-                                       vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style"\r
-                                       sclass="listbox-normal-style" emptyMessage="Nincs hiányzó anyag." selectedItems="@bind(jlm.selectedJobs)">\r
+                               <caption sclass="boldfont" label="Adásanyagok" />\r
+                               <listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top"\r
+                                       vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
+                                       emptyMessage="Nincs hiányzó anyag." selectedItems="@bind(jlm.selectedJobs)">\r
+                                       <auxhead sclass="category-center">\r
+                                               <auxheader colspan="4">\r
+                                                       <toolbar vflex="min" style="font-size:8px; float: right;">\r
+                                                               <toolbarbutton label="Lista törlése" image="/img/ic_delete_forever_black_18dp.png" autodisable="self" onClick="@command('clearList')" />\r
+                                                       </toolbar>\r
+                                               </auxheader>\r
+                                       </auxhead>\r
                                        <listhead sizable="true">\r
                                                <listheader label="Adásbakerülés" hflex="min" align="left" sort="auto" />\r
                                                <listheader label="Adásanyag" hflex="min" align="left" sort="auto" />\r
index f33f6bd4812c0b7a4ad1ef331f67e4cf776d2c6e..a9ff25439b5a398c8e94dc1dbc4231f8d0b02019 100644 (file)
@@ -22,7 +22,7 @@ public class IndexModel extends BaseModel {
                Selectors.wireComponents(view, this, false);\r
                Selectors.wireEventListeners(view, this);\r
 \r
-               Map<String, Object> pathMap = ListUtils.asMap("jobs", "joblist");\r
+               Map<String, Object> pathMap = ListUtils.asMap("jobs", "joblist", "missingmaterials", "missingmaterials");\r
                String parameter = Executions.getCurrent().getParameter("action");\r
                String action = (String) pathMap.get(parameter);\r
                if ("null".equals(parameter) || action == null) {\r
index e4346162ece1375cce12556e734639de78a65d34..735b3dfe216c6c4cc79b99e3d233a341046793be 100644 (file)
@@ -15,10 +15,10 @@ import org.zkoss.zul.ListModelList;
 import org.zkoss.zul.Messagebox;\r
 \r
 import com.ibm.nosql.json.api.BasicDBObject;\r
-import com.ibm.nosql.json.api.DB;\r
 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.morpheus.MorpheusStrings;\r
 import user.commons.nosql.NoSQLUtils;\r
 import user.jobengine.db.ItemManagerData.SignalType;\r
@@ -43,6 +43,12 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        private DBCollection collection;\r
        private ScheduledJob importJob;\r
 \r
+       @Command\r
+       public void clearList() {\r
+               resetLists();\r
+               collection.drop();\r
+       }\r
+\r
        @Command\r
        public void executeImportJob() {\r
                try {\r
@@ -57,6 +63,8 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
 \r
        @Command\r
        public void executeRestoreJobs() {\r
+               if (selectedJobs == null)\r
+                       return;\r
                if (importJob == null) {\r
                        Messagebox.show("Nem található a rendszerben a 'import-morpheus-missing-materials.xml' folyamatsablon.");\r
                        return;\r
@@ -121,12 +129,13 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        @Init\r
        public void init() {\r
                try {\r
+                       collection = NoSQLUtils.collection(MorpheusStrings.COLLECTION_NAME);\r
                        jobList.setMultiple(true);\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
 \r
+                       SessionUtil.registerJobChangedListener(this);\r
                        importJob = jobEngine.getScheduledJob(IMPORT_TEMPLATE);\r
 \r
                        List<IJobRuntime> jobRuntimes = new ArrayList<>(jobEngine.getJobs().values());\r
@@ -141,15 +150,9 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        }\r
 \r
        private void initializeList() {\r
-               DB db = NoSQLUtils.getNoSQLDB();\r
-               collection = db.getCollection(MorpheusStrings.COLLECTION_NAME);\r
+               resetLists();\r
                DBCursor cursor = collection.find().sort(new BasicDBObject(MorpheusStrings.TIMETOAIR, -1)).limit(1000);\r
-               if (selectedJobs != null)\r
-                       selectedJobs.clear();\r
-               jobList.clear();\r
-               while (cursor.hasNext())\r
-                       jobList.add((BasicDBObject) cursor.next());\r
-\r
+               jobList.addAll(ListUtils.cast(cursor.toArray()));\r
        }\r
 \r
        public boolean isImportDisabled() {\r
@@ -203,6 +206,12 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                }\r
        }\r
 \r
+       private void resetLists() {\r
+               if (selectedJobs != null)\r
+                       selectedJobs.clear();\r
+               jobList.clear();\r
+       }\r
+\r
        public void setImportDisabled(boolean importDisabled) {\r
                this.importDisabled = importDisabled;\r
                NotifyChange(IMPORT_DISABLED);\r
@@ -215,5 +224,4 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        public void setSelectedJobs(Set<BasicDBObject> selectedJobs) {\r
                this.selectedJobs = selectedJobs;\r
        }\r
-\r
 }\r
index 3a0d3b8b218e1a7c8acfbb1b1be5e83acb551d8f..f040151a9f83565b658a9abbc28a0d7327c81ae7 100644 (file)
@@ -35,7 +35,9 @@ import com.ibm.nosql.json.JSONUtil;
 import com.ibm.nosql.json.api.BasicDBObject;\r
 import com.ibm.nosql.json.api.DB;\r
 import com.ibm.nosql.json.api.DBCollection;\r
+import com.ibm.nosql.json.api.DBCursor;\r
 import com.ibm.nosql.json.api.DBObject;\r
+import com.ibm.nosql.json.api.QueryBuilder;\r
 \r
 import sqlj.runtime.ref.DefaultContext;\r
 import user.commons.CalendarUtils;\r
@@ -269,6 +271,33 @@ public class Support {
                return result[0];\r
        }\r
 \r
+       private List<DBObject> getReferencedObjects(List<DBObject> stories, String referenceCollectionName, String referenceField) {\r
+               if (stories == null || stories.size() == 0)\r
+                       return null;\r
+               List<Long> ids = null;\r
+               for (DBObject story : stories) {\r
+                       if (story == null)\r
+                               continue;\r
+                       List<BasicDBObject> references = NoSQLUtils.asList((BasicDBObject) story, referenceField);\r
+                       if (references == null)\r
+                               continue;\r
+                       for (BasicDBObject reference : references) {\r
+                               if (reference == null || !reference.containsKey(IOctopusAPI.ID))\r
+                                       continue;\r
+                               long id = reference.getLong(IOctopusAPI.ID);\r
+                               if (ids == null)\r
+                                       ids = new ArrayList<>();\r
+                               ids.add(id);\r
+                       }\r
+               }\r
+               if (ids == null)\r
+                       return null;\r
+               DBCollection rundownCollection = NoSQLUtils.collection(referenceCollectionName);\r
+               BasicDBObject query = (BasicDBObject) QueryBuilder.start().put(IOctopusAPI.ID).in(ids).get();\r
+               DBCursor cursor = rundownCollection.find(query);\r
+               return NoSQLUtils.asList(cursor);\r
+       }\r
+\r
        private Item getRundownItem(BasicDBObject rundown) {\r
 \r
                StringBuilder query = new StringBuilder();\r
@@ -302,6 +331,15 @@ public class Support {
                return result;\r
        }\r
 \r
+       public List<DBObject> getRundownsByPlaceHolderID(String id) {\r
+               DBCollection storyCollection = NoSQLUtils.collection(IOctopusAPI.STORY_COLLECTION);\r
+               BasicDBObject criteria = new BasicDBObject(IOctopusAPI.MOS_OBJECTS,\r
+                               new BasicDBObject(IOctopusAPI.$ELEMMATCH, new BasicDBObject(IOctopusAPI.OBJ_ID, id)));\r
+               DBCursor find = storyCollection.find(criteria, new BasicDBObject(IOctopusAPI.REF_RUNDOWN, 1));\r
+               List<DBObject> rundowns = NoSQLUtils.asList(find);\r
+               return getReferencedObjects(rundowns, IOctopusAPI.RUNDOWN_COLLECTION, IOctopusAPI.REF_RUNDOWN);\r
+       }\r
+\r
        private String getRundownTitle(BasicDBObject rundown) {\r
                String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME);\r
                if (StringUtils.isBlank(name))\r
@@ -430,7 +468,6 @@ public class Support {
 \r
        @Test\r
        public void repairRundownChunks() throws Exception {\r
-               OctopusAPI octopusAPI = new OctopusAPI();\r
                Path sourcePath = Paths.get("c:\\Temp\\__");\r
                final Set<String> names = new LinkedHashSet<>();\r
 \r
@@ -456,7 +493,7 @@ public class Support {
 \r
                                                        Media media = (Media) existing.keySet().toArray()[0];\r
                                                        List<String> itemTitles = (List<String>) existing.values().toArray()[0];\r
-                                                       List<BasicDBObject> rundowns = ListUtils.cast(octopusAPI.getRundownsByPlaceHolderID(splittedLine[1]));\r
+                                                       List<BasicDBObject> rundowns = ListUtils.cast(getRundownsByPlaceHolderID(splittedLine[1]));\r
                                                        System.out.println(String.format("%s %d: ", splittedLine[1], media.getId()));\r
 \r
                                                        for (BasicDBObject rd : rundowns) {\r
@@ -501,46 +538,49 @@ public class Support {
 \r
        @Test\r
        public void repairRundownChunksNoLog() throws Exception {\r
-               OctopusAPI octopusAPI = new OctopusAPI();\r
+               NoSQLUtils.collection(IOctopusAPI.RUNDOWN_COLLECTION).ensureIndex(new BasicDBObject(IOctopusAPI.ID, 1));\r
+\r
                List<String> archivedFiles = getRundownMedias("2018-03-03", "2018-06-07");\r
+               int i = 1;\r
                for (String file : archivedFiles) {\r
                        //lenyeli a duplikalt hozzadast, lekezelni. addig nem futtathato!!!!!!!\r
                        Map<Media, List<String>> existing = getExistingItemHouseIDs(file);\r
 \r
                        Media media = (Media) existing.keySet().toArray()[0];\r
                        List<String> itemTitles = (List<String>) existing.values().toArray()[0];\r
-                       List<BasicDBObject> rundowns = ListUtils.cast(octopusAPI.getRundownsByPlaceHolderID(file));\r
-                       System.out.println(String.format("%s %d: ", file, media.getId()));\r
-\r
-                       if (rundowns == null)\r
-                               continue;\r
-                       for (BasicDBObject rd : rundowns) {\r
-                               String rundownTitle = getRundownTitle(rd);\r
-                               if (itemTitles.contains(rundownTitle) || rundownTitle.contains("00:00"))\r
-                                       continue;\r
-\r
-                               Item item = getRundownItem(rd);\r
-                               if (item == null) {\r
-                                       item = manager.createItem("Generic", rundownTitle, null, NoSQLUtils.asString(rd, IOctopusAPI.ID));\r
-                                       item.add();\r
-                                       System.out.print(String.format("* %s,", rundownTitle));\r
-                               } else {\r
-                                       System.out.print(String.format("%s (%d),", rundownTitle, item.getId()));\r
-                               }\r
-\r
-                               List<MediaFile> mediaFiles = media.getMediaFiles();\r
-                               if (mediaFiles != null) {\r
-                                       for (MediaFile mf : mediaFiles) {\r
-                                               mf.setId(0);\r
-                                               mf.setMediaId(0);\r
-                                       }\r
-                               }\r
-                               media.setId(0);\r
-                               media.setItemId(item.getId());\r
-                               media.setPersister(manager);\r
-                               media.add();\r
-\r
-                       }\r
+                       List<BasicDBObject> rundowns = ListUtils.cast(getRundownsByPlaceHolderID(file));\r
+                       System.out.println(String.format("%d - %s %d: ", i, file, media.getId()));\r
+                       i++;\r
+\r
+                       //                      if (rundowns == null)\r
+                       //                              continue;\r
+                       //                      for (BasicDBObject rd : rundowns) {\r
+                       //                              String rundownTitle = getRundownTitle(rd);\r
+                       //                              if (itemTitles.contains(rundownTitle) || rundownTitle.contains("00:00"))\r
+                       //                                      continue;\r
+                       //\r
+                       //                              Item item = getRundownItem(rd);\r
+                       //                              if (item == null) {\r
+                       //                                      item = manager.createItem("Generic", rundownTitle, null, NoSQLUtils.asString(rd, IOctopusAPI.ID));\r
+                       //                                      item.add();\r
+                       //                                      System.out.print(String.format("* %s,", rundownTitle));\r
+                       //                              } else {\r
+                       //                                      System.out.print(String.format("%s (%d),", rundownTitle, item.getId()));\r
+                       //                              }\r
+                       //\r
+                       //                              List<MediaFile> mediaFiles = media.getMediaFiles();\r
+                       //                              if (mediaFiles != null) {\r
+                       //                                      for (MediaFile mf : mediaFiles) {\r
+                       //                                              mf.setId(0);\r
+                       //                                              mf.setMediaId(0);\r
+                       //                                      }\r
+                       //                              }\r
+                       //                              media.setId(0);\r
+                       //                              media.setItemId(item.getId());\r
+                       //                              media.setPersister(manager);\r
+                       //                              media.add();\r
+                       //\r
+                       //                      }\r
                }\r
        }\r
 \r
index b59e3a8fb6696eb0b0de5a9b3447dedd0628acd4..df9286dc51963576520807a124c8cfae47fc7e3b 100644 (file)
@@ -79,10 +79,17 @@ public class NexioWSServlet extends WebSocketServlet implements INexioChangeList
        private void processMessage(BasicDBObject message) {
                List<Session> deadSessions = null;
                for (Session session : sessions) {
+                       boolean sessionOpened = false;
                        try {
-                               NexioWSSocket.asyncSendResponse(session, message);
+                               sessionOpened = session.isOpen();
+                               if (sessionOpened)
+                                       NexioWSSocket.asyncSendResponse(session, message);
                        } catch (Exception e) {
                                logger.error(e);
+                               sessionOpened = false;
+                       }
+
+                       if (!sessionOpened) {
                                if (deadSessions == null)
                                        deadSessions = new ArrayList<>();
                                deadSessions.add(session);