Rekurziv archivalas segedfolyamatok
authorelgekko <vasary@elgekko.net>
Thu, 2 Jun 2022 08:22:13 +0000 (10:22 +0200)
committerelgekko <vasary@elgekko.net>
Thu, 2 Jun 2022 08:22:13 +0000 (10:22 +0200)
server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveRecursive.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CheckArchiveRecursiveStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/SafeDeleteRecursiveStep.java

index 2c90137ab458b81d86df134c2ec50f91746ecdb5..cee331ea7dff1b5c9fb9fef2beefb008a9668725 100644 (file)
@@ -169,7 +169,7 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                        }\r
                }\r
                if (json != null) {\r
-                       logger.info(getSessionMarker(), json.toString());\r
+                       // logger.info(getSessionMarker(), json.toString());\r
                        result = ArchiveItem.fromJSONObject(json);\r
                }\r
 \r
@@ -238,25 +238,34 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        }\r
 \r
        private boolean processPathItem(Path mediaPath) throws Exception {\r
-\r
-               boolean includeContains = includeList.contains(mediaPath.toString());\r
-               if (!includeContains) {\r
-                       logger.info(getSessionMarker(), "Not on whitelist {}, skipping", mediaPath);\r
+               if (limit != 0 && submitted == limit) {\r
+                       logger.info(getSessionMarker(), "Limit reached {}, canceling", limit);\r
                        return false;\r
                }\r
 \r
                String fileName = mediaPath.getFileName().toString();\r
                if (fileName.startsWith(".") || fileName.endsWith(".nomd"))\r
-                       return false;\r
-\r
-               if (limit != 0 && submitted == limit) {\r
-                       logger.info(getSessionMarker(), "Limit reached {}, canceling", limit);\r
-                       return false;\r
-               }\r
+                       return true;\r
 \r
                File mediaFile = mediaPath.toFile();\r
                if (mediaFile.isDirectory()) {\r
-                       return false;\r
+                       return true;\r
+               }\r
+\r
+               if (EscortFiles.isMediaCatched(mediaPath)) {\r
+                       // logger.info(getSessionMarker(), "Skipping already catched {}", mediaPath);\r
+                       return true;\r
+               }\r
+\r
+               if (handleArchiveConflict(mediaPath)) {\r
+                       logger.info(getSessionMarker(), "Skipping archive db already contains {}", mediaPath);\r
+                       return true;\r
+               }\r
+\r
+               boolean includeContains = includeList.contains(mediaPath.toString());\r
+               if (!includeContains) {\r
+                       logger.info(getSessionMarker(), "Not on whitelist {}, skipping", mediaPath);\r
+                       return true;\r
                }\r
 \r
 //\r
@@ -275,30 +284,22 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
 //                     }\r
 //             }\r
 \r
-               if (EscortFiles.isMediaCatched(mediaPath)) {\r
-                       // logger.info(getSessionMarker(), "Skipping already catched {}", mediaPath);\r
-                       return false;\r
-               }\r
-\r
-               if (handleArchiveConflict(mediaPath)) {\r
-                       logger.info(getSessionMarker(), "Skipping archive db already contains {}", mediaPath);\r
-                       return false;\r
-               }\r
-\r
                if (!canReadMediaInfo(mediaPath)) {\r
                        logger.info(getSessionMarker(), "Skipping cant read mediainfo {}", mediaPath);\r
-                       return false;\r
+                       return true;\r
                }\r
 \r
                ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
 \r
-               Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
-               if (archiveItem == null && !Files.exists(nomdFile)) {\r
+               if (archiveItem == null) {\r
 //                     Message msg = new ParameterizedMessage("Nincs metaadat!");\r
 //                     logger.info(new MediaCubeMarker("vasary@elgekko.net,muszak@mediavivantis.hu",\r
 //                                     "Értesítés problémás " + mediaPath.getFileName().toString() + " archiválásról"), msg);\r
-                       Files.createFile(nomdFile);\r
-                       return false;\r
+\r
+                       Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
+                       if (!Files.exists(nomdFile))\r
+                               Files.createFile(nomdFile);\r
+                       return true;\r
                }\r
 \r
                logger.info(getSessionMarker(), "Archiving {}", mediaPath);\r
@@ -333,8 +334,10 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
                // logger.info(getSessionMarker(), "Will checked {}", filePath);\r
                try {\r
-                       if (!processPathItem(filePath))\r
+                       if (!processPathItem(filePath)) {\r
+                               logger.info(getSessionMarker(), "processPathItem returned false, terminating");\r
                                return FileVisitResult.TERMINATE;\r
+                       }\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
                }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CheckArchiveRecursiveStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CheckArchiveRecursiveStep.java
new file mode 100644 (file)
index 0000000..5e1328a
--- /dev/null
@@ -0,0 +1,267 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\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.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+import org.apache.logging.log4j.MarkerManager;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.MediaFileDAO;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataListOptions;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+\r
+public class CheckArchiveRecursiveStep extends JobStep implements FileVisitor<Path> {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private Marker csvMarker = MarkerManager.getMarker("CHECK-ARCHIVE-RECURSIVE-CSV");\r
+\r
+       private static final String KILLDATEEXT = ".killdate";\r
+       private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
+\r
+       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
+       private Set<String> includeList;\r
+\r
+       @StepEntry\r
+       public Object[] execute(String sourcePath) throws Exception {\r
+               logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
+               logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", "Napló időbélyeg", "Neve", "Elérése", "Mérete", "Létrehozva", "Módosítva",\r
+                               "Archiválva (MC)", "Archiválva (TSM)", "Méret (TSM)", ".catched", ".killdate", ".nomd", "Archivált (MC)", "Archivált (TSM)", "Méret egyezés");\r
+\r
+               try {\r
+\r
+                       String location = "/opt/test-mediacube/archive-recursive-files.txt";\r
+                       includeList = loadWhiteList(location);\r
+\r
+                       Files.walkFileTree(Paths.get(sourcePath), this);\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult postVisitDirectory(Path paramT, IOException paramIOException) throws IOException {\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+               Path dirName = dir.getFileName();\r
+\r
+               if (skipPathNames.contains(dirName.toString())) {\r
+                       // logger.info(getSessionMarker(), "PreVisit skip {}", dir);\r
+                       return FileVisitResult.SKIP_SUBTREE;\r
+               } // else\r
+                       // logger.info(getSessionMarker(), "PreVisit {}", dir);\r
+\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       private boolean processPathItem(Path mediaPath) throws Exception {\r
+               if (getJobRuntime().isWaitingCancel()) {\r
+                       cancel();\r
+                       return false;\r
+               }\r
+\r
+               BasicFileAttributes attr = Files.readAttributes(mediaPath, BasicFileAttributes.class);\r
+               File mediaFSFile = mediaPath.toFile();\r
+               String fileName = mediaPath.getFileName().toString();\r
+\r
+               if (mediaFSFile.isDirectory())\r
+                       return true;\r
+\r
+               if (fileName.startsWith(".") || fileName.endsWith(".nomd"))\r
+                       return true;\r
+\r
+               boolean includeContains = includeList.contains(mediaPath.toString());\r
+               if (!includeContains)\r
+                       return true;\r
+\r
+               Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
+               List<Path> killDateFiles = getKillDateFiles(mediaPath);\r
+               MediaFile mediaFile = getMediaFile(fileName);\r
+\r
+               long size = mediaFSFile.length();\r
+               Date lastModifiedDate = new Date(attr.lastModifiedTime().toMillis());\r
+               // Date lastAccesDate = new Date(attr.lastAccessTime().toMillis());\r
+               Date createDate = new Date(attr.creationTime().toMillis());\r
+               boolean catchedExists = EscortFiles.isMediaCatched(mediaPath);\r
+               boolean noMDExists = nomdFile.toFile().exists();\r
+               boolean killdateExists = killDateFiles.size() > 0;\r
+               boolean mcArchived = mediaFile != null;\r
+               boolean tsmArchived = false;\r
+               boolean sizeEquals = false;\r
+               Date mcArchivedDate = null;\r
+               long tsmSize = 0;\r
+               Date tsmBackupDate = null;\r
+\r
+               if (mcArchived) {\r
+                       // metadata\r
+                       Media media = getManager().getMedia(mediaFile.getMediaId());\r
+                       mcArchivedDate = media.getCreated();\r
+\r
+                       // tsm\r
+                       String tsmFileName = mediaFile.getRelativePath();\r
+                       RemoteFile tsmFile = getTSMFile(tsmFileName);\r
+                       tsmArchived = tsmFile != null;\r
+                       if (tsmArchived) {\r
+                               tsmSize = tsmFile.getSize();\r
+                               tsmBackupDate = getTSMBackupDate(tsmFileName);\r
+                               sizeEquals = tsmSize == size;\r
+                       }\r
+               }\r
+\r
+               Date now = new Date(System.currentTimeMillis());\r
+               logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), fileName, mediaPath.getParent(), size, D(createDate),\r
+                               D(lastModifiedDate), D(mcArchivedDate), D(tsmBackupDate), tsmSize, YN(catchedExists), YN(killdateExists), YN(noMDExists), YN(mcArchived),\r
+                               YN(tsmArchived), YN(sizeEquals));\r
+\r
+               logger.info(getSessionMarker(), "{} {}{}{}{}{}{}", mediaPath, YN(catchedExists), YN(killdateExists), YN(noMDExists), YN(mcArchived), YN(tsmArchived),\r
+                               YN(sizeEquals));\r
+\r
+               return true;\r
+       }\r
+\r
+       private Date getTSMBackupDate(String tsmFileName) throws Exception {\r
+               Date result = null;\r
+               IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       return null;\r
+               IMetadataProvider provider = factory.getProvider(MetadataProviderType.TSM);\r
+               if (provider == null)\r
+                       return null;\r
+\r
+               IMetadataListOptions opt = provider.createOptions(new BasicDBObject("fileName", tsmFileName));\r
+\r
+               List<IMetadata> tsmContents = provider.list(opt);\r
+               if (tsmContents != null && tsmContents.size() > 0) {\r
+\r
+                       for (IMetadata md : tsmContents) {\r
+                               Date backupDate = md.asJSON().getDate("backupDate");\r
+                               if (result == null)\r
+                                       result = backupDate;\r
+                               else {\r
+                                       if (backupDate.after(result))\r
+                                               result = backupDate;\r
+                               }\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private char YN(boolean value) {\r
+               return value ? 'Y' : 'N';\r
+       }\r
+\r
+       private String D(Date value) {\r
+               return value == null ? "" : df.format(value);\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+               // logger.info(getSessionMarker(), "Will checked {}", filePath);\r
+               try {\r
+                       if (!processPathItem(filePath))\r
+                               return FileVisitResult.TERMINATE;\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+               }\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult visitFileFailed(Path filePath, IOException paramIOException) throws IOException {\r
+               logger.info("Error archive {}", filePath);\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       private List<Path> getKillDateFiles(Path filePath) {\r
+               String killDateFilePattern = String.format("%s.*%s", filePath.getFileName().toString(), KILLDATEEXT);\r
+               List<Path> result = new ArrayList<>();\r
+               Path statusPath = null;\r
+               try {\r
+                       statusPath = Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER);\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       return null;\r
+               }\r
+               File statusPathFile = statusPath.toFile();\r
+               if (statusPathFile.exists() && statusPathFile.isDirectory()) {\r
+                       try (DirectoryStream<Path> stream = Files.newDirectoryStream(statusPath, killDateFilePattern)) {\r
+                               stream.forEach(p -> result.add(p));\r
+                       } catch (Exception e) {\r
+                               logger.catching(e);\r
+                       }\r
+               }\r
+               Collections.sort(result);\r
+               return result;\r
+       }\r
+\r
+       MediaFile getMediaFile(String fileName) {\r
+               MediaFile result = null;\r
+               MediaFileDAO mfDAO = (MediaFileDAO) getManager().getBaseDAO(MediaFile.class);\r
+               List<IEntityBase> mfList = mfDAO.getByHouseId(fileName);\r
+               if (mfList != null && mfList.size() == 1)\r
+                       result = (MediaFile) mfList.get(0);\r
+               return result;\r
+       }\r
+\r
+       RemoteFile getTSMFile(String mcFileName) {\r
+               RemoteFile result = null;\r
+               Store tsmStore = getManager().getSystemStore(false);\r
+               StoreUri tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+               try {\r
+                       result = tsmStoreUri.getRemoteFile(mcFileName);\r
+               } catch (Exception e) {\r
+                       logger.error(e);\r
+               } finally {\r
+                       tsmStoreUri.cleanUp();\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private Set<String> loadWhiteList(String location) throws IOException {\r
+               Set<String> result = new LinkedHashSet<>();\r
+               Path path = Paths.get(location);\r
+               List<String> lines = FileUtils.readLines(path.toFile());\r
+\r
+               for (String line : lines) {\r
+                       String[] tokens = line.trim().split("\t");\r
+                       if (tokens.length == 0)\r
+                               continue;\r
+                       result.add(tokens[0]);\r
+               }\r
+               return result;\r
+       }\r
+\r
+}\r
index 8c094d809a06ae844a26c7d4487056884f26e09e..f1209d9de2351c448b5ddbe20e074bf6b1bbe216 100644 (file)
@@ -5,11 +5,8 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 \r
-import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
 import user.commons.configuration.SystemConfiguration;\r
-import user.commons.remotestore.IProgressEventListener;\r
-import user.commons.remotestore.ProgressEvent;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
 //import user.jobengine.db.Media;\r
 import user.jobengine.db.ArchivedMedia;\r
@@ -17,7 +14,6 @@ import user.jobengine.db.IItemManager;
 import user.jobengine.db.Store;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.steps.shared.EscortFiles;\r
 \r
 public class MXFCutterStep extends JobStep {\r
        private static final String TARGETNAMEPATTERN = "-ARCH-%s";\r
@@ -56,24 +52,35 @@ public class MXFCutterStep extends JobStep {
                this.nexioPassword = nexioPassword;\r
                marker = jobRuntime.getSessionMarker();\r
 \r
-               if (useNexioTarget && archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) {\r
-                       setAndCheck(archivedMedia, houseId, targetPath, useNexioTarget, jobEngine);\r
-\r
-                       final IJobRuntime runtime = jobRuntime;\r
-                       sourceFileName = houseId + TARGETNAMEPATTERN;\r
-                       tempSourceUri.addProgressListener(new IProgressEventListener() {\r
-                               @Override\r
-                               public void progressChanged(ProgressEvent evt) {\r
-                                       runtime.incrementProgress(evt.getProgress());\r
-                               }\r
-                       });\r
-\r
-                       RemoteFile result = tempSourceUri.transferFrom(tempTargetUri, sourceFileName, sourceFileName);\r
-\r
-                       EscortFiles.setNEXIOKillDate(killDateDays, houseId, nexioAgency, tempTargetUri);\r
-\r
-                       logger.info("A {} videó kivágva {}s - {}s", sourceFileName, archivedMedia.getTcIn(), archivedMedia.getTcOut());\r
-               }\r
+//             if (!useNexioTarget) {\r
+//                     String targetFileName = String.format(targetNamePattern, sourceFileName);\r
+//                     MediaArea mediaArea = new MediaArea(Paths.get(targetPath));\r
+//                     try {\r
+//                             mediaArea.process();\r
+//                             logger.info(getSessionMarker(), mediaArea.getInform().toPrettyString(""));\r
+//                     } catch (Exception e) {\r
+//                             logger.error(getSessionMarker(), "Can't analyze input {}, skipping. System message is: {}", e.getMessage());\r
+//                     }\r
+//             }\r
+\r
+//             if (useNexioTarget && archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) {\r
+//                     setAndCheck(archivedMedia, houseId, targetPath, useNexioTarget, jobEngine);\r
+//\r
+//                     final IJobRuntime runtime = jobRuntime;\r
+//                     sourceFileName = houseId + TARGETNAMEPATTERN;\r
+//                     tempSourceUri.addProgressListener(new IProgressEventListener() {\r
+//                             @Override\r
+//                             public void progressChanged(ProgressEvent evt) {\r
+//                                     runtime.incrementProgress(evt.getProgress());\r
+//                             }\r
+//                     });\r
+//\r
+//                     RemoteFile result = tempSourceUri.transferFrom(tempTargetUri, sourceFileName, sourceFileName);\r
+//\r
+//                     EscortFiles.setNEXIOKillDate(killDateDays, houseId, nexioAgency, tempTargetUri);\r
+//\r
+//                     logger.info("A {} videó kivágva {}s - {}s", sourceFileName, archivedMedia.getTcIn(), archivedMedia.getTcOut());\r
+//             }\r
 \r
                return null;\r
        }\r
index 6092a2318095089a7f8219adb7143d1b89ceeb93..596a05a6fe6a7e63f5f5ed946e4f4dfc249bf39f 100644 (file)
@@ -62,8 +62,7 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
 \r
        private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
 \r
-       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER,\r
-                       EscortFiles.CONFLICTFOLDER);\r
+       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
        private Set<String> includeList;\r
 \r
        private boolean checkArchiveItem(Path mediaPath, ArchiveItem archiveItem, Item item, Media media) {\r
@@ -128,18 +127,20 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
        @StepEntry\r
        public Object[] execute(String sourcePath) throws Exception {\r
                logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
-               logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", "Napló időbélyeg", "Neve",\r
-                               "Elérése", "Mérete", "Létrehozva", "Módosítva", "Archiválva (MC)", "Archiválva (TSM)", "Méret (TSM)",\r
-                               ".catched", ".killdate", ".nomd", "Archivált (MC)", "Archivált (TSM)", "Metaadat egyezés",\r
-                               "Méret egyezés", "Törölhető", "Kezelendő", "Lejátszható");\r
+               logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", "Napló időbélyeg", "Neve", "Elérése", "Mérete", "Létrehozva",\r
+                               "Módosítva", "Archiválva (MC)", "Archiválva (TSM)", "Méret (TSM)", ".catched", ".killdate", ".nomd", "Archivált (MC)", "Archivált (TSM)",\r
+                               "Metaadat egyezés", "Méret egyezés", "Törölhető", "Kezelendő", "Lejátszható");\r
 \r
                try {\r
-                       String location = "/opt/test-mediacube/file_list_original.txt";\r
-                       includeList = loadIncludeList(location);\r
+//                     String location = "/opt/test-mediacube/file_list_original.txt";\r
+//                     includeList = loadIncludeList(location);\r
+\r
+                       String location = "/opt/test-mediacube/archive-recursive-files.txt";\r
+                       includeList = loadWhiteList(location);\r
+\r
                        Files.walkFileTree(Paths.get(sourcePath), this);\r
                } catch (Exception e) {\r
-                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath,\r
-                                       e.getMessage());\r
+                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
                }\r
                return null;\r
        }\r
@@ -192,8 +193,7 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
                                        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
+                                               logger.info(getSessionMarker(), "Metadata is available for {}: {}", mediaHouseId, metadata.getMediaTitle());\r
                                                result = metadata;\r
                                        }\r
                                }\r
@@ -210,8 +210,7 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
        }\r
 \r
        @Override\r
-       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes)\r
-                       throws IOException {\r
+       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
                Path dirName = dir.getFileName();\r
 \r
                if (skipPathNames.contains(dirName.toString())) {\r
@@ -232,8 +231,7 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
                                result = file.delete();\r
                        }\r
                } catch (Exception e) {\r
-                       logger.error(getSessionMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath,\r
-                                       e.getMessage());\r
+                       logger.error(getSessionMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath, e.getMessage());\r
                }\r
                return result;\r
        }\r
@@ -244,10 +242,8 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
 \r
                removeFile(Paths.get(filePath.toString() + EWC2EXT));\r
                removeFile(Paths.get(filePath.toString() + XMPEXT));\r
-               removeFile(Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER,\r
-                               filePath.getFileName().toString() + EscortFiles.DOT_CATCHED));\r
-               removeFile(Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER,\r
-                               filePath.getFileName().toString() + EscortFiles.DOT_JSON));\r
+               removeFile(Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER, filePath.getFileName().toString() + EscortFiles.DOT_CATCHED));\r
+               removeFile(Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER, filePath.getFileName().toString() + EscortFiles.DOT_JSON));\r
 \r
                boolean result = true;\r
                for (Path killDateFile : killDateFiles) {\r
@@ -332,21 +328,19 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
 //                             && metadataEquals;\r
 \r
                boolean canDelete = mcArchived && tsmArchived && metadataEquals && sizeEquals && mediaInfoAvailable;\r
-               logger.info(getSessionMarker(), canDelete);\r
+               // logger.info(getSessionMarker(), canDelete);\r
 \r
                Date now = new Date(System.currentTimeMillis());\r
-               logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), fileName,\r
-                               mediaPath.getParent(), size, D(createDate), D(lastModifiedDate), D(mcArchivedDate), D(tsmBackupDate),\r
-                               tsmSize, YN(catchedExists), YN(killdateExists), YN(noMDExists), YN(mcArchived), YN(tsmArchived),\r
-                               YN(metadataEquals), YN(sizeEquals), YN(canDelete), YN(includeContains), YN(mediaInfoAvailable));\r
+               logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), fileName, mediaPath.getParent(), size, D(createDate),\r
+                               D(lastModifiedDate), D(mcArchivedDate), D(tsmBackupDate), tsmSize, YN(catchedExists), YN(killdateExists), YN(noMDExists), YN(mcArchived),\r
+                               YN(tsmArchived), YN(metadataEquals), YN(sizeEquals), YN(canDelete), YN(includeContains), YN(mediaInfoAvailable));\r
 \r
-               logger.info(getSessionMarker(), "{} {}{}{}{}{}{}{}{}{}{}", mediaPath, YN(canDelete), YN(catchedExists),\r
-                               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
+               logger.info(getSessionMarker(), "{} {}{}{}{}{}{}{}{}{}{}", mediaPath, YN(canDelete), YN(catchedExists), YN(killdateExists), YN(noMDExists),\r
+                               YN(mcArchived), YN(tsmArchived), YN(metadataEquals), YN(sizeEquals), YN(includeContains), YN(mediaInfoAvailable));\r
 \r
+               /*\r
+                * if (canDelete) removeFiles(mediaPath, killDateFiles);\r
+                */\r
                return true;\r
        }\r
 \r
@@ -490,4 +484,18 @@ public class SafeDeleteRecursiveStep extends JobStep implements FileVisitor<Path
                return result;\r
        }\r
 \r
+       private Set<String> loadWhiteList(String location) throws IOException {\r
+               Set<String> result = new LinkedHashSet<>();\r
+               Path path = Paths.get(location);\r
+               List<String> lines = FileUtils.readLines(path.toFile());\r
+\r
+               for (String line : lines) {\r
+                       String[] tokens = line.trim().split("\t");\r
+                       if (tokens.length == 0)\r
+                               continue;\r
+                       result.add(tokens[0]);\r
+               }\r
+               return result;\r
+       }\r
+\r
 }\r