From: Vásáry Dániel Date: Thu, 28 Jun 2018 08:25:43 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=c610f8f18a59af1d53681fd2f7875473ac381329;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31133 --- diff --git a/server/-configuration/run-mediacube-server-bsh.launch b/server/-configuration/run-mediacube-server-bsh.launch index ec4eca74..c4233291 100644 --- a/server/-configuration/run-mediacube-server-bsh.launch +++ b/server/-configuration/run-mediacube-server-bsh.launch @@ -19,7 +19,7 @@ - + diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index bbf85d24..5da5c503 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -54,7 +54,7 @@ "template": "import-statistics.xml", "cronexpression": "0 0 0/1 1/1 * ? *", "parameters": [ - {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"} + {"name": "daysBeforeNow", "value": 5, "type": "java.lang.Integer"} ] }, { diff --git a/server/user.jobengine.executors/config/config.xml b/server/user.jobengine.executors/config/config.xml index 0193802c..be5e7ef0 100644 --- a/server/user.jobengine.executors/config/config.xml +++ b/server/user.jobengine.executors/config/config.xml @@ -11,6 +11,8 @@ + + diff --git a/server/user.jobengine.executors/config/scheduledjobs.json b/server/user.jobengine.executors/config/scheduledjobs.json index 1574ddb3..765919ef 100644 --- a/server/user.jobengine.executors/config/scheduledjobs.json +++ b/server/user.jobengine.executors/config/scheduledjobs.json @@ -19,7 +19,7 @@ { "active": false, "executeimmediate": false, - "name" : "MORPHEUS 'missing materials' importálása", + "name" : "sys: MORPHEUS 'missing materials' importálása", "template": "import-morpheus-missing-materials.xml", "cronexpression": "0 0 0/1 1/1 * ? *", "parameters": [ diff --git a/server/user.jobengine.executors/jobtemplates/import-morpheus-missing-materials.xml b/server/user.jobengine.executors/jobtemplates/import-morpheus-missing-materials.xml index 9745eaf4..c339f067 100644 --- a/server/user.jobengine.executors/jobtemplates/import-morpheus-missing-materials.xml +++ b/server/user.jobengine.executors/jobtemplates/import-morpheus-missing-materials.xml @@ -6,9 +6,6 @@ - - - diff --git a/server/user.jobengine.executors/jobtemplates/sys-recreate-length.xml b/server/user.jobengine.executors/jobtemplates/sys-recreate-length.xml index 44c0e099..ccf8632a 100644 --- a/server/user.jobengine.executors/jobtemplates/sys-recreate-length.xml +++ b/server/user.jobengine.executors/jobtemplates/sys-recreate-length.xml @@ -1,9 +1,8 @@ - + - @@ -71,5 +70,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/sys-recreate-lowres.xml b/server/user.jobengine.executors/jobtemplates/sys-recreate-lowres.xml index 5a617a21..b98bf6a0 100644 --- a/server/user.jobengine.executors/jobtemplates/sys-recreate-lowres.xml +++ b/server/user.jobengine.executors/jobtemplates/sys-recreate-lowres.xml @@ -1,5 +1,5 @@ - + diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java index 18563521..56367a85 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java @@ -44,6 +44,8 @@ public class ArchiveListBuilderStep extends JobStep { public static final String MEDIA_DESCRIPTION = "mediaDescription"; public static final String MEDIA_TYPE = "mediaType"; private static final String DURATION = "duration"; + private static final String EXISTING_MEDIAID = "existingMediaId"; + private Marker marker; private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) { @@ -65,6 +67,7 @@ public class ArchiveListBuilderStep extends JobStep { result.setMediaFile(mediaFilePath.toString()); result.setCatchedFile(catchedFilePath.toString()); result.setDuration(NoSQLUtils.asLong(dbObject, DURATION)); + result.setExistingMediaId(NoSQLUtils.asLong(dbObject, EXISTING_MEDIAID)); } catch (IOException e) { logger.catching(e); return null; @@ -126,6 +129,9 @@ public class ArchiveListBuilderStep extends JobStep { private boolean processPathItem(Path mediaFilePath, final List archiveList, int limit) { File mediaFile = mediaFilePath.toFile(); + // if (mediaFile.length() > 0) + // return false; + if (mediaFile.isDirectory() || !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase()) || mediaFile.getName().toLowerCase().endsWith(WAVEXT.toLowerCase())) { return false; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java index d1643585..916cd88b 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java @@ -93,11 +93,11 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { String videoFileName = fileName + MXFEXT; //A mar letezo mozikat nem archivaljuk le ujra, csak a metaadatot - long existingMediaId = manager.getExistingRundownMedia(origFileName); + long existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, origFileName); if (existingMediaId == 0) transferFile(origFileName + MXFEXT, videoFileName); else - transferChunk(origFileName); + transferChunk(videoFileName); BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive, existingMediaId); transferMetadata(videoFileName, metadata); @@ -373,7 +373,7 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { OutputStream outStream = null; try { targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect(); - outStream = targetFtp.storeFileStream(fileName + MXFEXT); + outStream = targetFtp.storeFileStream(fileName); if (outStream == null) { throw new NullPointerException("Can not open: " + fileName + MXFEXT + " Reply:" + targetFtp.getReplyString()); } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFileStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFileStep.java new file mode 100644 index 00000000..68ae1d64 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFileStep.java @@ -0,0 +1,39 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class DeleteFileStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private Marker marker; + + @StepEntry + public Object[] execute(ArchiveItem archiveItem, boolean isDelete, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getMarker(); + if (isDelete) { + Path filePath = Paths.get(archiveItem.getMediaFile()); + File file = filePath.toFile(); + if (file.exists()) { + if (!file.isDirectory()) { + try { + file.delete(); + } catch (Exception e) { + logger.error(marker, "A '{}' fájl nem törölhető. A rendszer üzenete: {}", filePath, e.getMessage()); + } + + } else + logger.warn(marker, "A '{}' elérés egy mappa.", filePath); + } else + logger.warn(marker, "A '{}' fájl nem található.", filePath); + } + return null; + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/DetectMissingLengthStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/DetectMissingLengthStep.java new file mode 100644 index 00000000..81d6d89a --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/DetectMissingLengthStep.java @@ -0,0 +1,68 @@ +package user.jobengine.server.steps; + +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +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.nosql.NoSQLUtils; +import user.jobengine.db.IItemManager; +import user.jobengine.db.IResultSetConsumer; +import user.jobengine.db.Media; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class DetectMissingLengthStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private Marker marker; + + @StepEntry + public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + Object[] result = { null, null, "%s", null, 0, true }; + marker = jobRuntime.getMarker(); + + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection("missing_length"); + IItemManager manager = jobEngine.getItemManager(); + + try { + String query = "select id from media where length=0 order by archived desc"; + IResultSetConsumer consumer = rs -> { + Media media = manager.getMedia(rs.getLong("id")); + media.setPersister(manager); + return process(collection, result, localHiresPath, media); + }; + manager.executeQuery(query.toString(), consumer, null); + if (result[0] == null) + throw new Exception("Nincs feldolgozandó hiány."); + } catch (Exception e) { + logger.catching(e); + logger.error(marker, e.getMessage()); + } finally { + setProgress(100); + } + return result; + } + + public boolean process(DBCollection collection, Object[] result, String localHiresPath, Media media) { + String name = media.getMediaFilesName(); + if (name == null) + return true; + DBObject existing = collection.findOne(new BasicDBObject("name", name)); + if (existing != null) + return true; + + result[0] = media; + ArchiveItem archiveItem = new ArchiveItem(); + archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString()); + result[1] = archiveItem; + collection.save(new BasicDBObject("name", name)); + return false; + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java index 4a0eadd9..4908da30 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java @@ -57,8 +57,8 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.TIME_TO_AIR, result); storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.DURATION, result); storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.TITLE, result); - storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.DEVICE_ID, result); - storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.REASON, result); + // storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.DEVICE_ID, result); + // storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.REASON, result); return result; } @@ -94,8 +94,8 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { String duration = data[metadatas.get(MorpheusStrings.DURATION)]; String materialID = data[metadatas.get(MorpheusStrings.MATERIAL_ID)]; String title = data[metadatas.get(MorpheusStrings.TITLE)]; - String deviceID = data[metadatas.get(MorpheusStrings.DEVICE_ID)]; - String reason = data[metadatas.get(MorpheusStrings.REASON)]; + // String deviceID = data[metadatas.get(MorpheusStrings.DEVICE_ID)]; + // String reason = data[metadatas.get(MorpheusStrings.REASON)]; DBObject query = QueryBuilder.start() .and(QueryBuilder.start(MorpheusStrings.MATERIALID).is(materialID).get(), QueryBuilder.start(MorpheusStrings.TIMETOAIR).is(timeToAir).get()) @@ -114,8 +114,8 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { dbObject.put(MorpheusStrings.DURATION, duration); dbObject.put(MorpheusStrings.MATERIALID, materialID); dbObject.put(MorpheusStrings.TITLE, title); - dbObject.put(MorpheusStrings.DEVICEID, deviceID); - dbObject.put(MorpheusStrings.REASON, reason); + // dbObject.put(MorpheusStrings.DEVICEID, deviceID); + // dbObject.put(MorpheusStrings.REASON, reason); String fileName = materialID + MXF_EXT; if (Files.exists(Paths.get(targetPath, fileName))) { @@ -132,7 +132,9 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { } else { logger.info(jobRuntime.getMarker(), "Az '{}' anyag megtalálható az archívumban.", materialID); dbObject.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_RESTORABLE); - dbObject.put(MorpheusStrings.MEDIAID, medias.get(0).getId()); + + MediaFile mf = (MediaFile) medias.get(0); + dbObject.put(MorpheusStrings.MEDIAID, mf.getMediaId()); } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ItemManagerExtensions.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ItemManagerExtensions.java new file mode 100644 index 00000000..6cc8a316 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ItemManagerExtensions.java @@ -0,0 +1,28 @@ +package user.jobengine.server.steps; + +import user.jobengine.db.IItemManager; +import user.jobengine.db.IResultSetConsumer; + +public class ItemManagerExtensions { + + public static long getExistingRundownMedia(IItemManager manager, String houseid) { + final long[] result = { 0 }; + StringBuilder query = new StringBuilder(); + query.append("select mediaid, mediafilehouseid, filename"); + query.append(" "); + query.append(String.format("from vw_rundown_items where mediafilehouseid like '%s%%'", houseid)); + query.append(" "); + query.append("order by filename, mediaid"); + IResultSetConsumer consumer = rs -> { + String fileName = rs.getString("filename"); + if (houseid.equals(fileName)) { + result[0] = rs.getLong("mediaid"); + return false; + } else + return true; + }; + manager.executeQuery(query.toString(), consumer, null); + return result[0]; + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java index d89aca15..11349f6f 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java @@ -54,7 +54,7 @@ public class TSMBackupStep extends JobStep { //A dupla ellenorzes a napon beluli ismetlesek miatt kell long existingMediaId = archiveItem.getExistingMediaId(); if (existingMediaId == 0) - existingMediaId = manager.getExistingRundownMedia(sourceFileName.replace(MXFEXT, "")); + existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); if (existingMediaId == 0) { StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString()); @@ -105,10 +105,10 @@ public class TSMBackupStep extends JobStep { List mediaFiles = existingMedia.getMediaFiles(); if (mediaFiles != null) { for (MediaFile mf : mediaFiles) { + mf.setPersister(manager); mf.setId(0); mf.setMedia(mediaCubeMedia); mf.add(); - mediaCubeMedia.appendMediaFile(mf); } } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java index 7f1f21b2..efdcf7f5 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java @@ -105,7 +105,7 @@ public class TranscodeSELENIOStep extends JobStep { //A dupla ellenorzes a napon beluli ismetlesek miatt kell long existingMediaId = archiveItem.getExistingMediaId(); if (existingMediaId == 0) - existingMediaId = manager.getExistingRundownMedia(sourceFileName.replace(MXFEXT, "")); + existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); if (existingMediaId != 0) return null; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java b/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java index 774bdee7..51097f8b 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java @@ -99,6 +99,13 @@ public class NexioDispatcher implements ClipEventListener { public NexioDispatcher() { this.db = NoSQLUtils.getNoSQLDB(); disabled = Boolean.parseBoolean(System.getProperty(NEXIO_DISABLE, "false")); + + // Runtime.getRuntime().addShutdownHook(new Thread() { + // @Override + // public void run() { + // logger.info("SHUTDOWN!!!!!"); + // } + // }); } @Override diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java index a4705e22..fad74d42 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java @@ -10,6 +10,8 @@ import org.apache.logging.log4j.Logger; 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.DBCursor; +import com.ibm.nosql.json.api.DBObject; import com.ibm.nosql.json.api.NoSQLClient; public class NoSQLUtils { @@ -87,6 +89,16 @@ public class NoSQLUtils { return result; } + public static List asList(DBCursor cursor) { + List result = null; + if (cursor.hasNext()) + result = cursor.toArray(); + cursor.close(); + if (result == null) + result = new ArrayList<>(); + return result; + } + public static long asLong(BasicDBObject obj, String name) { long result = 0; if (obj != null && obj.containsKey(name)) @@ -103,8 +115,8 @@ public class NoSQLUtils { public static DB getNoSQLDB() { try { - if (noSQLClient == null) - noSQLClient = NoSQLClient.getDB(NoSQLUtils.Url, NoSQLUtils.User, NoSQLUtils.Pass); + // if (noSQLClient == null) + noSQLClient = NoSQLClient.getDB(NoSQLUtils.Url, NoSQLUtils.User, NoSQLUtils.Pass); } catch (Exception e) { logger.catching(e); } 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 3040888a..df2e0300 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 @@ -69,6 +69,7 @@ public class OctopusAPI implements IOctopusAPI { DBCursor findParents = rundownCollection.find(query); if (findParents.hasNext()) result = findParents.toArray(); + findParents.close(); return result; } @@ -157,9 +158,14 @@ public class OctopusAPI implements IOctopusAPI { DBCollection storyCollection = db.getCollection(STORY_COLLECTION); BasicDBObject criteria = new BasicDBObject(MOS_OBJECTS, new BasicDBObject($ELEMMATCH, new BasicDBObject(OBJ_ID, id))); DBCursor find = storyCollection.find(criteria, new BasicDBObject(REF_RUNDOWN, 1)); - if (!find.hasNext()) + //List rundowns = NoSQLUtils.asList(find); + if (!find.hasNext()) { + find.close(); return null; - return getReferencedObjects(find.toArray(), RUNDOWN_COLLECTION, REF_RUNDOWN); + } + List result = getReferencedObjects(find.toArray(), RUNDOWN_COLLECTION, REF_RUNDOWN); + find.close(); + return result; } @Override 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 3e5c9bdc..0b5f655f 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 @@ -146,7 +146,7 @@ public interface IItemManager extends IEntityPersister { */ List getDynamicItemTypes(); - long getExistingRundownMedia(String houseid); + // long getExistingRundownMedia(String houseid); /** * Elkéri a FileTypeDAO-tól a bemeneti paraméterként kapott névvel rendelekző FileType-ot. 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 6729fe82..26854aca 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 @@ -554,25 +554,25 @@ public class ItemManager extends MemoryCache implements IItemManager { return result; } - @Override - public long getExistingRundownMedia(String houseid) { - final long[] result = { 0 }; - StringBuilder query = new StringBuilder(); - query.append("select itemid, mediaid, replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') filename"); - query.append(" "); - query.append("from vw_items where replace(mediafilehouseid, concat('-', itemhouseid), '') != mediafilehouseid"); - query.append(" "); - query.append("and replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') = ?"); - IStatementDecorator decorator = st -> { - st.setString(1, houseid); - }; - IResultSetConsumer consumer = rs -> { - result[0] = rs.getLong("mediaid"); - return false; - }; - executeQuery(query.toString(), consumer, decorator); - return result[0]; - } + // @Override + // public long getExistingRundownMedia(String houseid) { + // final long[] result = { 0 }; + // StringBuilder query = new StringBuilder(); + // query.append("select itemid, mediaid, replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') filename"); + // query.append(" "); + // query.append("from vw_items where replace(mediafilehouseid, concat('-', itemhouseid), '') != mediafilehouseid"); + // query.append(" "); + // query.append("and replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') = ?"); + // IStatementDecorator decorator = st -> { + // st.setString(1, houseid); + // }; + // IResultSetConsumer consumer = rs -> { + // result[0] = rs.getLong("mediaid"); + // return false; + // }; + // executeQuery(query.toString(), consumer, decorator); + // return result[0]; + // } @Override public FileType getFileType(String name) { diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java index 83902809..a32ded2b 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java @@ -66,7 +66,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged Map jobParameters = importJob.getJobParameters(); Object targetPath = jobParameters.get(TARGETPATH); if (!(targetPath instanceof String)) { - Messagebox.show("Nem található a rendszerben a 'import-morpheus-missing-materials.xml' folyamatsablon."); + Messagebox.show("Nem található az 'import-morpheus-missing-materials.xml' folyamatsablonban a 'targetPath' paraméter."); return; } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryCharts.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryCharts.java index 559974f1..f5d2e8af 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryCharts.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryCharts.java @@ -20,7 +20,7 @@ public class NewsHistoryCharts { Point maxPoint = null; for (String name : datas.keySet()) { BasicDBObject dbo = NoSQLUtils.asDBObject(datas, name); - Number y = dbo.getLong(member); + Number y = NoSQLUtils.asLong(dbo, member); Point point = new Point(name, y); charts.getSeries().addPoint(point); if (maxPoint == null || y.longValue() > maxPoint.getY().longValue()) diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java index 0afd81ff..3a0d3b8b 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java @@ -31,9 +31,11 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import com.ibm.nosql.json.JSONUtil; 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 sqlj.runtime.ref.DefaultContext; import user.commons.CalendarUtils; @@ -71,9 +73,9 @@ public class Support { // System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns"); // System.setProperty("jobengine.octopus.stories.name", "test_stories"); // System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders"); - System.setProperty("jobengine.octopus.rundowns.name", "rundowns180608"); - System.setProperty("jobengine.octopus.stories.name", "stories180608"); - System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180608"); + System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); + System.setProperty("jobengine.octopus.stories.name", "stories180620"); + System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); System.setProperty("jobengine.nosql.db.user", "db2admin"); @@ -226,28 +228,47 @@ public class Support { final Map> result = new HashMap<>(); final List resultList = new ArrayList<>(); StringBuilder query = new StringBuilder(); - query.append("select itemid, mediaid, replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') filename"); + query.append("select mediaid, mediafilehouseid, filename"); query.append(" "); - query.append("from vw_items where replace(mediafilehouseid, concat('-', itemhouseid), '') != mediafilehouseid"); + query.append(String.format("from vw_rundown_items where mediafilehouseid like '%s%%'", houseid)); query.append(" "); - query.append("and replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') = ?"); - IStatementDecorator decorator = st -> { - st.setString(1, houseid); - }; + query.append("order by filename, mediaid"); IResultSetConsumer consumer = rs -> { - Media media = manager.getMedia(rs.getLong("mediaid")); - - if (result.size() == 0) - result.put(media, resultList); + String fileName = rs.getString("filename"); + if (houseid.equals(fileName)) { + Media media = manager.getMedia(rs.getLong("mediaid")); + if (result.size() == 0) + result.put(media, resultList); - Item item = manager.getItem(media.getItemId()); - resultList.add(item.getTitle()); + Item item = manager.getItem(media.getItemId()); + resultList.add(item.getTitle()); + } return true; }; - manager.executeQuery(query.toString(), consumer, decorator); + manager.executeQuery(query.toString(), consumer, null); return result; } + public long getExistingRundownMedia(IItemManager manager, String houseid) { + final long[] result = { 0 }; + StringBuilder query = new StringBuilder(); + query.append("select mediaid, mediafilehouseid, filename"); + query.append(" "); + query.append(String.format("from vw_rundown_items where mediafilehouseid like '%s%%'", houseid)); + query.append(" "); + query.append("order by filename, mediaid"); + IResultSetConsumer consumer = rs -> { + String fileName = rs.getString("filename"); + if (houseid.equals(fileName)) { + result[0] = rs.getLong("mediaid"); + return false; + } else + return true; + }; + manager.executeQuery(query.toString(), consumer, null); + return result[0]; + } + private Item getRundownItem(BasicDBObject rundown) { StringBuilder query = new StringBuilder(); @@ -265,6 +286,22 @@ public class Support { return result[0]; } + public List getRundownMedias(String from, String to) { + final List result = new ArrayList<>(); + String query = "select distinct(filename) from vw_rundown_items where archived > ? and archived < ?"; + IStatementDecorator decorator = s -> { + s.setString(1, from); + s.setString(2, to); + }; + IResultSetConsumer consumer = rs -> { + String fileName = rs.getString(1); + result.add(fileName); + return true; + }; + manager.executeQuery(query, consumer, decorator); + return result; + } + private String getRundownTitle(BasicDBObject rundown) { String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME); if (StringUtils.isBlank(name)) @@ -463,11 +500,58 @@ public class Support { } @Test - public void test1() { - File sourceMediaFile = new File("c:/_downloads/mediacube-backlog-2018-05.pdf"); - String sourceFileName = sourceMediaFile.getName(); - String sourceFile = Paths.get("l:", sourceFileName).toString(); - System.out.println(sourceFile); + public void repairRundownChunksNoLog() throws Exception { + OctopusAPI octopusAPI = new OctopusAPI(); + List archivedFiles = getRundownMedias("2018-03-03", "2018-06-07"); + for (String file : archivedFiles) { + //lenyeli a duplikalt hozzadast, lekezelni. addig nem futtathato!!!!!!! + Map> existing = getExistingItemHouseIDs(file); + + Media media = (Media) existing.keySet().toArray()[0]; + List itemTitles = (List) existing.values().toArray()[0]; + List rundowns = ListUtils.cast(octopusAPI.getRundownsByPlaceHolderID(file)); + System.out.println(String.format("%s %d: ", file, media.getId())); + + if (rundowns == null) + continue; + for (BasicDBObject rd : rundowns) { + String rundownTitle = getRundownTitle(rd); + if (itemTitles.contains(rundownTitle) || rundownTitle.contains("00:00")) + continue; + + Item item = getRundownItem(rd); + if (item == null) { + item = manager.createItem("Generic", rundownTitle, null, NoSQLUtils.asString(rd, IOctopusAPI.ID)); + item.add(); + System.out.print(String.format("* %s,", rundownTitle)); + } else { + System.out.print(String.format("%s (%d),", rundownTitle, item.getId())); + } + + List mediaFiles = media.getMediaFiles(); + if (mediaFiles != null) { + for (MediaFile mf : mediaFiles) { + mf.setId(0); + mf.setMediaId(0); + } + } + media.setId(0); + media.setItemId(item.getId()); + media.setPersister(manager); + media.add(); + + } + } + } + + @Test + public void test1() throws IOException { + byte[] content = Files.readAllBytes(Paths.get("//10.10.1.100/BRAAVOS/ARCHIVE/.STATUS/!!!!!76952087-76828571-CAM02_2070-20180517082324.MXF.json")); + + DBObject o = JSONUtil.jsonToDbObject(new String(content)); + + System.out.println(o); + } }