From 335603f74657fa8a9579b47194a0d0aac5fd39bf Mon Sep 17 00:00:00 2001 From: "vasary.daniel" Date: Thu, 3 Jun 2021 14:59:18 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C32256 --- .../mediacube/executors/tests/SmallTests.java | 5 + .../server/steps/ArchiveSubtitlesStep.java | 114 ++++++++++++------ .../steps/SubtitleFilesCollectorStep.java | 64 +++++++--- 3 files changed, 126 insertions(+), 57 deletions(-) diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java index 1118cd28..da86f88d 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java @@ -1396,4 +1396,9 @@ public class SmallTests { }); } + + @Test + public void test999996() throws Exception { + System.out.println("valami.txt".substring(0, "valami.txt".lastIndexOf("."))); + } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveSubtitlesStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveSubtitlesStep.java index 8da80ed6..4afb09b7 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveSubtitlesStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveSubtitlesStep.java @@ -19,6 +19,82 @@ import org.apache.logging.log4j.Logger; public class ArchiveSubtitlesStep extends JobStep { private static final Logger logger = LogManager.getLogger(); + @StepEntry + public Object[] execute(List files, String syncTarget) { + int current = 0; + for (String file : files) { + Path source = Paths.get(file); + Path archive = archiveSubtitle(source); + + if (archive != null) { + Path sync = Paths.get(syncTarget); + syncSubtitle(archive, sync); + } + + current++; + int progress = current * 100 / files.size(); + setProgress(progress); + } + setProgress(100); + return null; + } + + private Path archiveSubtitle(Path source) { + Path archiveRoot = Paths.get(source.toString().replace("PB_ORIG", "PB_ARCH")).getParent().getParent(); + String lang = source.getParent().getFileName().toString().toUpperCase(); + // logger.info(getMarker(), "Archive root is {}, lang is {}", archiveRoot, + // lang); + + String sourceFileName = source.getFileName().toString(); + Path archive = Paths.get(archiveRoot.toString(), sourceFileName.replace(".stl", "_" + lang + ".stl")); + boolean isOverride = archive.toFile().exists(); + try { + ensureFolder(archiveRoot); + Files.copy(source, archive, StandardCopyOption.REPLACE_EXISTING); + + boolean isContentEquals = Arrays.equals(Files.readAllBytes(source), Files.readAllBytes(archive)); + logger.info(getMarker(), "Contents equals {}", isContentEquals); + if (isContentEquals) { + if (isOverride) + logger.info(getMarker(), "Successfully replaced {}", archive); + else + logger.info(getMarker(), "Successfully archived {}", archive); + + String doneFileName = sourceFileName.substring(0, sourceFileName.lastIndexOf(".")); + Path done = Paths.get(source.getParent().toString(), doneFileName + "_DONE.stl"); + Files.move(source, done, StandardCopyOption.REPLACE_EXISTING); + return archive; + } else + throw new Exception("Source and target content not equals"); + } catch (Exception e) { + logger.error(getMarker(), "Error copy {} to {}. System message: {}", source, archive, e.getMessage()); + } + return null; + } + + private void syncSubtitle(Path archive, Path syncTarget) { + Path sync = Paths.get(syncTarget.toString(), archive.getFileName().toString()); + logger.info(getMarker(), "Sync root {} exists {}", syncTarget, syncTarget.toFile().exists()); + + if (!sync.toFile().exists()) { + logger.info(getMarker(), "Skipping {} synchronization, target not exists", sync); + return; + } + + logger.info(getMarker(), "Target {} synchronization required", sync); + + try { + Files.copy(archive, sync, StandardCopyOption.REPLACE_EXISTING); + boolean isContentEquals = Arrays.equals(Files.readAllBytes(archive), Files.readAllBytes(sync)); + if (isContentEquals) + logger.info(getMarker(), "Successfully synchronized {}", archive); + else + throw new Exception("Synchronization source and target content not equals"); + } catch (Exception e) { + logger.error(getMarker(), "Error synchronize {} to {}. System message: {}", archive, sync, e.getMessage()); + } + } + public void ensureFolder(Path filePath) throws IOException { File folder = filePath.toFile(); if (!folder.exists() || !folder.isDirectory()) { @@ -37,42 +113,4 @@ public class ArchiveSubtitlesStep extends JobStep { } } - //"x:\PB_ORIG\AMC_BLK\BUL\CCEM018865-01_DONE.stl" - //"x:\PB_ARCH\AMC_BLK\CCEM018865-01_BUL.stl" - - @StepEntry - public Object[] execute(List files) { - int current = 0; - for (String file : files) { - Path source = Paths.get(file); - String lang = source.getParent().getFileName().toString().toUpperCase(); - Path archiveRoot = Paths.get(file.replace("PB_ORIG", "PB_ARCH/TEST")); - archiveRoot = archiveRoot.getParent().getParent(); - //logger.info(getMarker(), "Archive root is {}, lang is {}", archiveRoot, lang); - Path archive = Paths.get(archiveRoot.toString(), source.getFileName().toString().replace(".stl", "_" + lang + ".stl")); - boolean isOverride = archive.toFile().exists(); - try { - ensureFolder(archiveRoot); - Files.copy(source, archive, StandardCopyOption.REPLACE_EXISTING); - if (archive.toFile().exists()) { - boolean isContentEquals = Arrays.equals(Files.readAllBytes(source), Files.readAllBytes(archive)); - logger.info(getMarker(), "Contents equals {}", isContentEquals); - if (isContentEquals) { - if (isOverride) - logger.info(getMarker(), "Successfully replaced {}", archive); - else - logger.info(getMarker(), "Successfully archived {}", archive); - } - } - - } catch (Exception e) { - logger.error(getMarker(), "Error copy {} to {}. System message: {}", source, archive, e.getMessage()); - } - current++; - int progress = current * 100 / files.size(); - setProgress(progress); - } - setProgress(100); - return null; - } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/SubtitleFilesCollectorStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/SubtitleFilesCollectorStep.java index 0ba134a6..f27a5a64 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/SubtitleFilesCollectorStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/SubtitleFilesCollectorStep.java @@ -1,34 +1,60 @@ package user.jobengine.server.steps; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; import java.nio.file.Path; -import java.text.SimpleDateFormat; -import java.util.Calendar; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.ibm.nosql.json.api.BasicDBObject; - -/* DO NOT REMOVE! -import user.jobengine.server.steps.FileSearchFilterOptions; -*/ -public class SubtitleFilesCollectorStep extends PathItemsCollectorStep { +public class SubtitleFilesCollectorStep extends JobStep { private static final Logger logger = LogManager.getLogger(); - @Override - protected FileSearchFilterOptions createFileFilter(BasicDBObject filter) { - FileSearchFilterOptions result = new FileSearchFilterOptions(filter) { + @StepEntry + public Object[] execute(String sourceFolder, String fileNamePattern) throws Exception { + Path sourcePath = Paths.get(sourceFolder); + List files = new ArrayList<>(); + + Pattern pattern = Pattern.compile(fileNamePattern, Pattern.CASE_INSENSITIVE); + + FileVisitor visitor = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (!file.getFileName().toString().contains("_DONE")) { + Matcher matcher = pattern.matcher(file.getFileName().toString()); + if (matcher.find()) + files.add(file.toString()); + } + return FileVisitResult.CONTINUE; + } + @Override - public boolean acceptFile(Path file) { - return super.acceptFile(file) && !file.getFileName().toString().contains("_DONE"); + public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { + return FileVisitResult.CONTINUE; } + }; - return result; - } - @Override - @StepEntry - public Object[] execute(String sourceFolder, BasicDBObject filter) throws Exception { - return super.execute(sourceFolder, filter); + try { + Files.walkFileTree(sourcePath, visitor); + } catch (Exception e) { + logger.error(getMarker(), "Error processing '{}'. System message: {}", sourcePath, e.getMessage()); + logger.catching(e); + throw e; + } finally { + } + + logger.info(getMarker(), "Found {} files", files.size()); + return new Object[] { files }; } + } -- 2.54.0