From 85c5ebd419e501e7ce9d607f44e0413545892310 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Wed, 21 Feb 2018 15:43:59 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30917 --- server/-configuration/scheduledjobs.json | 32 +++--- ...test-deploy-bkup-mediacube-plugins.launch} | 0 .../config/scheduledjobs.json | 30 ++++++ .../CopyForArchiveNEXIORecordingsStep.java | 37 +++---- .../user/jobengine/server/steps/FakeStep.java | 5 +- .../server/steps/ImportStatisticsStep.java | 100 +++++++++++++++--- .../server/steps/MetadataTransformStep.java | 29 ++++- .../server/steps/OctopusDataMiner.java | 7 +- .../test-deploy-steps-to-bsh-bkup.bat | 4 +- .../src/user/commons/octopus/IOctopusAPI.java | 6 ++ .../src/user/commons/octopus/OctopusAPI.java | 23 ++++ .../octopus/test/OctopusDataMinerTest.java | 86 +++++++++++++++ server/user.jobengine.osgi.db/deploy.launch | 2 +- .../sql/stat-details.sql | 24 +++++ server/user.jobengine.osgi.db/sql/stat.sql | 68 ++++++++++++ .../src/user/jobengine/db/IItemManager.java | 2 + .../src/user/jobengine/db/ItemDAOEx.java | 25 +++-- .../src/user/jobengine/db/ItemManager.java | 44 ++++++++ .../test/user/jobengine/db/Support_new.java | 19 +--- .../test/user/jobengine/db/TestSearch.java | 62 +++++++++++ .../user.jobengine.osgi.server/pages/menu.zul | 10 +- .../pages/newshistory.zul | 36 +++++++ .../jobengine/zk/model/NewsHistoryModel.java | 54 ++++++++++ 23 files changed, 613 insertions(+), 92 deletions(-) rename server/-configuration/{deploy-bkup-mediacube-plugins.launch => test-deploy-bkup-mediacube-plugins.launch} (100%) create mode 100644 server/user.jobengine.osgi.db/sql/stat-details.sql create mode 100644 server/user.jobengine.osgi.db/sql/stat.sql create mode 100644 server/user.jobengine.osgi.db/test/user/jobengine/db/TestSearch.java create mode 100644 server/user.jobengine.osgi.server/pages/newshistory.zul create mode 100644 server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryModel.java diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index 54c1b1ed..16274c8a 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -1,7 +1,7 @@ {"joblist":[ { "active": false, - "name" : "Statisztika importálása", + "name" : "Híranyag statisztika importálása", "template": "import-statistics.xml", "executeimmediate": false, "cronexpression": "0 0 0/1 1/1 * ? *", @@ -16,17 +16,17 @@ "executeimmediate": false, "cronexpression": "0 0 0/1 1/1 * ? *", "parameters": [ - {"name": "csvFilePath", "value": "c:/temp/morpheus", "type": "java.lang.String"}, + {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"}, {"name": "processedFolder", "value": "DONE", "type": "java.lang.String"}, - {"name": "targetPath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE_RESTORE", "type": "java.lang.String"} + {"name": "targetPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"} ] }, { "active": false, - "name" : "Felhasználói archiválás", + "executeimmediate": false, + "name" : "Archiválás az ISILON/ARCHIVE mappából", "template": "archive-ondemand.xml", - "executeimmediate": true, - "cronexpression": "0 0 0/1 1/1 * ? *", + "cronexpression": "0 0 23 * * ?", "parameters": [ {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}, {"name": "globalSourcePath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"}, @@ -51,15 +51,15 @@ }, { "active": false, - "name" : "NEXIO anyagok másolása az ISILON/ARCHIVE mappába", + "executeimmediate": false, + "name" : "NEXIO bejátszók másolása az ISILON/ARCHIVE mappába", "template": "copyforarchive-nexio-materials.xml", - "executeimmediate": true, - "cronexpression": "0 0 0/1 1/1 * ? *", + "cronexpression": "0 0 10 * * ?", "parameters": [ {"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"}, {"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"}, {"name": "nexioPassword", "value": "system", "type": "java.lang.String"}, - {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"}, + {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE", "type": "java.lang.String"}, {"name": "archiveUserName", "value": "mediacube", "type": "java.lang.String"}, {"name": "archivePassword", "value": "Broadca5T", "type": "java.lang.String"}, {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"}, @@ -69,7 +69,7 @@ }, { "active": false, - "name" : "NEXIO rögzített anyagok másolása az ISILON/ARCHIVE mappába", + "name" : "NEXIO visszarögzített anyagok másolása az ISILON/ARCHIVE mappába", "template": "copyforarchive-nexio-recordings.xml", "executeimmediate": true, "cronexpression": "0 0 0/1 1/1 * ? *", @@ -105,7 +105,7 @@ "active": false, "name" : "TRAFFIC anyagok visszatöltése", "template": "retrieve-traffic-missing-materials.xml", - "executeimmediate": true, + "executeimmediate": false, "cronexpression": "0 0 0/1 1/1 * ? *", "parameters": [ {"name": "dbUrl", "value": "jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "type": "java.lang.String"}, @@ -130,12 +130,12 @@ }, { "active": false, - "name" : "Anyagok törlése", + "executeimmediate": false, + "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése", "template": "delete-materials.xml", - "executeimmediate": true, - "cronexpression": "0 0 0/1 1/1 * ? *", + "cronexpression": "0 0 5 * * ?", "parameters": [ - {"name": "sourcePath", "value": "q:/TEST", "type": "java.lang.String"} + {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"} ] }, { diff --git a/server/-configuration/deploy-bkup-mediacube-plugins.launch b/server/-configuration/test-deploy-bkup-mediacube-plugins.launch similarity index 100% rename from server/-configuration/deploy-bkup-mediacube-plugins.launch rename to server/-configuration/test-deploy-bkup-mediacube-plugins.launch diff --git a/server/user.jobengine.executors/config/scheduledjobs.json b/server/user.jobengine.executors/config/scheduledjobs.json index eecceedd..9454a95d 100644 --- a/server/user.jobengine.executors/config/scheduledjobs.json +++ b/server/user.jobengine.executors/config/scheduledjobs.json @@ -1,5 +1,27 @@ {"joblist":[ { + "active": false, + "name" : "Híranyag statisztika importálása", + "template": "import-statistics.xml", + "executeimmediate": false, + "cronexpression": "0 0 0/1 1/1 * ? *", + "parameters": [ + {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"} + ] + }, + { + "active": false, + "name" : "MORPHEUS 'missing materials' importálása", + "template": "import-morpheus-missing-materials.xml", + "executeimmediate": false, + "cronexpression": "0 0 0/1 1/1 * ? *", + "parameters": [ + {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"}, + {"name": "processedFolder", "value": "DONE", "type": "java.lang.String"}, + {"name": "targetPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"} + ] + }, + { "active": true, "executeimmediate": true, "name" : "OCTOPUS adatok szinkronizálása", @@ -117,6 +139,14 @@ "name" : "Teszt folyamat", "template": "fake.xml", "cronexpression": "0/10 * * ? * *", + "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ] + }, + { + "active": false, + "name" : "Teszt fork-párhuzamosított folyamat", + "template": "fake-noparams.xml", + "executeimmediate": false, + "cronexpression": "0 40 22 * * ?", "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ] } ]} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java index b1d0bb48..dcd4ba61 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java @@ -5,7 +5,6 @@ import java.net.InetAddress; import java.net.URI; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -42,6 +41,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { private static final String MEDIATYPE = "Visszarögzített"; private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm"; private static final String STARTTIME_FORMAT = "HHmm"; + private static final String RUNDOWNDATE_FORMAT = "yyyyMMdd"; private static final Logger logger = LogManager.getLogger(); private static final String UTF_8 = "utf-8"; private static final String JSON_EXT = ".json"; @@ -54,6 +54,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { private static final String EXTAGENCY = "extagency"; private static final String RECORDDATE = "recorddate"; private static final SimpleDateFormat startTimeformat = new SimpleDateFormat(STARTTIME_FORMAT); + private static final SimpleDateFormat rundownDateformat = new SimpleDateFormat(RUNDOWNDATE_FORMAT); private OctopusAPI octopusAPI; private IItemManager manager; @@ -98,11 +99,12 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { } private void copyFile(FileArchive fileArchive, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception { - String origFileName = fileArchive.getFileName(); - String videoFileName = transferFile(origFileName); + String sourceFileName = fileArchive.getFileName(); + String targetFileName = getTargetFileName(rundownArchive, sourceFileName); + transferFile(sourceFileName, targetFileName); BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive); - transferMetadata(videoFileName, metadata); - createSourceKillDateFile(rundownArchive, origFileName); + transferMetadata(targetFileName, metadata); + createSourceKillDateFile(rundownArchive, sourceFileName); } private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) { @@ -178,20 +180,9 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime(); } - private String getTargetFileName(String sourceFileName, String[] names) { - String result = sourceFileName + MXFEXT; - if (names == null || names.length == 0) - return result; - List remoteNames = new ArrayList<>(); - for (String name : names) { - if (name != null) - remoteNames.add(name.toLowerCase()); - } - int version = 1; - while (remoteNames.contains(result.toLowerCase())) { - result = String.format("%s-%d%s", sourceFileName, version, MXFEXT); - } - return result; + private String getTargetFileName(RundownArchive rundownArchive, String sourceFileName) { + String date = rundownDateformat.format(rundownArchive.getScheduleDate()); + return String.format("%s-%s%s", date, sourceFileName, MXFEXT); } private RundownArchive processClip(BasicDBObject clip) { @@ -348,16 +339,13 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { } - private String transferFile(String sourceFileName) throws Exception { - String result = null; + private void transferFile(String sourceFileName, String targetFileName) throws Exception { int reply = 0; logger.info("Transfer clip {}", sourceFileName); try { sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect(); targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect(); - result = getTargetFileName(sourceFileName, targetFtp.listNames()); - if (!targetFtp.enterRemotePassiveMode()) throw new Exception("!PASV"); @@ -375,7 +363,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { if (!targetFtp.setFileType(FTP.BINARY_FILE_TYPE)) throw new Exception("!TARGET TYPE"); - reply = targetFtp.stor(result); + reply = targetFtp.stor(targetFileName); if (!FTPReply.isPositivePreliminary(reply)) throw new Exception("STOR parancs válasza: " + sourceFtp.getReplyString()); @@ -398,7 +386,6 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { targetUri.cleanUp(); } - return result; } private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java index b5ca3150..4f6512da 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java @@ -2,7 +2,6 @@ package user.jobengine.server.steps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.message.Message; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -17,8 +16,8 @@ public class FakeStep extends JobStep { Object[] result = { itemID + 1 }; //logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId()); - Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId()); - logger.error(jobRuntime.getMarker(), message, new Exception("TESZT")); + // Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId()); + // logger.error(jobRuntime.getMarker(), message, new Exception("TESZT")); try { for (int i = 0; i < count; i++) { //sb.append("Sikeres iteráció : ") diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java index 7268b0ec..798b3fb9 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java @@ -10,7 +10,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; +import com.ibm.nosql.json.api.BasicDBList; import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; import com.ibm.nosql.json.api.DBObject; import user.commons.CalendarUtils; @@ -23,8 +26,15 @@ import user.jobengine.server.IJobRuntime; public class ImportStatisticsStep extends JobStep { private static final Logger logger = LogManager.getLogger(); private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm"; + private static final String NEXIOCLIPS = "nexioclips"; + private static final String LONGNAMEID = "longnameid"; + private static final String DURATION = "duration"; private IOctopusAPI octopusAPI; private Marker marker; + private int overall; + private int current; + private DB db; + private DBCollection clipCollection; private void createAPI(IJobRuntime jobRuntime) throws Exception { try { @@ -36,24 +46,49 @@ public class ImportStatisticsStep extends JobStep { } } + private BasicDBObject createFieldsObject() { + BasicDBObject result = new BasicDBObject(); + result.put(IOctopusAPI._ID, 0); + result.put(IOctopusAPI.ID, 1); + result.put(IOctopusAPI.NAME, 1); + result.put(IOctopusAPI.REF_RUNDOWN, 1); + result.put(IOctopusAPI.REF_STORYFOLDER, 1); + result.put(IOctopusAPI.MOS_OBJECTS, 1); + result.put(IOctopusAPI.PARENT_STORY_ID, 1); + result.put(IOctopusAPI.SCHEDULEFROM, 1); + result.put(IOctopusAPI.REPORTERS, 1); + return result; + } + @StepEntry public Object[] execute(int daysBeforeNow, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { marker = jobRuntime.getMarker(); + db = NoSQLUtils.getNoSQLDB(); + clipCollection = db.getCollection(NEXIOCLIPS); + createAPI(jobRuntime); - Calendar scheduledDate = Calendar.getInstance(); + Calendar scheduledDate = CalendarUtils.createZeroCalendar(Calendar.getInstance()); scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow); List rundowns = octopusAPI.getRundowns(scheduledDate.getTime()); - if (rundowns == null) { - logger.warn(marker, "Nem található adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate)); - return null; - } - Map stories = processRundowns(rundowns); + if (rundowns == null) + logger.warn(marker, "Nincs adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate)); + else + overall += rundowns.size(); List folders = octopusAPI.getStoryFolders(); + if (folders == null) + logger.warn(marker, "Nincs gyűjtőmappa."); + else + overall += folders.size(); + + Map stories = processRundowns(rundowns); + logger.info(jobRuntime.getMarker(), "Adástükörben megtalálható anyagok száma {}", stories.size()); Map folderStories = processFolders(folders, scheduledDate); stories.putAll(folderStories); + logger.info(jobRuntime.getMarker(), "Gyűjtőkben megtalálható anyagok száma {}", stories.size()); + store(scheduledDate, stories); return null; } @@ -66,13 +101,19 @@ public class ImportStatisticsStep extends JobStep { try { folderID = NoSQLUtils.asLong(folder, IOctopusAPI.ID); folderName = folder.getString(IOctopusAPI.NAME); - List stories = octopusAPI.getStoryFolderStories(folderID); - if (stories != null) - result.putAll(processStories(stories, scheduledDate)); + List folderStories = octopusAPI.getStoryFolderStories(folderID, createFieldsObject()); + if (folderStories != null) { + + Map stories = processStories(folderStories, scheduledDate); + result.putAll(stories); + } } catch (Exception e) { logger.catching(e); logger.error(marker, String.format("A %s %s mappa feldolgozása nem lehetséges. A rendszer üzenete: %s", folderID, folderName, e.getMessage())); + throw e; } + current++; + setProgress(current * 100 / overall); } return result; } @@ -91,14 +132,17 @@ public class ImportStatisticsStep extends JobStep { String start = CalendarUtils.toString(CalendarUtils.createCalendar(scheduledStart), SCHEDULED_FORMAT); //String rundownName = NoSQLUtils.asString(rundown, IOctopusAPI.NAME); rundownName = String.format("%s %s %s", start, name, channel); - List stories = octopusAPI.getRundownStories(rundownID); + List stories = octopusAPI.getRundownStories(rundownID, createFieldsObject()); if (stories != null) result.putAll(processStories(stories, null)); } catch (Exception e) { logger.catching(e); logger.error(marker, String.format("A %s %s tükör feldolgozása nem lehetséges. A rendszer üzenete: %s", rundownID, rundownName, e.getMessage())); + throw e; } + current++; + setProgress(current * 100 / overall); } return result; } @@ -107,16 +151,33 @@ public class ImportStatisticsStep extends JobStep { Map result = new HashMap<>(); for (DBObject storyObject : stories) { BasicDBObject story = (BasicDBObject) storyObject; - BasicDBObject mosObjects = NoSQLUtils.asDBObject(story, IOctopusAPI.MOS_OBJECTS); - if (mosObjects == null || mosObjects.isEmpty()) - continue; + long storyID = NoSQLUtils.asLong(story, IOctopusAPI.ID); if (storyID == 0) continue; if (scheduledDate != null) { - //story.get + Date scheduleFrom = story.getDate(IOctopusAPI.SCHEDULEFROM); + if (scheduleFrom == null) + continue; + if (scheduleFrom.getTime() != scheduledDate.getTime().getTime()) + continue; + } + List mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS); + if (mosObjects == null || mosObjects.isEmpty()) + continue; + + for (BasicDBObject mosObject : mosObjects) { + String clipName = NoSQLUtils.asString(mosObject, IOctopusAPI.OBJ_ID); + if (clipName != null && clipName.length() > 0) { + BasicDBObject clip = (BasicDBObject) clipCollection.findOne(new BasicDBObject(LONGNAMEID, clipName)); + if (clip != null) { + long duration = NoSQLUtils.asLong(clip, DURATION); + if (duration > 0) + mosObject.put("duration", duration); + } + } } if (!result.containsKey(storyID)) @@ -125,4 +186,15 @@ public class ImportStatisticsStep extends JobStep { return result; } + private void store(Calendar scheduledDate, Map stories) { + BasicDBObject dailyHistory = new BasicDBObject(); + dailyHistory.put("dateTime", scheduledDate.getTime()); + dailyHistory.put("rawData", new BasicDBList(stories.values())); + DBCollection collection = db.getCollection("daily_news_history"); + BasicDBObject existingHistory = (BasicDBObject) collection.findOne(new BasicDBObject("dateTime", scheduledDate.getTime())); + if (existingHistory != null) + dailyHistory.put(IOctopusAPI._ID, existingHistory.getID()); + collection.save(dailyHistory); + } + } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java index 28e7c192..80d2c91c 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java @@ -1,13 +1,17 @@ package user.jobengine.server.steps; import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Date; import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import user.jobengine.db.IItemManager; import user.jobengine.db.Item; +import user.jobengine.db.ItemManager; import user.jobengine.db.ItemType; import user.jobengine.db.Media; import user.jobengine.server.IJobEngine; @@ -19,17 +23,36 @@ import user.jobengine.server.IJobRuntime; * @author robi */ public class MetadataTransformStep extends JobStep { + private static final String CONFLICT = "CONFLICT"; private static final Logger logger = LogManager.getLogger(); private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null"; public static final String DEFAULT_MEDIATYPE = "Generic"; + private ItemManager itemManager; @StepEntry - public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) { + public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { Media mediaCubeMedia = null; try { - IItemManager itemManager = jobEngine.getItemManager(); + itemManager = (ItemManager) jobEngine.getItemManager(); if (itemManager == null) throw new NullPointerException(ITEM_MANAGER_IS_NULL); + + File sourceMediaFile = new File(archiveItem.getMediaFile()); + String sourceFileName = sourceMediaFile.getName(); + + if (itemManager.isMediaFileExists(sourceFileName)) { + try { + Path sourcePath = Paths.get(archiveItem.getMediaFile()); + Path parent = sourcePath.getParent(); + EscortFiles.ensureUNCFolder(parent.toString(), CONFLICT); + Files.move(sourcePath, Paths.get(parent.toString(), sourceFileName + (new Date()).getTime())); + } catch (Exception e1) { + logger.catching(e1); + logger.error(getMarker(), "Hiba az állomány {} mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage()); + } + throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges."); + } + Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId()); jobRuntime.incrementProgress(50); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java index c5e96a9e..0c6b2236 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java @@ -179,6 +179,10 @@ public class OctopusDataMiner { return; if (newIDs != null && newIDs.size() > 0) oldIDs.removeAll(newIDs); + + if (disableWrite) + return; + DBCollection collection = db.getCollection(collectionName); for (long id : oldIDs) { logger.info("Deleting {} from {}", id, collectionName); @@ -210,9 +214,6 @@ public class OctopusDataMiner { storeRundowns(rundowns); storeStoryFolders(storyFolders); - if (disableWrite) - return; - deleteDiff(currentRundowns.keySet(), rundownIDs, IOctopusAPI.RUNDOWN_COLLECTION); deleteDiff(currentFolder.keySet(), folderIDs, IOctopusAPI.FOLDER_COLLECTION); deleteDiff(currentStories.keySet(), storyIDs, IOctopusAPI.STORY_COLLECTION); diff --git a/server/user.jobengine.executors/test-deploy-steps-to-bsh-bkup.bat b/server/user.jobengine.executors/test-deploy-steps-to-bsh-bkup.bat index 4e1ba9cc..ce7ba733 100644 --- a/server/user.jobengine.executors/test-deploy-steps-to-bsh-bkup.bat +++ b/server/user.jobengine.executors/test-deploy-steps-to-bsh-bkup.bat @@ -22,11 +22,11 @@ SET LOCAL_CONFIG_LOCATION=config "lcd ..\" ^ "lcd %LOCAL_CONFIG_LOCATION%" ^ "synchronize remote -filemask=config.xml" ^ - "cd .." ^ - "synchronize remote -filemask=scheduledjobs.json" ^ "exit" ECHO *** Completed *** @ECHO ON +REM "cd .." ^ +REM "synchronize remote -filemask=scheduledjobs.json" ^ diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java index 9b6db5c8..e8e7f38f 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java @@ -3,6 +3,7 @@ package user.commons.octopus; import java.util.Date; import java.util.List; +import com.ibm.nosql.json.api.BasicDBObject; import com.ibm.nosql.json.api.DBObject; public interface IOctopusAPI { @@ -45,6 +46,7 @@ public interface IOctopusAPI { static final String _ID = "_id"; static final String STORYID = "storyId"; static final String FORMAT = "format"; + static final String REPORTERS = "reporters"; DBObject getRundown(Date scheduledDate); @@ -58,6 +60,8 @@ public interface IOctopusAPI { List getRundownStories(long id); + List getRundownStories(long id, BasicDBObject fields); + List getStories(); List getStoriesByID(String id); @@ -73,4 +77,6 @@ public interface IOctopusAPI { List getStoryFoldersByPlaceHolderID(String placeHolderID); List getStoryFolderStories(long storyFolderID); + + List getStoryFolderStories(long storyFolderId, BasicDBObject fields); } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java index eeee1dec..b1d208f0 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java @@ -151,6 +151,17 @@ public class OctopusAPI implements IOctopusAPI { return result; } + @Override + public List getRundownStories(long id, BasicDBObject fields) { + List result = null; + DBCollection collection = db.getCollection(STORY_COLLECTION); + DBCursor find = collection.find(new BasicDBObject(REF_RUNDOWN, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, id))), fields) + .sort(new BasicDBObject("name", 1)); + if (find.hasNext()) + result = find.toArray(); + return result; + } + @Override public List getStories() { List result = null; @@ -241,4 +252,16 @@ public class OctopusAPI implements IOctopusAPI { result = find.toArray(); return result; } + + @Override + public List getStoryFolderStories(long storyFolderId, BasicDBObject fields) { + List result = null; + DBCollection collection = db.getCollection(STORY_COLLECTION); + DBCursor find = collection.find(new BasicDBObject(REF_STORYFOLDER, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, storyFolderId))), fields) + .sort(new BasicDBObject(NAME, 1)); + if (find.hasNext()) + result = find.toArray(); + return result; + } + } diff --git a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java index 47cb0924..f7238181 100644 --- a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java +++ b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java @@ -6,12 +6,21 @@ import static org.junit.Assert.assertTrue; import java.io.FileInputStream; import java.lang.invoke.MethodHandles; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Properties; +import java.util.Set; import javax.ws.rs.core.Response; +import org.apache.commons.lang.StringUtils; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.junit.BeforeClass; @@ -130,6 +139,83 @@ public class OctopusDataMinerTest { // assertEquals(2, m1.get("1")); // } + @Test + public void test3() throws Exception { + List allDeleted = Files.readAllLines(Paths.get("c:\\Temp\\all_deleted.log")); + List deletedNames = new ArrayList<>(); + List dirNames = new ArrayList<>(); + for (String line : allDeleted) { + if (StringUtils.isBlank(line)) + continue; + + int pos = line.indexOf(' ', 107); + String name = line.substring(107, pos); + deletedNames.add(name); + //System.out.println(name); + } + List allDir = Files.readAllLines(Paths.get("c:\\Temp\\all_dir.csv")); + for (String line : allDir) { + if (StringUtils.isBlank(line)) + continue; + + int pos = line.indexOf(';'); + String name = line.substring(0, pos); + dirNames.add(name); + //System.out.println(name); + } + + for (String deletedName : deletedNames) { + if (dirNames.contains(deletedName)) + System.out.println(deletedName); + } + } + + @Test + public void test4() throws Exception { + List all = Files.readAllLines(Paths.get("c:\\Temp\\restorables.txt")); + SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd. HH:mm:ss"); + Map> dates = new HashMap<>(); + for (String line : all) { + if (StringUtils.isBlank(line)) + continue; + + int pos = line.indexOf('\t'); + String d = line.substring(0, pos); + Date date = df.parse(d); + String name = line.substring(pos + 1); + List list = dates.get(name); + if (list == null) { + list = new ArrayList<>(); + dates.put(name, list); + } + list.add(date); + } + Date limit = new Date(2018 - 1900, 1, 19, 6, 0, 0); + Set keys = dates.keySet(); + int count = 0; + for (String name : keys) { + + boolean haslower = false; + boolean hasupper = false; + //System.out.println("processing " + name); + + for (Date date : dates.get(name)) { + + if (date.before(limit)) + haslower = true; + if (date.after(limit)) + hasupper = true; + //System.out.println("checked " + df.format(date) + " " + haslower + " " + hasupper); + } + + if (haslower && hasupper) { + System.out.println(name); + count++; + } + } + System.out.println(count); + } + @Test public void testClient() { ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.28/services/rest/octopus/"); diff --git a/server/user.jobengine.osgi.db/deploy.launch b/server/user.jobengine.osgi.db/deploy.launch index 2fc40479..4e36ed05 100644 --- a/server/user.jobengine.osgi.db/deploy.launch +++ b/server/user.jobengine.osgi.db/deploy.launch @@ -1,7 +1,7 @@ - + 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 index 00000000..46382e52 --- /dev/null +++ b/server/user.jobengine.osgi.db/sql/stat-details.sql @@ -0,0 +1,24 @@ +select * from mediafile where houseid = 'M009781A-0.MXF' + +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%' +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%' +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%' + +select * from vw_items where itemtitle like 'Echo TV%' +select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'Echo TV%' + +select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' +select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' + +select mediatitle, count(*) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' group by mediatitle + +select * from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%' +select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%' + +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 itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and itemhouseid != itemtitle + +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 itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and itemhouseid != itemtitle + + diff --git a/server/user.jobengine.osgi.db/sql/stat.sql b/server/user.jobengine.osgi.db/sql/stat.sql new file mode 100644 index 00000000..ac732e9a --- /dev/null +++ b/server/user.jobengine.osgi.db/sql/stat.sql @@ -0,0 +1,68 @@ +--Összes klip +select * from vw_items where mediacreated like '2018-01%' +select distinct(mediafilehouseid) from vw_items where mediacreated like '2018-01%' +select count(distinct(mediafilehouseid)) from vw_items where mediacreated like '2018-01%' +select count(distinct(mediafilehouseid)) from vw_items + +--Octopus ID-hez rendelt klip +select * from vw_items where itemtitle like 'Echo TV%' and mediacreated like '2018-01%' +select count(distinct(mediahouseid)) from vw_items where itemtitle like 'Echo TV%' and mediacreated like '2018-01%' + +--Automatikusan archivált bejátszók +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%' +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%' + +--Automatikusan archivált visszarögzítések +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%' +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%' + +--ID-hez nem rendelt manuálisan archivált egyéb klip (magazin vagy forgatott) +select * from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'and mediacreated like '2018-01%' +select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'and mediacreated like '2018-01%' + +--Migrált archívum +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-%' + +--Reklám ID-hez rendelt klip +select * from vw_items where mediahouseid like 'R%'and mediacreated like '2018-01%' +select count(distinct(mediafilehouseid)) from vw_items where mediahouseid like 'R%'and mediacreated like '2018-01%' + +--Promo ID-hez rendelt klip +select * from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' +select count(distinct(mediahouseid)) from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' + + +--select mediafilehouseid, count(*) from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' group by mediafilehouseid +--select * from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' and (mediafilehouseid='P001473A.MXF' or mediafilehouseid='P001479A.MXF') + +--Mûsor ID-hez rendelt klip +select * from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%' +select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%' + +-- Egyéb ? +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%' +and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' + +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%' +and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' + +----------------------------------------------------------------- + + + +select * from vw_items where mediahouseid like 'P%' +select count(distinct(mediahouseid)) from vw_items where mediahouseid like 'P%' +select mediafilehouseid, count(*) from vw_items where mediahouseid like 'P%' group by mediafilehouseid + +select mediafilehouseid, count(*) from vw_items where mediahouseid like 'R%' group by mediafilehouseid +select * from vw_items where mediahouseid like 'R%' +select count(distinct(mediafilehouseid)) from vw_items where mediahouseid like 'R%' + + +select mediafilehouseid, count(*) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' group by mediafilehouseid +select * from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' +select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' + +----------------------------------------------------------------- + +select * from mediafile where houseid = 'M009713A.MXF' diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java index 73081aa4..90d09852 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java @@ -307,6 +307,8 @@ public interface IItemManager extends IEntityPersister { List getWorkflowActions(Date date); + boolean isMediaFileExists(String houseid); + void merge(IEntityBase entity); void mergeItemStructure(Item item); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java index aa13dd6f..f10c22e6 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java @@ -12,7 +12,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import sqlj.runtime.ref.DefaultContext; -import user.commons.ListUtils; public class ItemDAOEx { private static final Logger logger = LogManager.getLogger(); @@ -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"; st = connection.prepareStatement(query); rs = st.executeQuery(); - MediaDAO dao = (MediaDAO) manager.getBaseDAO(Media.class); - result = ListUtils.cast(dao.entities(context, rs)); - if (result != null) - result.forEach(m -> m.setPersister(manager)); + + while (rs.next()) { + Media m = new Media(); + m.setPersister(manager); + m.setId(rs.getLong("id")); + m.setTitle(rs.getString("title")); + m.setDescription(rs.getString("description")); + m.setItemId(rs.getLong("itemid")); + m.setItemTypeId(rs.getLong("itemtypeid")); + m.setHouseId(rs.getString("houseid")); + m.setLength(rs.getLong("length")); + m.setCreated(rs.getTimestamp("created")); + m.setArchived(rs.getTimestamp("archived")); + m.setPoster(rs.getBytes("poster")); + if (result == null) + result = new ArrayList<>(); + result.add(m); + } + connection.commit(); } catch (Exception e) { try { connection.rollback(); } catch (Exception e1) { - e1.printStackTrace(); } manager.throwError(e); } finally { diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java index 0d12cf51..6cde5259 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java @@ -1,6 +1,8 @@ package user.jobengine.db; import java.net.URI; +import java.sql.Connection; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; @@ -734,6 +736,47 @@ public class ItemManager extends MemoryCache implements IItemManager { dbPassword = System.getProperty(DBPASSWORD); } + @Override + public boolean isMediaFileExists(String houseid) { + boolean result = false; + ResultSet rs = null; + PreparedStatement st = null; + DefaultContext context = getDbContext(); + Connection connection = context.getConnection(); + try { + + String query = String.format("select count(*) as c from MEDIAFILE where HOUSEID = '%s'", houseid); + st = connection.prepareStatement(query); + rs = st.executeQuery(); + if (rs.next()) { + long versions = rs.getLong("c"); + result = versions > 0; + } + + connection.commit(); + } catch (Exception e) { + try { + connection.rollback(); + } catch (Exception e1) { + } + throwError(e); + } finally { + try { + if (rs != null) + rs.close(); + } catch (Exception e1) { + } + try { + if (st != null) + st.close(); + } catch (Exception e1) { + } + putDbContext(context); + } + + return result; + } + @Override public void merge(IEntityBase entity) { traceIn(); @@ -921,4 +964,5 @@ public class ItemManager extends MemoryCache implements IItemManager { logger.error(exc); } } + } diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java index ae4d6d92..b02ed534 100644 --- a/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java @@ -9,8 +9,6 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.Types; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -110,23 +108,10 @@ public class Support_new { // [clIFsp_EC_MAM] @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null, // @@StrParam1 varchar(200)=Null, @@StrParam2 varchar(max)=Null, @@DateParam1 datetime=Null, @@DateParam2 datetime=Null - - try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, 7, ?, ?, ?, ?, ?, ?, ?)}")) { - stmt.setNull(1, Types.INTEGER); - stmt.setNull(2, Types.INTEGER); - stmt.setNull(3, Types.INTEGER); - stmt.setNull(4, Types.INTEGER); - stmt.setNull(5, Types.VARCHAR); - stmt.setNull(6, Types.VARCHAR); - stmt.setDate(7, new java.sql.Date(new Date().getTime())); + try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, Null, Null)}")) { try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { - - ResultSetMetaData rsmd = rs.getMetaData(); - for (int i = 1; i < rsmd.getColumnCount() + 1; i++) { - System.out.println(rsmd.getColumnLabel(i)); - } - break; + result.add(rs.getString("v_MediaID")); } } } catch (Exception e) { 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 index 00000000..73496e26 --- /dev/null +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestSearch.java @@ -0,0 +1,62 @@ +package user.jobengine.db; + +import static org.junit.Assert.assertTrue; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import org.junit.Test; + +import sqlj.runtime.ref.DefaultContext; + +public class TestSearch extends TestBase { + + public boolean isMediaFileExists(String houseid) { + boolean result = false; + ItemManager itemManager = (ItemManager) manager; + ResultSet rs = null; + PreparedStatement st = null; + DefaultContext context = itemManager.getDbContext(); + Connection connection = context.getConnection(); + try { + + String query = String.format("select count(*) as c from MEDIAFILE where HOUSEID = '%s'", houseid); + st = connection.prepareStatement(query); + rs = st.executeQuery(); + if (rs.next()) { + long versions = rs.getLong("c"); + result = versions > 0; + } + + connection.commit(); + } catch (Exception e) { + try { + connection.rollback(); + } catch (Exception e1) { + } + itemManager.throwError(e); + } finally { + try { + if (rs != null) + rs.close(); + } catch (Exception e1) { + } + try { + if (st != null) + st.close(); + } catch (Exception e1) { + } + itemManager.putDbContext(context); + } + + return result; + } + + @Test + public void testSearchItemByMediaFileHouseID() { + assertTrue(isMediaFileExists("170807_DEMO_GULYAS_SZG.MXF1")); + assertTrue(isMediaFileExists("170807_DEMO_GULYAS_SZG.MXF")); + } + +} diff --git a/server/user.jobengine.osgi.server/pages/menu.zul b/server/user.jobengine.osgi.server/pages/menu.zul index 125cdf82..63147ce2 100644 --- a/server/user.jobengine.osgi.server/pages/menu.zul +++ b/server/user.jobengine.osgi.server/pages/menu.zul @@ -55,10 +55,16 @@ - - + + + + + + + + diff --git a/server/user.jobengine.osgi.server/pages/newshistory.zul b/server/user.jobengine.osgi.server/pages/newshistory.zul new file mode 100644 index 00000000..cb3cdb2f --- /dev/null +++ b/server/user.jobengine.osgi.server/pages/newshistory.zul @@ -0,0 +1,36 @@ + + + + + + + +