#319 ProRes archiválás
authorvasary.daniel <TFS\vasary.daniel>
Tue, 5 Apr 2022 11:43:47 +0000 (11:43 +0000)
committervasary.daniel <TFS\vasary.daniel>
Tue, 5 Apr 2022 11:43:47 +0000 (11:43 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C33132

17 files changed:
server/-product/production/AMC/jobs/schedules.json
server/-product/production/AMC/jobs/templates/PRORES-validate-and-archive.xml [new file with mode: 0644]
server/-product/production/AMC/jobs/templates/prores-archive-checker.xml
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java
server/user.jobengine.executors/src/user/jobengine/server/steps/AnalyzeMediaFilesStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveRecursive.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FileCleanupStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ForkDownloadStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/GenerateJSONMetadataStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataPersisterStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/PRORESTransferFromStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/ProResArchiveCheckerStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/SafeDeleteRecursiveStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferToStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ValidateProResStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/EscortFiles.java
server/user.jobengine.osgi.db/migrations/scripts/040_create_AMC_prores_store.sql

index 5017a2e2905f22a31c67912ce3dc2b042844bc59..87e40df946f2a1c92d34d98f9be0bef727912fca 100644 (file)
                        ]\r
                },\r
                {\r
-             "template": "prores-archive.xml",\r
-                 "name" : "ProRes archiválás",\r
+             "template": "PRORES-archive-checker.xml",\r
+                 "name" : "PRORES archiválás előkészítés",\r
                  "active": false,\r
                  "executeimmediate": false,\r
              "parameters": \r
                        [ \r
-                               { "name": "sourceStoreFolder", "value": "c:\\data", "type": "java.lang.String" },\r
-                               { "name": "sourceStoreName", "value": "AMC_LOCAL", "type": "java.lang.String" },\r
+                               { "name": "sourceStoreName", "value": "PRORES", "type": "java.lang.String" },\r
                                { "name": "filter", "value": {"fileName": ".*\\.(mov)$"},  "type": "java.lang.String" },\r
-                               { "name": "targetStoreName", "value": "AMC_LOCAL", "type": "java.lang.String" },\r
-                               { "name": "escortStoreFolder", "value": "AMC_LOCAL", "type": "java.lang.String" }\r
+                               { "name": "escortStoreName", "value": "TEST_DOWNLOADS", "type": "java.lang.String" }\r
                        ]\r
                }\r
        ]\r
diff --git a/server/-product/production/AMC/jobs/templates/PRORES-validate-and-archive.xml b/server/-product/production/AMC/jobs/templates/PRORES-validate-and-archive.xml
new file mode 100644 (file)
index 0000000..65c05b5
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE xml>\r
+\r
+<jobtemplate multiInstance="true" useSessionLog="false">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="sourceStoreUri" type="user.commons.StoreUri"/>\r
+                       <parameter name="fileName" type="java.lang.String"/>\r
+                       <parameter name="tempStoreUri" type="user.commons.StoreUri"/>\r
+                       <parameter name="targetStoreUri" type="user.commons.StoreUri"/>\r
+                       <parameter name="escortFile" type="java.lang.String"/>\r
+               </parameters>\r
+               <variables>\r
+                       <variable name="proresFileName" type="java.lang.String"/>\r
+               </variables>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="PRORESTransferFromStep.java" weight="5">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="sourceStoreUri" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="fileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="tempStoreUri" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="fileName" />\r
+                               </input>\r
+                       </inputs>\r
+                       <outputs>\r
+                               <output>\r
+                                       <variable name="proresFileName" />\r
+                               </output>\r
+                       </outputs>\r
+               </calljobstep>\r
+               <calljobstep type="TSMTransferToStep.java" weight="5">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="tempStoreUri" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="fileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetStoreUri" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="proresFileName" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="MetadataPersisterStep.java" weight="5">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="targetStoreUri" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="escortFile" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="FileCleanupStep.java" weight="5">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="tempStoreUri" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="proresFileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="escortFile" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index 3f2b38c60c23eeb6a5413c27996e51bfb0586e09..419517585b41e33ea82d5d2a139a9bb5f8b3afbb 100644 (file)
@@ -4,10 +4,8 @@
 <jobtemplate multiInstance="false" useSessionLog="false">\r
        <declarations>\r
                <parameters>\r
-                       <parameter name="sourceStoreFolder" type="java.lang.String" />\r
                        <parameter name="sourceStoreName" type="java.lang.String" />\r
-                       <parameter name="targetStoreName" type="java.lang.String" />\r
-                       <parameter name="escortStoreFolder" type="java.lang.String" />\r
+                       <parameter name="escortStoreName" type="java.lang.String" />\r
                        <parameter name="filter" type="com.ibm.nosql.json.api.BasicDBObject" />\r
                </parameters>\r
                <variables>\r
                                        <parameter name="sourceStoreName" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="targetStoreName" />\r
-                               </input>\r
-                               <input>\r
-                                       <parameter name="escortStoreFolder" />\r
+                                       <parameter name="escortStoreName" />\r
                                </input>\r
                        </inputs>\r
                </calljobstep>\r
index 8427465ed10a74f276fdc22afe986516c11d2527..2b11696c3e37a9ca41cef7a1460e0b8ad352a905 100644 (file)
@@ -41,6 +41,8 @@ import java.util.TreeMap;
 import java.util.TreeSet;\r
 import java.util.concurrent.TimeUnit;\r
 import java.util.regex.Pattern;\r
+import java.util.stream.Collector;\r
+import java.util.stream.Collectors;\r
 \r
 import org.apache.commons.io.FileUtils;\r
 import org.apache.commons.io.FilenameUtils;\r
@@ -1551,4 +1553,23 @@ public class SmallTests {
 //             }\r
        }\r
 \r
+       @Test\r
+       public void test9999991() throws Exception {\r
+               Map<String, Integer> sut = new HashMap<String, Integer>();\r
+\r
+               sut.put("E1", 1);\r
+               sut.put("E2", 2);\r
+               sut.put("E3", 3);\r
+\r
+               Collector<Entry<String, Integer>, ?, Map<String, Integer>> collector = Collectors.toMap(x -> {\r
+                       Map.Entry<String, Integer> entry = x;\r
+                       return entry.getKey();\r
+               }, y -> {\r
+                       Map.Entry<String, Integer> entry = y;\r
+                       return entry.getValue();\r
+               });\r
+\r
+               Map<String, Integer> collected = sut.entrySet().stream().collect(collector);\r
+\r
+       }\r
 }\r
index 8f255029af5b3baf92dd4860044e53dda98a4164..8b1679293ae1cc2331f0edae13fb133ed6a733b3 100644 (file)
@@ -16,17 +16,24 @@ public class AnalyzeMediaFilesStep extends JobStep {
        @StepEntry\r
        public Object[] execute(List<String> inputFiles) {\r
                Map<String, MediaArea> result = new HashMap<String, MediaArea>();\r
+\r
+               int progress = 0;\r
+\r
                for (int i = 0; i < inputFiles.size(); i++) {\r
                        String inputFileLocation = inputFiles.get(i);\r
                        MediaArea mediaArea = new MediaArea(Paths.get(inputFileLocation));\r
                        try {\r
                                mediaArea.process();\r
                                result.put(inputFileLocation, mediaArea);\r
+                               progress = i * 100 / inputFiles.size();\r
+                               setProgress(progress);\r
                        } catch (Exception e) {\r
                                logger.error(getSessionMarker(), "Can't analyze input {}, skipping. System message is: {}",\r
                                                e.getMessage());\r
                        }\r
                }\r
+\r
+               setProgress(100);\r
                return new Object[] { result };\r
        }\r
 }\r
index 35fd6530a99b3e73d40f3edd9412a8d4be21c871..cb4db0c231835af341f9f13985c10fb685e34efb 100644 (file)
@@ -102,36 +102,21 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
 \r
                String fileName = filePath.getFileName().toString();\r
                String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
+\r
+               String mediaHouseIdUpper = mediaHouseId.toUpperCase();\r
+               if (mediaHouseIdUpper.endsWith("_CLEAN"))\r
+                       mediaHouseId = mediaHouseIdUpper.replace("_CLEAN", "");\r
+\r
                try {\r
                        result = getPlanAirMetadata(mediaHouseId);\r
 \r
-                       if (result != null) {\r
+                       if (result != null)\r
                                result.setMediaFile(filePath.toString());\r
-                               // 210617 proxy keszites tiltasa\r
-                               result.setDisableProxy(disableProxy);\r
-                       }\r
 \r
-                       logger.info(getSessionMarker(), "PlanAir query done for {}", filePath);\r
                } catch (Exception e) {\r
                        logger.error(getSessionMarker(), "PlanAir metadata error", e);\r
-                       // nem latja a drivert pl.\r
-                       throw e;\r
                }\r
 \r
-//210616 Ha nincs metaadat, nem archivalunk\r
-//             if (result == null) {\r
-//                     result = new ArchiveItem();\r
-//                     BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
-//                     result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis()));\r
-//                     result.setItemTitle(filePath.getParent().toString());\r
-//                     result.setMediaHouseId(mediaHouseId);\r
-//                     result.setMediaTitle(fileName);\r
-//                     // TODO kesobb kivenni\r
-//                     // result.setMediaDescription("/OMARCHIVE");\r
-//                     result.setMediaType("Generic");\r
-//                     result.setMediaFile(filePath.toString());\r
-//             }\r
-\r
                return result;\r
        }\r
 \r
index 8e1a6f4cbcb0b648f55bcdc23fb5017e87e57c97..5b07be6aa769ca3cd1077fe9a3acb8609717a717 100644 (file)
@@ -14,6 +14,17 @@ import user.jobengine.server.steps.shared.EscortFiles;
 public class FileCleanupStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
+       /***\r
+        * Torli a sourceStoreUri + fileName fajlt, az escortFile-t es az\r
+        * escortFile.CATCHED file-t.\r
+        * \r
+        * @param sourceStoreUri\r
+        * @param fileName\r
+        * @param escortFile\r
+        * @return\r
+        * @throws Exception\r
+        */\r
+\r
        @StepEntry\r
        public Object[] execute(StoreUri sourceStoreUri, String fileName, String escortFile) throws Exception {\r
                try {\r
@@ -23,8 +34,14 @@ public class FileCleanupStep extends JobStep {
 \r
                        Path filePath = Paths.get(sourceStoreUri.toString(true), fileName);\r
                        EscortFiles.remove(filePath);\r
-                       EscortFiles.remove(Paths.get(escortFile));\r
-                       EscortFiles.remove(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
+\r
+                       Path escortFilePath = Paths.get(escortFile);\r
+                       if (escortFilePath.toFile().exists())\r
+                               EscortFiles.remove(escortFilePath);\r
+\r
+                       Path escortCatchedFilePath = Paths.get(escortFile + EscortFiles.DOT_CATCHED);\r
+                       if (escortCatchedFilePath.toFile().exists())\r
+                               EscortFiles.remove(escortCatchedFilePath);\r
                } catch (Exception e) {\r
                        logger.error(e.getMessage());\r
                        throw e;\r
index 35431e50e1145939b8a98244fbaf397360f829e7..19467d11ce2faea8f6bf68cd8ea3f86131fc4d3f 100644 (file)
@@ -142,32 +142,20 @@ public class ForkDownloadStep extends JobStep {
                        if (targetExists(tempStoreUri, sourceFileName))\r
                                priority = 51;\r
 \r
-                       //parameterek: IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
+                       // parameterek: IJobRuntime parent, String template, String name, int priority,\r
+                       // Map<String, Object> parameters\r
                        IJobRuntime child = getEngine().submit(null, e -> {\r
                                IJobRuntime r = (IJobRuntime) e.getSource();\r
-                               if (r.isDisableRetry())\r
-                                       return;\r
-\r
-                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
-                                       EscortFiles.removeCatchedFile(escortFile);\r
-\r
-                               if (e.getStatus().equals(JobStatus.FINISHED) && "PBARCHIVE".equals(sourceStoreName)) {\r
-                                       try {\r
-                                               FtpDirectoryLister lister = (FtpDirectoryLister) sourceStoreUri.getLister();\r
-                                               RemoteFile remoteFile = lister.get(sourceFileName);\r
-                                               if (remoteFile == null)\r
-                                                       logger.info(getMarker(), "Remote file for {} is not available", sourceFileName);\r
-                                               else {\r
-                                                       logger.info(getMarker(), "Remote file {} successfully archived, deleting...",\r
-                                                                       sourceFileName);\r
-                                                       lister.delete(remoteFile);\r
-                                               }\r
-                                       } catch (Exception ex) {\r
-                                               logger.error(getMarker(), ex.getMessage());\r
-                                       } finally {\r
-                                               if (sourceStoreUri != null)\r
-                                                       sourceStoreUri.cleanUp();\r
-                                       }\r
+                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) {\r
+                                       if (r.isDisableRetry())\r
+                                               EscortFiles.removeCatchedFile(escortFile);\r
+                               }\r
+\r
+                               if (e.getStatus().equals(JobStatus.FINISHED)) {\r
+                                       if ("PBARCHIVE".equals(sourceStoreName))\r
+                                               successPBARCHIVEPostProcess(sourceStoreUri, sourceFileName, r);\r
+                                       if ("PRORES".equals(sourceStoreName))\r
+                                               successPRORESPostProcess(sourceStoreUri, sourceFileName, r);\r
                                }\r
 \r
                        }, template, "Archiválás", priority, IJobEngine.DEFAULT_OWNER, parameters);\r
@@ -188,6 +176,40 @@ public class ForkDownloadStep extends JobStep {
                return true;\r
        }\r
 \r
+       private void successPBARCHIVEPostProcess(StoreUri sourceStoreUri, String sourceFileName, IJobRuntime runtime) {\r
+               try {\r
+                       FtpDirectoryLister lister = (FtpDirectoryLister) sourceStoreUri.getLister();\r
+                       RemoteFile remoteFile = lister.get(sourceFileName);\r
+                       if (remoteFile == null)\r
+                               logger.info(getMarker(), "Remote file for {} is not available", sourceFileName);\r
+                       else {\r
+                               logger.info(getMarker(), "Remote file {} successfully archived, deleting...", sourceFileName);\r
+                               lister.delete(remoteFile);\r
+                       }\r
+               } catch (Exception ex) {\r
+                       logger.error(getMarker(), ex.getMessage());\r
+               } finally {\r
+                       if (sourceStoreUri != null)\r
+                               sourceStoreUri.cleanUp();\r
+               }\r
+       }\r
+\r
+       private void successPRORESPostProcess(StoreUri sourceStoreUri, String sourceFileName, IJobRuntime runtime) {\r
+               try {\r
+                       Path filePath = Paths.get(sourceStoreUri.toString(true), sourceFileName);\r
+                       EscortFiles.remove(filePath);\r
+\r
+                       if (EscortFiles.isMediaCatched(filePath))\r
+                               EscortFiles.remove(EscortFiles.createMediaCatchFilePath(filePath));\r
+\r
+               } catch (Exception ex) {\r
+                       logger.error(getMarker(), ex.getMessage());\r
+               } finally {\r
+                       if (sourceStoreUri != null)\r
+                               sourceStoreUri.cleanUp();\r
+               }\r
+       }\r
+\r
        private boolean targetExists(StoreUri storeUri, String fileName) {\r
                try {\r
                        Path targetFile = Paths.get(storeUri.toString(true), fileName);\r
index d322ff439437f1edd904ad056acf88149a5014e3..b20304cd75d45dcc96dc3131bb580b9987840116 100644 (file)
@@ -1,9 +1,13 @@
 package user.jobengine.server.steps;\r
 \r
 import java.io.IOException;\r
+import java.nio.file.Files;\r
 import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.nio.file.attribute.FileTime;\r
 import java.sql.Timestamp;\r
+import java.util.Date;\r
 import java.util.Map;\r
 import java.util.Set;\r
 \r
@@ -21,49 +25,65 @@ public class GenerateJSONMetadataStep extends JobStep {
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
-       public Object[] execute(Map<String, MediaArea> files, String sourceStoreName, String targetStoreName,\r
-                       String escortStoreFolder) {\r
+       public Object[] execute(Map<String, MediaArea> files, String sourceStoreName, String escortStoreName)\r
+                       throws Exception {\r
+\r
+               int progress = 0;\r
+               int i = 0;\r
                if (files != null && !files.isEmpty()) {\r
+\r
+                       StoreUri sourceStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.LOCAL);\r
+                       StoreUri targetStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
+                       StoreUri escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
+                       String outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
+\r
                        Set<String> keys = files.keySet();\r
                        for (String inputFileLocation : keys) {\r
                                MediaArea mediaArea = files.get(inputFileLocation);\r
                                try {\r
-                                       processItem(sourceStoreName, targetStoreName, escortStoreFolder, inputFileLocation, mediaArea);\r
+                                       processItem(inputFileLocation, sourceStoreName, sourceStoreUri, targetStoreUri, outputPath,\r
+                                                       mediaArea);\r
+                                       progress = i * 100 / files.size();\r
+                                       setProgress(progress);\r
+                                       i++;\r
                                } catch (Exception e) {\r
                                        logger.error(getSessionMarker(), e.getMessage());\r
                                        logger.catching(e);\r
                                }\r
                        }\r
-               } else {\r
-                       logger.info("files is empty!");\r
                }\r
+\r
+               setProgress(100);\r
+\r
                return null;\r
        }\r
 \r
-       private void processItem(String sourceStoreName, String targetStoreName, String escortStoreFolder,\r
-                       String inputFileLocation, MediaArea mediaArea) throws Exception {\r
-               Path inputPath = Paths.get(inputFileLocation);\r
-\r
-               String fileName = inputPath.getFileName().toString();\r
+       private void processItem(String inputFileLocation, String sourceStoreName, StoreUri sourceStoreUri,\r
+                       StoreUri targetStoreUri, String outputPath, MediaArea mediaArea) throws Exception {\r
+               Path inputFilePath = Paths.get(inputFileLocation);\r
+               String fileName = inputFilePath.getFileName().toString();\r
                String title = FilenameUtils.removeExtension(fileName);\r
-               Timestamp created = null;\r
-               Timestamp modified = null;\r
-               long frameCount = mediaArea.getFrameCount();\r
-               StoreUri sourceStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.LOCAL);\r
-               StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, RemoteStoreProtocol.LOCAL);\r
-               StoreUri escortStoreUri = getManager().getStoreUri(escortStoreFolder, RemoteStoreProtocol.LOCAL);\r
-               String outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
+               BasicFileAttributes attr = Files.readAttributes(inputFilePath, BasicFileAttributes.class);\r
+               FileTime creationTime = attr.creationTime();\r
+               FileTime lastModifiedTime = attr.lastModifiedTime();\r
 \r
-               DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, modified, created, frameCount, 0,\r
+               Timestamp created = Timestamp.from(new Date(creationTime.toMillis()).toInstant());\r
+               Timestamp modified = Timestamp.from(new Date(lastModifiedTime.toMillis()).toInstant());\r
+               long frameCount = mediaArea.getFrameCount();\r
+               long size = inputFilePath.toFile().length();\r
+               DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, modified, created, frameCount, size,\r
                                sourceStoreUri.getId(), targetStoreUri.getId(), 0);\r
-               String escortFileName = targetStoreName + "." + downloadable.getString("fileName"); // needed without\r
-                                                                                                                                                                                       // extension\r
+               downloadable.append("addStoreNameAsFilePrefix", true);\r
+\r
+               String escortFileName = sourceStoreName + "." + downloadable.getString("fileName");\r
+\r
                try {\r
                        if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString(""))) {\r
                                logger.info(getMarker(), "Archive status file created for {}", inputFileLocation);\r
                        } else {\r
                                logger.info(getMarker(), "Archive status file already exists for {}", inputFileLocation);\r
                        }\r
+                       EscortFiles.createMediaCatch(inputFilePath);\r
                } catch (IOException e) {\r
                        logger.error("{}", e.getCause());\r
                        e.printStackTrace();\r
index 2a04cc479ba6b693843014e68ac569a95f60952e..26b2e68cba94b7a3d682fef15d797e5101793ad9 100644 (file)
@@ -25,7 +25,7 @@ public class MetadataPersisterStep extends JobStep {
                try {\r
 \r
                        Path escortFilePath = Paths.get(escortFile);\r
-                       //ha nem ment at a letoltott file az ellenorzesen, akkor már torolve lett\r
+                       // ha nem ment at a letoltott file az ellenorzesen, akkor már torolve lett\r
                        if (escortFilePath.toFile().exists()) {\r
                                String escortFileName = escortFilePath.getFileName().toString();\r
                                String sourceStoreName = escortFileName.substring(0, escortFileName.indexOf("."));\r
@@ -34,6 +34,7 @@ public class MetadataPersisterStep extends JobStep {
                                String fileName = downloadable.getString("fileName");\r
                                long mediaId = downloadable.containsKey("mediaId") ? downloadable.getLong("mediaId") : 0;\r
                                String fileTypeName = fileName.substring(fileName.lastIndexOf(".") + 1).toUpperCase();\r
+                               boolean addStoreNameAsFilePrefix = downloadable.getBoolean("addStoreNameAsFilePrefix");\r
 \r
                                IItemManager manager = getManager();\r
 \r
@@ -41,7 +42,7 @@ public class MetadataPersisterStep extends JobStep {
                                        mediaId = tryGetMediaId(title, mediaId);\r
                                }\r
 \r
-                               //TODO ha van mediaId, akkor update!!!!!!!!!\r
+                               // TODO ha van mediaId, akkor update!!!!!!!!!\r
 \r
                                Timestamp modified = downloadable.getTimestamp("modified");\r
                                Timestamp created = downloadable.getTimestamp("created");\r
@@ -49,14 +50,17 @@ public class MetadataPersisterStep extends JobStep {
 \r
                                String targetStoreName = getManager().getStore(targetStoreUri.getStoreId()).getName();\r
                                if (mediaId == 0) {\r
-                                       //ez elszallhat, mert nincs filetype vagy store\r
-                                       MediaFile mediaFile = manager.createMediaFile(fileName, fileTypeName, targetStoreName);\r
-                                       //ez elszallhat, mert nincs itemtype\r
+                                       // ez elszallhat, mert nincs filetype vagy store\r
+                                       String mediaFileName = fileName;\r
+                                       if (addStoreNameAsFilePrefix)\r
+                                               mediaFileName = sourceStoreName + "_" + fileName;\r
+                                       MediaFile mediaFile = manager.createMediaFile(mediaFileName, fileTypeName, targetStoreName);\r
+                                       // ez elszallhat, mert nincs itemtype\r
                                        Item item = manager.createItem(GENERIC, title, sourceStoreName, null);\r
-                                       //ez elszallhat, mert nincs itemtype\r
+                                       // ez elszallhat, mert nincs itemtype\r
                                        Media media = manager.createMedia(GENERIC, title, sourceStoreName, null);\r
 \r
-                                       //TODO megoldani  egy tranzakcioban\r
+                                       // TODO megoldani egy tranzakcioban\r
                                        item.add();\r
                                        media.setItemId(item.getId());\r
                                        media.setLength(frames);\r
@@ -65,8 +69,8 @@ public class MetadataPersisterStep extends JobStep {
                                        media.setArchived(Timestamp.from(Instant.now()));\r
                                        media.add();\r
 \r
-                                       //TODO\r
-                                       //mediaFile.setFileSize(fileSize);\r
+                                       // TODO\r
+                                       // mediaFile.setFileSize(fileSize);\r
                                        mediaFile.setMediaId(media.getId());\r
                                        mediaFile.setLastModified(modified);\r
                                        mediaFile.add();\r
@@ -78,8 +82,8 @@ public class MetadataPersisterStep extends JobStep {
                                        media.setArchived(Timestamp.from(Instant.now()));\r
                                        manager.modify(media);\r
 \r
-                                       //TODO\r
-                                       //mediaFile.setFileSize(fileSize);\r
+                                       // TODO\r
+                                       // mediaFile.setFileSize(fileSize);\r
                                        MediaFile mediaFile = manager.getSystemMediaFile(media);\r
                                        if (mediaFile == null) {\r
                                                mediaFile = manager.createMediaFile(fileName, fileTypeName, targetStoreName);\r
@@ -104,13 +108,14 @@ public class MetadataPersisterStep extends JobStep {
 \r
        private long tryGetMediaId(String title, long mediaId) {\r
                Media media = null;\r
-               //duplikatum miatt\r
+               // duplikatum miatt\r
                try {\r
                        media = getManager().getMedia(title);\r
                        if (media != null)\r
                                mediaId = media.getId();\r
                } catch (Exception e) {\r
-                       logger.error(getMarker(), "Media with title {} is not available. System message is: {}", title, e.getMessage());\r
+                       logger.error(getMarker(), "Media with title {} is not available. System message is: {}", title,\r
+                                       e.getMessage());\r
                }\r
                return mediaId;\r
        }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/PRORESTransferFromStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/PRORESTransferFromStep.java
new file mode 100644 (file)
index 0000000..28688e7
--- /dev/null
@@ -0,0 +1,20 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.StoreUri;\r
+\r
+public class PRORESTransferFromStep extends TransferStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @Override\r
+       @StepEntry\r
+       public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri,\r
+                       String targetFileName) throws Exception {\r
+               String proresFileName = "PRORES_" + targetFileName;\r
+               logger.info("Saving {}", proresFileName);\r
+               super.execute(sourceStoreUri, sourceFileName, targetStoreUri, proresFileName);\r
+               return new Object[] { proresFileName };\r
+       }\r
+}\r
index ad0685b70f46247092cd6d6ef73709eb16a48a16..96d13718d5c8dd252ddc2ec0d6bca252a4e2f405 100644 (file)
@@ -3,6 +3,9 @@ package user.jobengine.server.steps;
 \r
 import java.nio.file.Path;\r
 \r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
 import user.commons.StoreUri;\r
@@ -13,6 +16,7 @@ import user.jobengine.server.steps.shared.FileSearchFilterOptions;
 public class ProResArchiveCheckerStep extends PathItemsCollectorStep {\r
        public static final String DOT_CATCHED = ".catched";\r
        public static final String STATUSFOLDER = ".STATUS";\r
+       public static final Logger logger = LogManager.getLogger();\r
 \r
        @Override\r
        protected FileSearchFilterOptions createFileFilter(BasicDBObject filter) {\r
@@ -28,8 +32,11 @@ public class ProResArchiveCheckerStep extends PathItemsCollectorStep {
        @Override\r
        @StepEntry\r
        public Object[] execute(String sourceStoreName, BasicDBObject filter) throws Exception {\r
+\r
                StoreUri sourceStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.LOCAL);\r
-               String sourceStoreFolder = sourceStoreUri.toString(false);\r
+               String sourceStoreFolder = sourceStoreUri.toString(true);\r
+\r
+               logger.info(getMarker(), "Source path is {}", sourceStoreFolder);\r
                return super.execute(sourceStoreFolder, filter);\r
        }\r
 }\r
index 91ca91197970fbe2b7a5d78efb0f77d6685c1fdd..6092a2318095089a7f8219adb7143d1b89ceeb93 100644 (file)
@@ -107,6 +107,11 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
 \r
                String fileName = filePath.getFileName().toString();\r
                String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
+\r
+               String mediaHouseIdUpper = mediaHouseId.toUpperCase();\r
+               if (mediaHouseIdUpper.endsWith("_CLEAN"))\r
+                       mediaHouseId = mediaHouseIdUpper.replace("_CLEAN", "");\r
+\r
                try {\r
                        result = getPlanAirMetadata(mediaHouseId);\r
 \r
@@ -172,14 +177,30 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
                        }\r
                }\r
                if (json != null) {\r
-                       result = new ArchiveItem();\r
-                       result.setItemHouseId(json.getString(ITEM_HOUSEID));\r
-                       result.setItemTitle(json.getString(ITEM_TITLE));\r
-                       result.setMediaHouseId(json.getString(MEDIA_HOUSEID));\r
-                       result.setMediaTitle(json.getString(MEDIA_TITLE));\r
-                       result.setMediaDescription(json.getString(MEDIA_DESCRIPTION));\r
-                       result.setMediaType(json.getString(MEDIA_TYPE));\r
+                       // logger.info(getSessionMarker(), json.toString());\r
+                       result = ArchiveItem.fromJSONObject(json);\r
+               }\r
+\r
+               if (result == null) {\r
+                       logger.info(getSessionMarker(), "Metadata not available for {}", mediaHouseId);\r
+\r
+                       if (mediaHouseId.charAt(mediaHouseId.length() - 2) == '-') {\r
+                               mediaHouseId = mediaHouseId.substring(0, mediaHouseId.length() - 2);\r
+                               logger.info(getSessionMarker(), "Checking metadata for {}", mediaHouseId);\r
+                               ArchiveItem metadata = getPlanAirMetadata(mediaHouseId);\r
+                               if (metadata == null)\r
+                                       logger.info(getSessionMarker(), "Metadata not available for {}", mediaHouseId);\r
+                               else {\r
+                                       if (mediaHouseId.equals(metadata.getForeignMediaId())) {\r
+                                               logger.info(getSessionMarker(), "Metadata is available for {}: {}", mediaHouseId,\r
+                                                               metadata.getMediaTitle());\r
+                                               result = metadata;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
                }\r
+\r
                return result;\r
        }\r
 \r
@@ -323,8 +344,8 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
                                YN(killdateExists), YN(noMDExists), YN(mcArchived), YN(tsmArchived), YN(metadataEquals), YN(sizeEquals),\r
                                YN(includeContains), YN(mediaInfoAvailable));\r
 \r
-               if (canDelete)\r
-                       removeFiles(mediaPath, killDateFiles);\r
+//             if (canDelete)\r
+//                     removeFiles(mediaPath, killDateFiles);\r
 \r
                return true;\r
        }\r
index 6c9346585bcbc62156543d972399565474466c48..15126f05f432d1b1252cf10577281977aae9bc1c 100644 (file)
@@ -1,18 +1,13 @@
 package user.jobengine.server.steps;\r
 \r
-import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
-import user.commons.remotestore.IDirectoryLister;\r
 \r
 public class TSMTransferToStep extends TransferStep {\r
        @Override\r
        @StepEntry\r
-       public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
+       public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri,\r
+                       String targetFileName) throws Exception {\r
                Object[] result = super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
-\r
-               IDirectoryLister lister = targetStoreUri.getLister();\r
-               RemoteFile remoteFile = lister.get(targetFileName);\r
-\r
                return result;\r
        }\r
 }\r
index d515cbeac9fded22dca39a39f35069feb4d17da3..e20505084f5b1b4462d0e3ff68a011ec4640f5f9 100644 (file)
@@ -15,15 +15,26 @@ public class ValidateProResStep extends JobStep {
 \r
        @StepEntry\r
        public Object[] execute(Map<String, MediaArea> inputFiles) {\r
+               int[] progress = new int[] { 0 };\r
+               int[] i = new int[] { 0 };\r
+\r
+               logger.info(getMarker(), "Starting ValidateProResStep");\r
 \r
                Map<String, MediaArea> result = inputFiles.entrySet().stream().filter(fileEntry -> {\r
                        String fileLocation = fileEntry.getKey();\r
                        MediaArea mediaArea = inputFiles.get(fileLocation);\r
                        String videoFormat = mediaArea.getFormat();\r
-                       boolean isProRes = mediaArea.getFrameRate() == FRAMERATE && videoFormat.equals(PRORES);\r
-                       logger.info(getSessionMarker(), "{} is PRORES {}", fileLocation, isProRes);\r
+                       boolean isProRes = mediaArea.getFrameRate() == FRAMERATE && videoFormat != null\r
+                                       && videoFormat.toUpperCase().equals(PRORES);\r
+                       logger.info(getMarker(), "{} is PRORES {}", fileLocation, isProRes);\r
+                       i[0]++;\r
+                       progress[0] = i[0] * 100 / inputFiles.size();\r
+                       int p = progress[0];\r
+                       setProgress(p);\r
                        return isProRes;\r
-               }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));\r
+               }).collect(Collectors.toMap(t -> t.getKey(), t -> t.getValue()));\r
+\r
+               setProgress(100);\r
 \r
                return new Object[] { result };\r
        }\r
index 3068a0303f22f00d0b1bf6fa08741d2f67525e6d..8e8900316b35b749011bc816dedb4663b3fcb710 100644 (file)
@@ -81,7 +81,8 @@ public class EscortFiles {
        }\r
 \r
        public static void createCatchedFile(Path escortFile) throws IOException {\r
-               Path catchedFilePath = Paths.get(escortFile.toString() + DOT_CATCHED);\r
+               String catchedFileName = escortFile.toString() + DOT_CATCHED;\r
+               Path catchedFilePath = Paths.get(catchedFileName);\r
                Files.createFile(catchedFilePath);\r
        }\r
 \r
@@ -102,7 +103,8 @@ public class EscortFiles {
        }\r
 \r
        public static Path createMediaCatchFilePath(Path mediaFile) {\r
-               return Paths.get(mediaFile.getParent().toString(), STATUSFOLDER, mediaFile.getFileName() + DOT_CATCHED);\r
+               String catchFileName = mediaFile.getFileName().toString() + DOT_CATCHED;\r
+               return Paths.get(mediaFile.getParent().toString(), STATUSFOLDER, catchFileName);\r
        }\r
 \r
        public static void createMetadata(String filePath, String fileName, String metadata) throws IOException {\r
@@ -237,7 +239,8 @@ public class EscortFiles {
        }\r
 \r
        public static boolean isCatchedFileExists(Path escortFile) {\r
-               Path catchedFilePath = Paths.get(escortFile.toString() + DOT_CATCHED);\r
+               String catchedFileName = escortFile.toString() + DOT_CATCHED;\r
+               Path catchedFilePath = Paths.get(catchedFileName);\r
                return Files.exists(catchedFilePath);\r
        }\r
 \r
index 9078c1d64127842d02862b5da66bd8d2264e4c18..5056f5844dc331c4eed23e1c834596cd862cf6ad 100644 (file)
@@ -6,12 +6,12 @@ INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
 @\r
 \r
 INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES\r
-((SELECT ID FROM STORE WHERE NAME='PRORES'),'LOCAL',null,'/mediacube/data','N','Y','Y',null,null,null,null)\r
+((SELECT ID FROM STORE WHERE NAME='PRORES'),'LOCAL',null,'s:/','N','Y','Y',null,null,null,null)\r
 @\r
 \r
 -- //@UNDO\r
 -- SQL to undo the change goes here.\r
-DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='AMC_LOCAL')\r
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='PRORES')\r
 @\r
-DELETE FROM STORE WHERE NAME='AMC_LOCAL'\r
+DELETE FROM STORE WHERE NAME='PRORES'\r
 @\r