git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 21 Feb 2018 15:43:59 +0000 (15:43 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 21 Feb 2018 15:43:59 +0000 (15:43 +0000)
23 files changed:
server/-configuration/scheduledjobs.json
server/-configuration/test-deploy-bkup-mediacube-plugins.launch [moved from server/-configuration/deploy-bkup-mediacube-plugins.launch with 100% similarity]
server/user.jobengine.executors/config/scheduledjobs.json
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java
server/user.jobengine.executors/test-deploy-steps-to-bsh-bkup.bat
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.commons/test/user/common/octopus/test/OctopusDataMinerTest.java
server/user.jobengine.osgi.db/deploy.launch
server/user.jobengine.osgi.db/sql/stat-details.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/sql/stat.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java
server/user.jobengine.osgi.db/test/user/jobengine/db/TestSearch.java [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/menu.zul
server/user.jobengine.osgi.server/pages/newshistory.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryModel.java [new file with mode: 0644]

index 54c1b1ed8b98ed6da988d4ee8c6324a4d7324d4c..16274c8a1d7a2ef030f4ac337eee46a88adce5f8 100644 (file)
@@ -1,7 +1,7 @@
 {"joblist":[\r
        {\r
       "active": false,\r
-         "name" : "Statisztika importálása",\r
+         "name" : "Híranyag statisztika importálása",\r
       "template": "import-statistics.xml",\r
       "executeimmediate": false,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "executeimmediate": false,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "parameters": [ \r
-       {"name": "csvFilePath", "value": "c:/temp/morpheus", "type": "java.lang.String"},\r
+       {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"},\r
        {"name": "processedFolder", "value": "DONE", "type": "java.lang.String"},\r
-       {"name": "targetPath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE_RESTORE", "type": "java.lang.String"}\r
+       {"name": "targetPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"}\r
       ]\r
        },\r
        {\r
       "active": false,\r
-         "name" : "Felhasználói archiválás",\r
+      "executeimmediate": false,\r
+         "name" : "Archiválás az ISILON/ARCHIVE mappából",\r
       "template": "archive-ondemand.xml",\r
-      "executeimmediate": true,\r
-      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "cronexpression": "0 0 23 * * ?",\r
       "parameters": [ \r
        {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"},\r
        {"name": "globalSourcePath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"},\r
        },\r
        {\r
       "active": false,\r
-         "name" : "NEXIO anyagok másolása az ISILON/ARCHIVE mappába",\r
+      "executeimmediate": false,\r
+         "name" : "NEXIO bejátszók másolása az ISILON/ARCHIVE mappába",\r
       "template": "copyforarchive-nexio-materials.xml",\r
-      "executeimmediate": true,\r
-      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "cronexpression": "0 0 10 * * ?",\r
       "parameters": [ \r
        {"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"},\r
        {"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"},\r
        {"name": "nexioPassword", "value": "system", "type": "java.lang.String"},\r
-       {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"},\r
+       {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE", "type": "java.lang.String"},\r
        {"name": "archiveUserName", "value": "mediacube", "type": "java.lang.String"},\r
        {"name": "archivePassword", "value": "Broadca5T", "type": "java.lang.String"},\r
        {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"},\r
@@ -69,7 +69,7 @@
        },      \r
        {\r
       "active": false,\r
-         "name" : "NEXIO rögzített anyagok másolása az ISILON/ARCHIVE mappába",\r
+         "name" : "NEXIO visszarögzített anyagok másolása az ISILON/ARCHIVE mappába",\r
       "template": "copyforarchive-nexio-recordings.xml",\r
       "executeimmediate": true,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "active": false,\r
          "name" : "TRAFFIC anyagok visszatöltése",\r
       "template": "retrieve-traffic-missing-materials.xml",\r
-      "executeimmediate": true,\r
+      "executeimmediate": false,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "parameters": [\r
        {"name": "dbUrl", "value": "jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "type": "java.lang.String"},\r
        },      \r
        {\r
       "active": false,\r
-         "name" : "Anyagok törlése",\r
+      "executeimmediate": false,\r
+         "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése",\r
       "template": "delete-materials.xml",\r
-      "executeimmediate": true,\r
-      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "cronexpression": "0 0 5 * * ?",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "q:/TEST", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}\r
       ]\r
        },      \r
        {\r
index eecceedd37088cb1a79292b71aaff516a80adc0e..9454a95d2ddc53845e8a30215e378d8423b655ca 100644 (file)
@@ -1,5 +1,27 @@
 {"joblist":[\r
        {\r
+      "active": false,\r
+         "name" : "Híranyag statisztika importálása",\r
+      "template": "import-statistics.xml",\r
+      "executeimmediate": false,\r
+      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "parameters": [ \r
+       {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"}\r
+      ]\r
+       },\r
+       {\r
+      "active": false,\r
+         "name" : "MORPHEUS 'missing materials' importálása",\r
+      "template": "import-morpheus-missing-materials.xml",\r
+      "executeimmediate": false,\r
+      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "parameters": [ \r
+       {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "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
+       },\r
+       {\r
       "active": true,\r
       "executeimmediate": true,\r
          "name" : "OCTOPUS adatok szinkronizálása",\r
          "name" : "Teszt folyamat",\r
       "template": "fake.xml",\r
       "cronexpression": "0/10 * * ? * *",\r
+      "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+       },\r
+       {\r
+      "active": false,\r
+         "name" : "Teszt fork-párhuzamosított folyamat",\r
+      "template": "fake-noparams.xml",\r
+      "executeimmediate": false,\r
+      "cronexpression": "0 40 22 * * ?",\r
       "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
        }\r
 ]}\r
index b1d0bb4872298c5d644275113dff3b515fb56479..dcd4ba6189cc2d37bec2b9f4f56fda685754a0ba 100644 (file)
@@ -5,7 +5,6 @@ import java.net.InetAddress;
 import java.net.URI;\r
 import java.text.ParseException;\r
 import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.List;\r
@@ -42,6 +41,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
        private static final String MEDIATYPE = "Visszarögzített";\r
        private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
        private static final String STARTTIME_FORMAT = "HHmm";\r
+       private static final String RUNDOWNDATE_FORMAT = "yyyyMMdd";\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final String UTF_8 = "utf-8";\r
        private static final String JSON_EXT = ".json";\r
@@ -54,6 +54,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
        private static final String EXTAGENCY = "extagency";\r
        private static final String RECORDDATE = "recorddate";\r
        private static final SimpleDateFormat startTimeformat = new SimpleDateFormat(STARTTIME_FORMAT);\r
+       private static final SimpleDateFormat rundownDateformat = new SimpleDateFormat(RUNDOWNDATE_FORMAT);\r
 \r
        private OctopusAPI octopusAPI;\r
        private IItemManager manager;\r
@@ -98,11 +99,12 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
        }\r
 \r
        private void copyFile(FileArchive fileArchive, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception {\r
-               String origFileName = fileArchive.getFileName();\r
-               String videoFileName = transferFile(origFileName);\r
+               String sourceFileName = fileArchive.getFileName();\r
+               String targetFileName = getTargetFileName(rundownArchive, sourceFileName);\r
+               transferFile(sourceFileName, targetFileName);\r
                BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive);\r
-               transferMetadata(videoFileName, metadata);\r
-               createSourceKillDateFile(rundownArchive, origFileName);\r
+               transferMetadata(targetFileName, metadata);\r
+               createSourceKillDateFile(rundownArchive, sourceFileName);\r
        }\r
 \r
        private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) {\r
@@ -178,20 +180,9 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
                return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime();\r
        }\r
 \r
-       private String getTargetFileName(String sourceFileName, String[] names) {\r
-               String result = sourceFileName + MXFEXT;\r
-               if (names == null || names.length == 0)\r
-                       return result;\r
-               List<String> remoteNames = new ArrayList<>();\r
-               for (String name : names) {\r
-                       if (name != null)\r
-                               remoteNames.add(name.toLowerCase());\r
-               }\r
-               int version = 1;\r
-               while (remoteNames.contains(result.toLowerCase())) {\r
-                       result = String.format("%s-%d%s", sourceFileName, version, MXFEXT);\r
-               }\r
-               return result;\r
+       private String getTargetFileName(RundownArchive rundownArchive, String sourceFileName) {\r
+               String date = rundownDateformat.format(rundownArchive.getScheduleDate());\r
+               return String.format("%s-%s%s", date, sourceFileName, MXFEXT);\r
        }\r
 \r
        private RundownArchive processClip(BasicDBObject clip) {\r
@@ -348,16 +339,13 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
 \r
        }\r
 \r
-       private String transferFile(String sourceFileName) throws Exception {\r
-               String result = null;\r
+       private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
                int reply = 0;\r
                logger.info("Transfer clip {}", sourceFileName);\r
                try {\r
                        sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect();\r
                        targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
 \r
-                       result = getTargetFileName(sourceFileName, targetFtp.listNames());\r
-\r
                        if (!targetFtp.enterRemotePassiveMode())\r
                                throw new Exception("!PASV");\r
 \r
@@ -375,7 +363,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
                        if (!targetFtp.setFileType(FTP.BINARY_FILE_TYPE))\r
                                throw new Exception("!TARGET TYPE");\r
 \r
-                       reply = targetFtp.stor(result);\r
+                       reply = targetFtp.stor(targetFileName);\r
                        if (!FTPReply.isPositivePreliminary(reply))\r
                                throw new Exception("STOR parancs válasza: " + sourceFtp.getReplyString());\r
 \r
@@ -398,7 +386,6 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
                        targetUri.cleanUp();\r
                }\r
 \r
-               return result;\r
        }\r
 \r
        private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception {\r
index b5ca3150c044038f05ce07b71369d1ce970e4baf..4f6512da8cdf5f7c76f198fcfdfc7151fc681456 100644 (file)
@@ -2,7 +2,6 @@ package user.jobengine.server.steps;
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
-import org.apache.logging.log4j.message.Message;\r
 \r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
@@ -17,8 +16,8 @@ public class FakeStep extends JobStep {
                Object[] result = { itemID + 1 };\r
 \r
                //logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
-               Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
-               logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
+               //              Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
+               //              logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
                try {\r
                        for (int i = 0; i < count; i++) {\r
                                //sb.append("Sikeres iteráció : ")\r
index 7268b0ecbd745af73a6763dda4dce0df8f96283f..798b3fb9b91ceabe781ea7ec94d63dfc1d152d54 100644 (file)
@@ -10,7 +10,10 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 \r
+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.DBObject;\r
 \r
 import user.commons.CalendarUtils;\r
@@ -23,8 +26,15 @@ import user.jobengine.server.IJobRuntime;
 public class ImportStatisticsStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
+       private static final String NEXIOCLIPS = "nexioclips";\r
+       private static final String LONGNAMEID = "longnameid";\r
+       private static final String DURATION = "duration";\r
        private IOctopusAPI octopusAPI;\r
        private Marker marker;\r
+       private int overall;\r
+       private int current;\r
+       private DB db;\r
+       private DBCollection clipCollection;\r
 \r
        private void createAPI(IJobRuntime jobRuntime) throws Exception {\r
                try {\r
@@ -36,24 +46,49 @@ public class ImportStatisticsStep extends JobStep {
                }\r
        }\r
 \r
+       private BasicDBObject createFieldsObject() {\r
+               BasicDBObject result = new BasicDBObject();\r
+               result.put(IOctopusAPI._ID, 0);\r
+               result.put(IOctopusAPI.ID, 1);\r
+               result.put(IOctopusAPI.NAME, 1);\r
+               result.put(IOctopusAPI.REF_RUNDOWN, 1);\r
+               result.put(IOctopusAPI.REF_STORYFOLDER, 1);\r
+               result.put(IOctopusAPI.MOS_OBJECTS, 1);\r
+               result.put(IOctopusAPI.PARENT_STORY_ID, 1);\r
+               result.put(IOctopusAPI.SCHEDULEFROM, 1);\r
+               result.put(IOctopusAPI.REPORTERS, 1);\r
+               return result;\r
+       }\r
+\r
        @StepEntry\r
        public Object[] execute(int daysBeforeNow, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                marker = jobRuntime.getMarker();\r
+               db = NoSQLUtils.getNoSQLDB();\r
+               clipCollection = db.getCollection(NEXIOCLIPS);\r
+\r
                createAPI(jobRuntime);\r
 \r
-               Calendar scheduledDate = Calendar.getInstance();\r
+               Calendar scheduledDate = CalendarUtils.createZeroCalendar(Calendar.getInstance());\r
                scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow);\r
                List<DBObject> rundowns = octopusAPI.getRundowns(scheduledDate.getTime());\r
-               if (rundowns == null) {\r
-                       logger.warn(marker, "Nem található adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate));\r
-                       return null;\r
-               }\r
-               Map<Long, BasicDBObject> stories = processRundowns(rundowns);\r
+               if (rundowns == null)\r
+                       logger.warn(marker, "Nincs adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate));\r
+               else\r
+                       overall += rundowns.size();\r
 \r
                List<DBObject> folders = octopusAPI.getStoryFolders();\r
+               if (folders == null)\r
+                       logger.warn(marker, "Nincs gyűjtőmappa.");\r
+               else\r
+                       overall += folders.size();\r
+\r
+               Map<Long, BasicDBObject> stories = processRundowns(rundowns);\r
+               logger.info(jobRuntime.getMarker(), "Adástükörben megtalálható anyagok száma {}", stories.size());\r
                Map<Long, BasicDBObject> folderStories = processFolders(folders, scheduledDate);\r
                stories.putAll(folderStories);\r
+               logger.info(jobRuntime.getMarker(), "Gyűjtőkben megtalálható anyagok száma {}", stories.size());\r
 \r
+               store(scheduledDate, stories);\r
                return null;\r
        }\r
 \r
@@ -66,13 +101,19 @@ public class ImportStatisticsStep extends JobStep {
                        try {\r
                                folderID = NoSQLUtils.asLong(folder, IOctopusAPI.ID);\r
                                folderName = folder.getString(IOctopusAPI.NAME);\r
-                               List<DBObject> stories = octopusAPI.getStoryFolderStories(folderID);\r
-                               if (stories != null)\r
-                                       result.putAll(processStories(stories, scheduledDate));\r
+                               List<DBObject> folderStories = octopusAPI.getStoryFolderStories(folderID, createFieldsObject());\r
+                               if (folderStories != null) {\r
+\r
+                                       Map<Long, BasicDBObject> stories = processStories(folderStories, scheduledDate);\r
+                                       result.putAll(stories);\r
+                               }\r
                        } catch (Exception e) {\r
                                logger.catching(e);\r
                                logger.error(marker, String.format("A %s %s mappa feldolgozása nem lehetséges. A rendszer üzenete: %s", folderID, folderName, e.getMessage()));\r
+                               throw e;\r
                        }\r
+                       current++;\r
+                       setProgress(current * 100 / overall);\r
                }\r
                return result;\r
        }\r
@@ -91,14 +132,17 @@ public class ImportStatisticsStep extends JobStep {
                                String start = CalendarUtils.toString(CalendarUtils.createCalendar(scheduledStart), SCHEDULED_FORMAT);\r
                                //String rundownName = NoSQLUtils.asString(rundown, IOctopusAPI.NAME);\r
                                rundownName = String.format("%s %s %s", start, name, channel);\r
-                               List<DBObject> stories = octopusAPI.getRundownStories(rundownID);\r
+                               List<DBObject> stories = octopusAPI.getRundownStories(rundownID, createFieldsObject());\r
                                if (stories != null)\r
                                        result.putAll(processStories(stories, null));\r
                        } catch (Exception e) {\r
                                logger.catching(e);\r
                                logger.error(marker,\r
                                                String.format("A %s %s tükör feldolgozása nem lehetséges. A rendszer üzenete: %s", rundownID, rundownName, e.getMessage()));\r
+                               throw e;\r
                        }\r
+                       current++;\r
+                       setProgress(current * 100 / overall);\r
                }\r
                return result;\r
        }\r
@@ -107,16 +151,33 @@ public class ImportStatisticsStep extends JobStep {
                Map<Long, BasicDBObject> result = new HashMap<>();\r
                for (DBObject storyObject : stories) {\r
                        BasicDBObject story = (BasicDBObject) storyObject;\r
-                       BasicDBObject mosObjects = NoSQLUtils.asDBObject(story, IOctopusAPI.MOS_OBJECTS);\r
-                       if (mosObjects == null || mosObjects.isEmpty())\r
-                               continue;\r
+\r
                        long storyID = NoSQLUtils.asLong(story, IOctopusAPI.ID);\r
                        if (storyID == 0)\r
                                continue;\r
 \r
                        if (scheduledDate != null) {\r
-                               //story.get\r
+                               Date scheduleFrom = story.getDate(IOctopusAPI.SCHEDULEFROM);\r
+                               if (scheduleFrom == null)\r
+                                       continue;\r
+                               if (scheduleFrom.getTime() != scheduledDate.getTime().getTime())\r
+                                       continue;\r
+                       }\r
 \r
+                       List<BasicDBObject> mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS);\r
+                       if (mosObjects == null || mosObjects.isEmpty())\r
+                               continue;\r
+\r
+                       for (BasicDBObject mosObject : mosObjects) {\r
+                               String clipName = NoSQLUtils.asString(mosObject, IOctopusAPI.OBJ_ID);\r
+                               if (clipName != null && clipName.length() > 0) {\r
+                                       BasicDBObject clip = (BasicDBObject) clipCollection.findOne(new BasicDBObject(LONGNAMEID, clipName));\r
+                                       if (clip != null) {\r
+                                               long duration = NoSQLUtils.asLong(clip, DURATION);\r
+                                               if (duration > 0)\r
+                                                       mosObject.put("duration", duration);\r
+                                       }\r
+                               }\r
                        }\r
 \r
                        if (!result.containsKey(storyID))\r
@@ -125,4 +186,15 @@ public class ImportStatisticsStep extends JobStep {
                return result;\r
        }\r
 \r
+       private void store(Calendar scheduledDate, Map<Long, BasicDBObject> stories) {\r
+               BasicDBObject dailyHistory = new BasicDBObject();\r
+               dailyHistory.put("dateTime", scheduledDate.getTime());\r
+               dailyHistory.put("rawData", new BasicDBList(stories.values()));\r
+               DBCollection collection = db.getCollection("daily_news_history");\r
+               BasicDBObject existingHistory = (BasicDBObject) collection.findOne(new BasicDBObject("dateTime", scheduledDate.getTime()));\r
+               if (existingHistory != null)\r
+                       dailyHistory.put(IOctopusAPI._ID, existingHistory.getID());\r
+               collection.save(dailyHistory);\r
+       }\r
+\r
 }\r
index 28e7c192bfadcbb2f584d242caf948a9c6395331..80d2c91cfc9e724cad1a5a595d78b3f0fc00c806 100644 (file)
@@ -1,13 +1,17 @@
 package user.jobengine.server.steps;\r
 \r
 import java.io.File;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.Date;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
-import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Item;\r
+import user.jobengine.db.ItemManager;\r
 import user.jobengine.db.ItemType;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.server.IJobEngine;\r
@@ -19,17 +23,36 @@ import user.jobengine.server.IJobRuntime;
  * @author robi\r
  */\r
 public class MetadataTransformStep extends JobStep {\r
+       private static final String CONFLICT = "CONFLICT";\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null";\r
        public static final String DEFAULT_MEDIATYPE = "Generic";\r
+       private ItemManager itemManager;\r
 \r
        @StepEntry\r
-       public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+       public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                Media mediaCubeMedia = null;\r
                try {\r
-                       IItemManager itemManager = jobEngine.getItemManager();\r
+                       itemManager = (ItemManager) jobEngine.getItemManager();\r
                        if (itemManager == null)\r
                                throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
+\r
+                       File sourceMediaFile = new File(archiveItem.getMediaFile());\r
+                       String sourceFileName = sourceMediaFile.getName();\r
+\r
+                       if (itemManager.isMediaFileExists(sourceFileName)) {\r
+                               try {\r
+                                       Path sourcePath = Paths.get(archiveItem.getMediaFile());\r
+                                       Path parent = sourcePath.getParent();\r
+                                       EscortFiles.ensureUNCFolder(parent.toString(), CONFLICT);\r
+                                       Files.move(sourcePath, Paths.get(parent.toString(), sourceFileName + (new Date()).getTime()));\r
+                               } catch (Exception e1) {\r
+                                       logger.catching(e1);\r
+                                       logger.error(getMarker(), "Hiba az állomány {} mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
+                               }\r
+                               throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges.");\r
+                       }\r
+\r
                        Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId());\r
                        jobRuntime.incrementProgress(50);\r
 \r
index c5e96a9e090ae602c28855dce8889651151b24d8..0c6b2236a9a76f736c6581d246a393d787c3d164 100644 (file)
@@ -179,6 +179,10 @@ public class OctopusDataMiner {
                        return;\r
                if (newIDs != null && newIDs.size() > 0)\r
                        oldIDs.removeAll(newIDs);\r
+\r
+               if (disableWrite)\r
+                       return;\r
+\r
                DBCollection collection = db.getCollection(collectionName);\r
                for (long id : oldIDs) {\r
                        logger.info("Deleting {} from {}", id, collectionName);\r
@@ -210,9 +214,6 @@ public class OctopusDataMiner {
                storeRundowns(rundowns);\r
                storeStoryFolders(storyFolders);\r
 \r
-               if (disableWrite)\r
-                       return;\r
-\r
                deleteDiff(currentRundowns.keySet(), rundownIDs, IOctopusAPI.RUNDOWN_COLLECTION);\r
                deleteDiff(currentFolder.keySet(), folderIDs, IOctopusAPI.FOLDER_COLLECTION);\r
                deleteDiff(currentStories.keySet(), storyIDs, IOctopusAPI.STORY_COLLECTION);\r
index 4e1ba9cc2f5fe6bb4942d186faa680fdd4b39c36..ce7ba73345278c54b6a2080f975559baebc69bcc 100644 (file)
@@ -22,11 +22,11 @@ SET LOCAL_CONFIG_LOCATION=config
        "lcd ..\" ^\r
        "lcd %LOCAL_CONFIG_LOCATION%" ^\r
        "synchronize remote -filemask=config.xml" ^\r
-       "cd .." ^\r
-       "synchronize remote -filemask=scheduledjobs.json" ^\r
        "exit"\r
        \r
        ECHO *** Completed ***\r
 @ECHO ON\r
 \r
+REM "cd .." ^\r
+REM    "synchronize remote -filemask=scheduledjobs.json" ^\r
  \r
index 9b6db5c811eb652f2728e5c774fb23b768c2e730..e8e7f38f19bdeaa3e19f414266984e2cf0175d01 100644 (file)
@@ -3,6 +3,7 @@ package user.commons.octopus;
 import java.util.Date;\r
 import java.util.List;\r
 \r
+import com.ibm.nosql.json.api.BasicDBObject;\r
 import com.ibm.nosql.json.api.DBObject;\r
 \r
 public interface IOctopusAPI {\r
@@ -45,6 +46,7 @@ public interface IOctopusAPI {
        static final String _ID = "_id";\r
        static final String STORYID = "storyId";\r
        static final String FORMAT = "format";\r
+       static final String REPORTERS = "reporters";\r
 \r
        DBObject getRundown(Date scheduledDate);\r
 \r
@@ -58,6 +60,8 @@ public interface IOctopusAPI {
 \r
        List<DBObject> getRundownStories(long id);\r
 \r
+       List<DBObject> getRundownStories(long id, BasicDBObject fields);\r
+\r
        List<DBObject> getStories();\r
 \r
        List<DBObject> getStoriesByID(String id);\r
@@ -73,4 +77,6 @@ public interface IOctopusAPI {
        List<DBObject> getStoryFoldersByPlaceHolderID(String placeHolderID);\r
 \r
        List<DBObject> getStoryFolderStories(long storyFolderID);\r
+\r
+       List<DBObject> getStoryFolderStories(long storyFolderId, BasicDBObject fields);\r
 }\r
index eeee1dec6d6fd48843b7e629be692a33c55b79fc..b1d208f006f7f6e55894512de1e3a1e6ed12407f 100644 (file)
@@ -151,6 +151,17 @@ public class OctopusAPI implements IOctopusAPI {
                return result;\r
        }\r
 \r
+       @Override\r
+       public List<DBObject> getRundownStories(long id, BasicDBObject fields) {\r
+               List<DBObject> result = null;\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
+               DBCursor find = collection.find(new BasicDBObject(REF_RUNDOWN, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, id))), fields)\r
+                               .sort(new BasicDBObject("name", 1));\r
+               if (find.hasNext())\r
+                       result = find.toArray();\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public List<DBObject> getStories() {\r
                List<DBObject> result = null;\r
@@ -241,4 +252,16 @@ public class OctopusAPI implements IOctopusAPI {
                        result = find.toArray();\r
                return result;\r
        }\r
+\r
+       @Override\r
+       public List<DBObject> getStoryFolderStories(long storyFolderId, BasicDBObject fields) {\r
+               List<DBObject> result = null;\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
+               DBCursor find = collection.find(new BasicDBObject(REF_STORYFOLDER, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, storyFolderId))), fields)\r
+                               .sort(new BasicDBObject(NAME, 1));\r
+               if (find.hasNext())\r
+                       result = find.toArray();\r
+               return result;\r
+       }\r
+\r
 }\r
index 47cb092455783e215406f39b1df1119d5601db04..f72381815f863d365238f19abf1325b262072481 100644 (file)
@@ -6,12 +6,21 @@ import static org.junit.Assert.assertTrue;
 import java.io.FileInputStream;\r
 import java.lang.invoke.MethodHandles;\r
 import java.net.URL;\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
 import java.sql.SQLException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.Properties;\r
+import java.util.Set;\r
 \r
 import javax.ws.rs.core.Response;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
 import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r
 import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r
 import org.junit.BeforeClass;\r
@@ -130,6 +139,83 @@ public class OctopusDataMinerTest {
        //              assertEquals(2, m1.get("1"));\r
        //      }\r
 \r
+       @Test\r
+       public void test3() throws Exception {\r
+               List<String> allDeleted = Files.readAllLines(Paths.get("c:\\Temp\\all_deleted.log"));\r
+               List<String> deletedNames = new ArrayList<>();\r
+               List<String> dirNames = new ArrayList<>();\r
+               for (String line : allDeleted) {\r
+                       if (StringUtils.isBlank(line))\r
+                               continue;\r
+\r
+                       int pos = line.indexOf(' ', 107);\r
+                       String name = line.substring(107, pos);\r
+                       deletedNames.add(name);\r
+                       //System.out.println(name);\r
+               }\r
+               List<String> allDir = Files.readAllLines(Paths.get("c:\\Temp\\all_dir.csv"));\r
+               for (String line : allDir) {\r
+                       if (StringUtils.isBlank(line))\r
+                               continue;\r
+\r
+                       int pos = line.indexOf(';');\r
+                       String name = line.substring(0, pos);\r
+                       dirNames.add(name);\r
+                       //System.out.println(name);\r
+               }\r
+\r
+               for (String deletedName : deletedNames) {\r
+                       if (dirNames.contains(deletedName))\r
+                               System.out.println(deletedName);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void test4() throws Exception {\r
+               List<String> all = Files.readAllLines(Paths.get("c:\\Temp\\restorables.txt"));\r
+               SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd. HH:mm:ss");\r
+               Map<String, List<Date>> dates = new HashMap<>();\r
+               for (String line : all) {\r
+                       if (StringUtils.isBlank(line))\r
+                               continue;\r
+\r
+                       int pos = line.indexOf('\t');\r
+                       String d = line.substring(0, pos);\r
+                       Date date = df.parse(d);\r
+                       String name = line.substring(pos + 1);\r
+                       List<Date> list = dates.get(name);\r
+                       if (list == null) {\r
+                               list = new ArrayList<>();\r
+                               dates.put(name, list);\r
+                       }\r
+                       list.add(date);\r
+               }\r
+               Date limit = new Date(2018 - 1900, 1, 19, 6, 0, 0);\r
+               Set<String> keys = dates.keySet();\r
+               int count = 0;\r
+               for (String name : keys) {\r
+\r
+                       boolean haslower = false;\r
+                       boolean hasupper = false;\r
+                       //System.out.println("processing " + name);\r
+\r
+                       for (Date date : dates.get(name)) {\r
+\r
+                               if (date.before(limit))\r
+                                       haslower = true;\r
+                               if (date.after(limit))\r
+                                       hasupper = true;\r
+                               //System.out.println("checked " + df.format(date) + " " + haslower + " " + hasupper);\r
+                       }\r
+\r
+                       if (haslower && hasupper) {\r
+                               System.out.println(name);\r
+                               count++;\r
+                       }\r
+               }\r
+               System.out.println(count);\r
+       }\r
+\r
        @Test\r
        public void testClient() {\r
                ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.28/services/rest/octopus/");\r
index 2fc40479497d7d2dca5cb0534d824741bcef783d..4e36ed057be074cafb6738f6772c7e8e531b758c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
 <launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">\r
 <booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>\r
-<stringAttribute key="M2_GOALS" value="clean deploy"/>\r
+<stringAttribute key="M2_GOALS" value="clean install"/>\r
 <booleanAttribute key="M2_NON_RECURSIVE" value="false"/>\r
 <booleanAttribute key="M2_OFFLINE" value="true"/>\r
 <stringAttribute key="M2_PROFILES" value=""/>\r
diff --git a/server/user.jobengine.osgi.db/sql/stat-details.sql b/server/user.jobengine.osgi.db/sql/stat-details.sql
new file mode 100644 (file)
index 0000000..46382e5
--- /dev/null
@@ -0,0 +1,24 @@
+select * from mediafile where houseid = 'M009781A-0.MXF'\r
+\r
+select *, replace(mediafilehouseid, concat('-',itemhouseid), '') from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+select count(distinct(replace(mediafilehouseid, concat('-',itemhouseid), ''))) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+select count(distinct(mediahouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+\r
+select * from vw_items where itemtitle like 'Echo TV%'\r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'Echo TV%'\r
+\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%'\r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%'\r
+\r
+select mediatitle, count(*) from  vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' group by mediatitle\r
+\r
+select * from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'\r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%' \r
+\r
+select * from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and itemhouseid != itemtitle\r
+\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and itemhouseid != itemtitle\r
+\r
+\r
diff --git a/server/user.jobengine.osgi.db/sql/stat.sql b/server/user.jobengine.osgi.db/sql/stat.sql
new file mode 100644 (file)
index 0000000..ac732e9
--- /dev/null
@@ -0,0 +1,68 @@
+--Összes klip\r
+select * from vw_items where mediacreated like '2018-01%'\r
+select distinct(mediafilehouseid) from vw_items where mediacreated like '2018-01%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediacreated like '2018-01%'\r
+select count(distinct(mediafilehouseid)) from vw_items\r
+\r
+--Octopus ID-hez rendelt klip \r
+select * from vw_items where itemtitle like 'Echo TV%' and mediacreated like '2018-01%'\r
+select count(distinct(mediahouseid)) from vw_items where itemtitle like 'Echo TV%' and mediacreated like '2018-01%'\r
+\r
+--Automatikusan archivált bejátszók\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and mediacreated like '2018-01%' \r
+\r
+--Automatikusan archivált visszarögzítések\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and (mediatitle like '%CLN%' or mediatitle like '%PGM%') and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and (mediatitle like '%CLN%' or mediatitle like '%PGM%') and mediacreated like '2018-01%' \r
+\r
+--ID-hez nem rendelt manuálisan archivált egyéb klip (magazin vagy forgatott)\r
+select * from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'and mediacreated like '2018-01%' \r
+\r
+--Migrált archívum\r
+select i.created, i.houseid as ihouse, i.title as ititle, m.houseid as mhouse, m.title as mtitle from item i left outer join media m on (m.itemid = i.id) where i.houseid not like 'MC-%' and m.houseid like 'MC-%'  \r
+\r
+--Reklám ID-hez rendelt klip\r
+select * from vw_items where mediahouseid like 'R%'and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where mediahouseid like 'R%'and mediacreated like '2018-01%' \r
+\r
+--Promo ID-hez rendelt klip\r
+select * from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%'\r
+select count(distinct(mediahouseid)) from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%'  \r
+\r
+\r
+--select mediafilehouseid, count(*) from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' group by mediafilehouseid\r
+--select * from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' and (mediafilehouseid='P001473A.MXF' or mediafilehouseid='P001479A.MXF')\r
+\r
+--Mûsor ID-hez rendelt klip\r
+select * from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+\r
+-- Egyéb ?\r
+select * from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+\r
+-----------------------------------------------------------------\r
+\r
+\r
+\r
+select * from vw_items where mediahouseid like 'P%'\r
+select count(distinct(mediahouseid)) from vw_items where mediahouseid like 'P%'\r
+select mediafilehouseid, count(*) from vw_items where mediahouseid like 'P%' group by mediafilehouseid\r
+\r
+select mediafilehouseid, count(*) from vw_items where  mediahouseid like 'R%' group by mediafilehouseid\r
+select * from vw_items where mediahouseid like 'R%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediahouseid like 'R%'\r
+\r
+\r
+select mediafilehouseid, count(*) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' group by mediafilehouseid\r
+select * from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%'\r
+\r
+-----------------------------------------------------------------\r
+\r
+select * from mediafile where houseid = 'M009713A.MXF'\r
index 73081aa46dddbe24cf75b56def500c0c8696b2e9..90d09852991f5eec180ba7495057510553b88caa 100644 (file)
@@ -307,6 +307,8 @@ public interface IItemManager extends IEntityPersister {
 \r
        List<WorkflowAction> getWorkflowActions(Date date);\r
 \r
+       boolean isMediaFileExists(String houseid);\r
+\r
        void merge(IEntityBase entity);\r
 \r
        void mergeItemStructure(Item item);\r
index aa13dd6f6afe0fccd6028074d547ec12f0fa9afb..f10c22e6665ea318e6b8913116a5a190a640169e 100644 (file)
@@ -12,7 +12,6 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 \r
 import sqlj.runtime.ref.DefaultContext;\r
-import user.commons.ListUtils;\r
 \r
 public class ItemDAOEx {\r
        private static final Logger logger = LogManager.getLogger();\r
@@ -116,16 +115,30 @@ public class ItemDAOEx {
                        String query = "select m.ID, m.TITLE, m.DESCRIPTION, m.ITEMID, m.ITEMTYPEID, m.HOUSEID, m.LENGTH, m.CREATED, m.ARCHIVED, m.POSTER from MEDIA m right outer join VW_MEDIAFILES f on (f.MEDIAID = m.ID) where m.CREATED > '2017-12-14' and f.MEDIAFILECOUNT = 1";\r
                        st = connection.prepareStatement(query);\r
                        rs = st.executeQuery();\r
-                       MediaDAO dao = (MediaDAO) manager.getBaseDAO(Media.class);\r
-                       result = ListUtils.cast(dao.entities(context, rs));\r
-                       if (result != null)\r
-                               result.forEach(m -> m.setPersister(manager));\r
+\r
+                       while (rs.next()) {\r
+                               Media m = new Media();\r
+                               m.setPersister(manager);\r
+                               m.setId(rs.getLong("id"));\r
+                               m.setTitle(rs.getString("title"));\r
+                               m.setDescription(rs.getString("description"));\r
+                               m.setItemId(rs.getLong("itemid"));\r
+                               m.setItemTypeId(rs.getLong("itemtypeid"));\r
+                               m.setHouseId(rs.getString("houseid"));\r
+                               m.setLength(rs.getLong("length"));\r
+                               m.setCreated(rs.getTimestamp("created"));\r
+                               m.setArchived(rs.getTimestamp("archived"));\r
+                               m.setPoster(rs.getBytes("poster"));\r
+                               if (result == null)\r
+                                       result = new ArrayList<>();\r
+                               result.add(m);\r
+                       }\r
+\r
                        connection.commit();\r
                } catch (Exception e) {\r
                        try {\r
                                connection.rollback();\r
                        } catch (Exception e1) {\r
-                               e1.printStackTrace();\r
                        }\r
                        manager.throwError(e);\r
                } finally {\r
index 0d12cf5169905f9c6d71b72d83e664ea314b6cb6..6cde5259f4695f41d288160b6e2f9771a440efed 100644 (file)
@@ -1,6 +1,8 @@
 package user.jobengine.db;\r
 \r
 import java.net.URI;\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
 import java.sql.ResultSet;\r
 import java.sql.SQLException;\r
 import java.sql.Statement;\r
@@ -734,6 +736,47 @@ public class ItemManager extends MemoryCache implements IItemManager {
                dbPassword = System.getProperty(DBPASSWORD);\r
        }\r
 \r
+       @Override\r
+       public boolean isMediaFileExists(String houseid) {\r
+               boolean result = false;\r
+               ResultSet rs = null;\r
+               PreparedStatement st = null;\r
+               DefaultContext context = getDbContext();\r
+               Connection connection = context.getConnection();\r
+               try {\r
+\r
+                       String query = String.format("select count(*) as c from MEDIAFILE where HOUSEID = '%s'", houseid);\r
+                       st = connection.prepareStatement(query);\r
+                       rs = st.executeQuery();\r
+                       if (rs.next()) {\r
+                               long versions = rs.getLong("c");\r
+                               result = versions > 0;\r
+                       }\r
+\r
+                       connection.commit();\r
+               } catch (Exception e) {\r
+                       try {\r
+                               connection.rollback();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       throwError(e);\r
+               } finally {\r
+                       try {\r
+                               if (rs != null)\r
+                                       rs.close();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       try {\r
+                               if (st != null)\r
+                                       st.close();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       putDbContext(context);\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public void merge(IEntityBase entity) {\r
                traceIn();\r
@@ -921,4 +964,5 @@ public class ItemManager extends MemoryCache implements IItemManager {
                        logger.error(exc);\r
                }\r
        }\r
+\r
 }\r
index ae4d6d92aa18ec41882b37e7168d5db36638a23c..b02ed534a595432a580ff27a8a0201c3eadee302 100644 (file)
@@ -9,8 +9,6 @@ import java.sql.Connection;
 import java.sql.DriverManager;\r
 import java.sql.PreparedStatement;\r
 import java.sql.ResultSet;\r
-import java.sql.ResultSetMetaData;\r
-import java.sql.Types;\r
 import java.text.SimpleDateFormat;\r
 import java.util.ArrayList;\r
 import java.util.Date;\r
@@ -110,23 +108,10 @@ public class Support_new {
 \r
                //              [clIFsp_EC_MAM] @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null,\r
                //              @@StrParam1 varchar(200)=Null, @@StrParam2 varchar(max)=Null, @@DateParam1 datetime=Null, @@DateParam2 datetime=Null\r
-\r
-               try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, 7, ?, ?, ?, ?, ?, ?, ?)}")) {\r
-                       stmt.setNull(1, Types.INTEGER);\r
-                       stmt.setNull(2, Types.INTEGER);\r
-                       stmt.setNull(3, Types.INTEGER);\r
-                       stmt.setNull(4, Types.INTEGER);\r
-                       stmt.setNull(5, Types.VARCHAR);\r
-                       stmt.setNull(6, Types.VARCHAR);\r
-                       stmt.setDate(7, new java.sql.Date(new Date().getTime()));\r
+               try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, Null, Null)}")) {\r
                        try (ResultSet rs = stmt.executeQuery()) {\r
                                while (rs.next()) {\r
-\r
-                                       ResultSetMetaData rsmd = rs.getMetaData();\r
-                                       for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {\r
-                                               System.out.println(rsmd.getColumnLabel(i));\r
-                                       }\r
-                                       break;\r
+                                       result.add(rs.getString("v_MediaID"));\r
                                }\r
                        }\r
                } catch (Exception e) {\r
diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestSearch.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestSearch.java
new file mode 100644 (file)
index 0000000..73496e2
--- /dev/null
@@ -0,0 +1,62 @@
+package user.jobengine.db;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+\r
+import org.junit.Test;\r
+\r
+import sqlj.runtime.ref.DefaultContext;\r
+\r
+public class TestSearch extends TestBase {\r
+\r
+       public boolean isMediaFileExists(String houseid) {\r
+               boolean result = false;\r
+               ItemManager itemManager = (ItemManager) manager;\r
+               ResultSet rs = null;\r
+               PreparedStatement st = null;\r
+               DefaultContext context = itemManager.getDbContext();\r
+               Connection connection = context.getConnection();\r
+               try {\r
+\r
+                       String query = String.format("select count(*) as c from MEDIAFILE where HOUSEID = '%s'", houseid);\r
+                       st = connection.prepareStatement(query);\r
+                       rs = st.executeQuery();\r
+                       if (rs.next()) {\r
+                               long versions = rs.getLong("c");\r
+                               result = versions > 0;\r
+                       }\r
+\r
+                       connection.commit();\r
+               } catch (Exception e) {\r
+                       try {\r
+                               connection.rollback();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       itemManager.throwError(e);\r
+               } finally {\r
+                       try {\r
+                               if (rs != null)\r
+                                       rs.close();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       try {\r
+                               if (st != null)\r
+                                       st.close();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       itemManager.putDbContext(context);\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+       @Test\r
+       public void testSearchItemByMediaFileHouseID() {\r
+               assertTrue(isMediaFileExists("170807_DEMO_GULYAS_SZG.MXF1"));\r
+               assertTrue(isMediaFileExists("170807_DEMO_GULYAS_SZG.MXF"));\r
+       }\r
+\r
+}\r
index 125cdf8216bd4a46c26ea39b4dfbed30d526bf8f..63147ce2403199ea0e01e37ed46eecce1cfbcb61 100644 (file)
                <menu sclass="whitemenu" label="Archívum" >\r
                        <menupopup>\r
                                <menuitem sclass="rozsda" label="Keresés" onClick='includeContent.src="/pages/search_items.zul"' disabled="false" />\r
-                               <menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                                <menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                                <menuitem sclass="rozsda" label="Hiányzó anyagok" onClick='includeContent.src="/pages/missingmaterials.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
-                               <menuitem sclass="rozsda" label="Test" onClick='includeContent.src="/pages/database.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
+<!--                           <menuitem sclass="rozsda" label="Test" onClick='includeContent.src="/pages/database.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" /> -->\r
+                       </menupopup>\r
+               </menu>\r
+\r
+               <menu sclass="whitemenu" label="Statisztikák" >\r
+                       <menupopup>\r
+                               <menuitem sclass="rozsda" label="Folyamat statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
+                               <menuitem sclass="rozsda" label="Híranyag történet" onClick='includeContent.src="/pages/newshistory.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                        </menupopup>\r
                </menu>\r
 \r
diff --git a/server/user.jobengine.osgi.server/pages/newshistory.zul b/server/user.jobengine.osgi.server/pages/newshistory.zul
new file mode 100644 (file)
index 0000000..cb3cdb2
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<zk xmlns="http://www.zkoss.org/2005/zul">\r
+       <vlayout hflex="1" vflex="1" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.NewsHistoryModel')">\r
+               <hbox height="10px" hflex="1" />\r
+               <hlayout hflex="1">\r
+                       <space bar="false" />\r
+                       <datebox id="chartDateSelector" width="150px" format="yyyy.MM.dd" lenient="false" compact="false" buttonVisible="true" disabled="false" />\r
+                       <button id="btnShowChart" label="Megjelenít" />\r
+               </hlayout>\r
+               <hbox height="10px" hflex="1" />\r
+               <hlayout hflex="1" vflex="1" style="background: red;">\r
+                       <tabbox hflex="1" vflex="1">\r
+                               <tabs>\r
+                                       <tab label="Adatok" closable="false" />\r
+                                       <tab label="Grafikonok" closable="false" />\r
+                               </tabs>\r
+                               <tabpanels>\r
+                                       <tabpanel>\r
+                                               <grid model="@load(vm.dataList)" mold="default" sizedByContent="default" vflex="1" hflex="1">\r
+                                                       <columns sizable="true">\r
+                                                               <column forEach="${vm.columnList}" label="${each}"></column>\r
+                                                       </columns>\r
+                                                       <template name="model" var="r">\r
+                                                               <row>\r
+                                                                       <label forEach="${vm.columnList}" value="${r.get(each)}"></label>\r
+                                                               </row>\r
+                                                       </template>\r
+                                               </grid>\r
+                                       </tabpanel>\r
+                                       <tabpanel>\r
+                                       </tabpanel>\r
+                               </tabpanels>\r
+                       </tabbox>\r
+               </hlayout>\r
+       </vlayout>\r
+</zk>
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryModel.java
new file mode 100644 (file)
index 0000000..6ae2337
--- /dev/null
@@ -0,0 +1,54 @@
+package user.jobengine.zk.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.Init;\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
+\r
+import user.commons.ListUtils;\r
+import user.commons.nosql.NoSQLUtils;\r
+\r
+//http://zkfiddle.org/sample/3op451q/12-Dynamic-Columns#source-1\r
+public class NewsHistoryModel {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       private List<BasicDBObject> dataList;\r
+       private List<String> columnList;\r
+       private DB db = null;\r
+\r
+       private DBCollection collection;\r
+\r
+       public List<String> getColumnList() {\r
+               return columnList;\r
+       }\r
+\r
+       public List<BasicDBObject> getDataList() {\r
+               return dataList;\r
+       }\r
+\r
+       @Init\r
+       public void init() {\r
+               db = NoSQLUtils.getNoSQLDB();\r
+               collection = db.getCollection("sessionlogs");\r
+\r
+               BasicDBObject first = (BasicDBObject) collection.findOne();\r
+               columnList = new ArrayList<>(first.keySet());\r
+\r
+               dataList = ListUtils.cast(collection.find().sort(new BasicDBObject("dateTime", -1)).toArray());\r
+       }\r
+\r
+       public void setColumnList(List<String> columnList) {\r
+               this.columnList = columnList;\r
+       }\r
+\r
+       public void setDataList(List<BasicDBObject> dataList) {\r
+               this.dataList = dataList;\r
+       }\r
+\r
+}\r