From: vasary.daniel Date: Wed, 9 Dec 2020 10:04:49 +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=77dfbc90cda358b6f654410b22ada19abc16cf3d;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C32100 --- diff --git a/server/-configuration/test-debug-mediacube-mv-9999.launch b/server/-configuration/test-debug-mediacube-mv-9999.launch new file mode 100644 index 00000000..d46d2160 --- /dev/null +++ b/server/-configuration/test-debug-mediacube-mv-9999.launch @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/GGGClassLoader.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/GGGClassLoader.java new file mode 100644 index 00000000..1c9109fd --- /dev/null +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/GGGClassLoader.java @@ -0,0 +1,7 @@ +package hu.user.mediacube.executors.tests; + +import groovy.lang.GroovyClassLoader; + +public class GGGClassLoader extends GroovyClassLoader { + +} 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 6fb7c300..fe9a0a14 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 @@ -1,8 +1,12 @@ package hu.user.mediacube.executors.tests; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; @@ -66,6 +70,28 @@ public class SmallTests { return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; } + Class parseClassHierarchy(GroovyClassLoader cl, String root, String className) throws IOException { + System.out.println("Loading " + className); + Path path = Paths.get(root, className + ".java"); + Class result = null; + if (!path.toFile().exists()) + return result; + List lines = Files.readAllLines(path); + + for (String line : lines) { + if (line.contains("extends")) { + String[] tokens = line.split("extends"); + String parent = tokens[tokens.length - 1]; + parent = parent.replace("{", "").trim(); + + parseClassHierarchy(cl, root, parent); + break; + } + } + result = cl.parseClass(path.toFile()); + return result; + } + @Test public void test0() throws Exception { File f = new File("/opt/test.txt"); @@ -934,27 +960,51 @@ public class SmallTests { public void test9995() throws Exception { String className = "TestStep1"; String root = "/opt/steps"; + try (GroovyClassLoader cl = new GroovyClassLoader(this.getClass().getClassLoader())) { - List lines = Files.readAllLines(Paths.get(root, className + ".java")); - String packageName = null; - for (String line : lines) { - String trimedLine = line.trim(); - if (trimedLine.startsWith("package")) { - packageName = trimedLine.replace("package", "").replace(";", "."); - } - if (packageName != null && trimedLine.startsWith("import") && trimedLine.contains(packageName)) { - System.out.println(trimedLine); - } - } + Class myClass = parseClassHierarchy(cl, root, className); + System.out.println(myClass.getCanonicalName()); + Method method = myClass.getMethod("execute"); + method.invoke(myClass.newInstance()); + } catch (Exception e) { + throw e; + } - // Class myClass = cl.parseClass(Paths.get("/opt/steps/TestStep1.java").toFile()); - // System.out.println(myClass.getCanonicalName()); - // Method method = myClass.getMethod("execute"); - // method.invoke(myClass.newInstance()); + } + + @Test + public void test9996() throws Exception { + String className = "TestStep1"; + String root = "/opt/steps"; + + try (GroovyClassLoader cl = new GroovyClassLoader(this.getClass().getClassLoader())) { + Path path = Paths.get(root, className + ".java"); + cl.addURL(path.toUri().toURL()); + Class myClass = cl.loadClass("user.jobengine.server.steps.TestStep1", true, true); + System.out.println(myClass.getCanonicalName()); + Method method = myClass.getMethod("execute"); + method.invoke(myClass.newInstance()); } catch (Exception e) { throw e; } } + + @Test + public void test9997() throws Exception { + Path sut = Paths.get("/opt/test.mxf"); + Path catched = Paths.get("/opt/.STATUS/test.mxf.catched"); + assertFalse(catched.toFile().exists()); + assertFalse(EscortFiles.isMediaCatched(sut)); + + EscortFiles.createMediaCatch(sut); + + assertTrue(catched.toFile().exists()); + assertTrue(EscortFiles.isMediaCatched(sut)); + + EscortFiles.removeMediaCatch(sut); + assertFalse(catched.toFile().exists()); + assertFalse(EscortFiles.isMediaCatched(sut)); + } } diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java index b15d1ef0..e26ca596 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java @@ -16,8 +16,8 @@ import user.jobengine.db.IStatementDecorator; import user.jobengine.db.Item; import user.jobengine.db.ItemManager; import user.jobengine.db.Media; +import user.jobengine.server.steps.MetadataType; import user.jobengine.server.steps.MetadataTypeDetector; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; import user.jobengine.server.steps.PlanAirExtensions; public class SupportCheckItem { diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCleanMissingTSM.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCleanMissingTSM.java index 93d70516..e9153071 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCleanMissingTSM.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCleanMissingTSM.java @@ -22,8 +22,8 @@ import user.jobengine.db.Item; import user.jobengine.db.ItemManager; import user.jobengine.db.MediaFile; import user.jobengine.db.Store; +import user.jobengine.server.steps.MetadataType; import user.jobengine.server.steps.MetadataTypeDetector; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; import user.jobengine.server.steps.PlanAirExtensions; public class SupportCleanMissingTSM { diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/PASAPOOLTransferToStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/PASAPOOLTransferToStep.java index f404fcf1..db31f924 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/PASAPOOLTransferToStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/PASAPOOLTransferToStep.java @@ -104,22 +104,22 @@ public class PASAPOOLTransferToStep extends TransferStep { mi.process(); if (isHD(mi)) { - logger.info(marker, "%s is HD", sourceFileName); + logger.info(marker, "{} is HD", sourceFileName); return; } if (isSD_HIGH_16_9(mi)) { - logger.info(marker, "%s is SD_HIGH_16_9", sourceFileName); + logger.info(marker, "{} is SD_HIGH_16_9", sourceFileName); return; } if (isSD_HIGH_4_3(mi)) { - logger.info(marker, "%s is SD_HIGH_4_3", sourceFileName); + logger.info(marker, "{} is SD_HIGH_4_3", sourceFileName); return; } if (isSD_MAIN_422(mi)) { - logger.info(marker, "%s is SD_MAIN_422", sourceFileName); + logger.info(marker, "{} is SD_MAIN_422", sourceFileName); return; } } catch (Exception e) { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/SyncSubtitlesStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/SyncSubtitlesStep.java similarity index 100% rename from server/user.jobengine.executors/src/user/jobengine/server/steps/SyncSubtitlesStep.java rename to server/user.jobengine.executors/amc/user/jobengine/server/steps/SyncSubtitlesStep.java diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml b/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml index d2fe5e93..0898657b 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml +++ b/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml @@ -22,7 +22,7 @@ - + @@ -30,12 +30,9 @@ - - - - - + + @@ -43,7 +40,10 @@ + + + - + \ No newline at end of file diff --git a/server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/ArchiveRecursive.java b/server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/ArchiveRecursive.java index 2763174f..7e507404 100644 --- a/server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/ArchiveRecursive.java +++ b/server/user.jobengine.executors/mediavivantis/user/jobengine/server/steps/ArchiveRecursive.java @@ -2,7 +2,8 @@ package user.jobengine.server.steps; import java.io.File; import java.io.IOException; -import java.nio.file.DirectoryStream; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -11,8 +12,10 @@ import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.io.FilenameUtils; @@ -22,7 +25,10 @@ import org.apache.logging.log4j.Logger; import com.ibm.nosql.json.api.BasicDBObject; +import user.commons.JobStatus; import user.commons.ListUtils; +import user.commons.mediatool.MediaInfo; +import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; import user.mediacube.metadata.interfaces.IMetadata; import user.mediacube.metadata.interfaces.IMetadataProvider; @@ -31,7 +37,7 @@ import user.mediacube.metadata.interfaces.MetadataProviderType; import user.mediacube.metadata.interfaces.MetadataType; import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; -public class ArchiveRecursive extends JobStep { +public class ArchiveRecursive extends JobStep implements FileVisitor { private static final Logger logger = LogManager.getLogger(); private static final String JOBTEMPLATE = "archive-material.xml"; private static final String ITEM_TITLE = "itemTitle"; @@ -45,6 +51,41 @@ public class ArchiveRecursive extends JobStep { private static final String KILL_DATE_DAYS = "killDateDays"; private static final String CONFLICT = ".CONFLICT"; private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd"); + private String sourcePath; + + private List skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "Transfered", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER); + private int limit; + private int submitted; + private int killDateDays; + + private boolean canReadMediaInfo(Path mediaFilePath) { + boolean result = false; + try { + MediaInfo mi = new MediaInfo(mediaFilePath); + mi.process(); + result = true; + } catch (Exception e) { + logger.warn(getSessionMarker(), e.getMessage()); + } + return result; + } + + private void checkArchiveItem(ArchiveItem archiveItem, Path mediaPath) throws Exception { + if (archiveItem == null) + throw new Exception(mediaPath + " has no metadata specified."); + + if (StringUtils.isBlank(archiveItem.getItemHouseId())) + throw new Exception(mediaPath + " has no Item HouseID specified in metadata."); + + if (StringUtils.isBlank(archiveItem.getItemTitle())) + throw new Exception(mediaPath + " has no Item Title specified in metadata."); + + if (StringUtils.isBlank(archiveItem.getMediaHouseId())) + throw new Exception(mediaPath + " has no Media HouseID specified in metadata."); + + if (StringUtils.isBlank(archiveItem.getMediaTitle())) + throw new Exception(mediaPath + " has no Media Title specified in metadata."); + } private ArchiveItem createArchiveItem(Path filePath) throws Exception { ArchiveItem result = null; @@ -68,7 +109,7 @@ public class ArchiveRecursive extends JobStep { result.setMediaHouseId(mediaHouseId); result.setMediaTitle(fileName); //TODO kesobb kivenni - result.setMediaDescription("/OMARCHIVE"); + //result.setMediaDescription("/OMARCHIVE"); result.setMediaType("Generic"); } @@ -78,27 +119,14 @@ public class ArchiveRecursive extends JobStep { @StepEntry public Object[] execute(String sourcePath, int killDateDays, int limit) { - DirectoryStream directoryStream = null; + this.sourcePath = sourcePath; + this.killDateDays = killDateDays; + this.limit = limit; try { - DirectoryStream stream = Files.newDirectoryStream(Paths.get(sourcePath)); - int current = 0; - for (Path p : stream) { - if (processPathItem(p, killDateDays)) - current++; - if (current == limit) - return null; - } + Files.walkFileTree(Paths.get(sourcePath), this); } catch (Exception e) { - logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", e.getMessage()); - } finally { - if (directoryStream != null) { - try { - directoryStream.close(); - } catch (IOException e) { - } - } + logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage()); } - return null; } @@ -141,7 +169,7 @@ public class ArchiveRecursive extends JobStep { return result; } - private boolean handleConflict(Path sourcePath) throws Exception { + private boolean handleArchiveConflict(Path sourcePath) throws Exception { boolean result = false; String sourceFileName = sourcePath.getFileName().toString(); if (getManager().isMediaFileExists(sourceFileName)) { @@ -177,59 +205,78 @@ public class ArchiveRecursive extends JobStep { return result; } - private boolean processPathItem(Path mediaFilePath, int killDateDays) throws Exception { - File mediaFile = mediaFilePath.toFile(); - if (mediaFile.isDirectory()) - return false; - - Path dotStorePath = Paths.get(mediaFilePath.getParent().toString(), EscortFiles.STATUSFOLDER, mediaFilePath.getFileName().toString()); + @Override + public FileVisitResult postVisitDirectory(Path paramT, IOException paramIOException) throws IOException { + return FileVisitResult.CONTINUE; + } - if (EscortFiles.isCatchedFileExists(dotStorePath)) - return false; + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException { + Path dirName = dir.getFileName(); - //mar letezik az archivumban, atmozgatjuk - if (handleConflict(mediaFilePath)) - return false; + if (skipPathNames.contains(dirName.toString())) { + //logger.info("Skipping {}", dir); + return FileVisitResult.SKIP_SUBTREE; + } else + logger.info("PreVisit {}", dir); - ArchiveItem archiveItem = createArchiveItem(mediaFilePath); + return FileVisitResult.CONTINUE; + } - if (archiveItem == null) { - logger.warn("{} has no metadata specified.", mediaFile.getName()); + private boolean processPathItem(Path mediaPath) throws Exception { + if (submitted == limit) return false; - } - if (StringUtils.isBlank(archiveItem.getItemHouseId())) { - logger.warn("{} has no Item HouseID specified in metadata.", mediaFile.getName()); + File mediaFile = mediaPath.toFile(); + if (mediaFile.isDirectory()) return false; - } - if (StringUtils.isBlank(archiveItem.getItemTitle())) { - logger.warn("{} has no Item Title specified in metadata.", mediaFile.getName()); + if (EscortFiles.isMediaCatched(mediaPath)) return false; - } - if (StringUtils.isBlank(archiveItem.getMediaHouseId())) { - logger.warn("{} has no Media HouseID specified in metadata.", mediaFile.getName()); + if (!canReadMediaInfo(mediaPath)) return false; - } - if (StringUtils.isBlank(archiveItem.getMediaTitle())) { - logger.warn("{} has no Media Title specified in metadata.", mediaFile.getName()); + if (handleArchiveConflict(mediaPath)) return false; - } + + ArchiveItem archiveItem = createArchiveItem(mediaPath); try { - IJobRuntime runtime = getEngine().submit(JOBTEMPLATE, ARCHIVE, ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays)); + checkArchiveItem(archiveItem, mediaPath); + submitted++; + + Map parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays); + IJobRuntime runtime = getEngine().submit(null, e -> { + if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) + EscortFiles.removeMediaCatch(mediaPath); + }, JOBTEMPLATE, ARCHIVE, 1, IJobEngine.DEFAULT_OWNER, parameters); if (runtime == null) throw new Exception("Submit returned null runtime"); - EscortFiles.createCatchedFile(dotStorePath); + EscortFiles.createMediaCatch(mediaPath); } catch (Exception e) { String fileName = new File(archiveItem.getMediaFile()).getName(); logger.error(getSessionMarker(), "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage()); - throw e; } return true; } + + @Override + public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException { + //logger.info("Will archived {}", filePath); + try { + processPathItem(filePath); + } catch (Exception e) { + logger.catching(e); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path filePath, IOException paramIOException) throws IOException { + logger.info("Error archive {}", filePath); + return FileVisitResult.CONTINUE; + } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java index 5bcad928..7fa3d092 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java @@ -41,8 +41,8 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor

dirStream = Files.newDirectoryStream(directory)) { - final int[] count = { 0 }; - final int[] specialCount = { 0 }; + final int[] count = new int[] { 0 }; + final int[] specialCount = new int[] { 0 }; dirStream.forEach(p -> { count[0]++; // if (p.getFileName().toString().toLowerCase().equals(PROJECTFOLDER.toLowerCase())) @@ -59,8 +59,8 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor

killDateFiles = getKillDateFiles(filePath); @@ -243,8 +244,8 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor

{ try { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java index e885a7a0..cce5921f 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java @@ -62,6 +62,7 @@ public class EscortFiles { private static final String KILLDATE_FILENAME = "%s.%s.killdate"; private static final String FORMAT_KILLDATENAME = "yyyyMMdd"; public static final String STATUSFOLDER = ".STATUS"; + public static final String CONFLICTFOLDER = ".CONFLICT"; public static String composeKillDate(int days) { Calendar killDate = Calendar.getInstance(); @@ -89,6 +90,22 @@ public class EscortFiles { Files.copy(Paths.get(escortFile), Paths.get(escortFile + "." + extension)); } + /*** + * A media eleresi utjan alapjan a .STATUS almappaban letrehozza a .catch fajlt. + * + * @param mediaFile + * @throws IOException + */ + public static void createMediaCatch(Path mediaFile) throws IOException { + Path catchedFile = createMediaCathFilePath(mediaFile); + ensureUNCFolder(mediaFile.getParent()); + Files.createFile(catchedFile); + } + + private static Path createMediaCathFilePath(Path mediaFile) { + return Paths.get(mediaFile.getParent().toString(), STATUSFOLDER, mediaFile.getFileName() + DOT_CATCHED); + } + public static void createMetadata(String filePath, String fileName, String metadata) throws IOException { ensureUNCFolder(filePath, STATUSFOLDER); String metadataFileName = fileName + DOT_JSON; @@ -220,6 +237,17 @@ public class EscortFiles { return catchedFilePath.toFile().exists(); } + /*** + * A media eleresi utjan alapjan a .STATUS almappaban vizsgalja .catch fajl letezeset. + * + * @param mediaFile + * @return + */ + public static boolean isMediaCatched(Path mediaFile) { + Path catchedFile = createMediaCathFilePath(mediaFile); + return catchedFile.toFile().exists(); + } + public static boolean isMetadataExists(String filePath, String fileName) throws IOException { boolean result = false; String metadataFileName = fileName + DOT_JSON; @@ -256,6 +284,17 @@ public class EscortFiles { remove(Paths.get(escortFile.toString() + DOT_CATCHED)); } + /*** + * A media eleresi utjan alapjan a .STATUS almappabol torli a .catch fajlt. + * + * @param mediaFile + * @throws IOException + */ + public static void removeMediaCatch(Path mediaFile) { + Path catchedFile = createMediaCathFilePath(mediaFile); + remove(catchedFile); + } + public static void setNEXIOKillDate(int killDateDays, String targetFileName, String nexioAgency, StoreUri targetUri) throws Exception { OutputStream outStream = null; try { @@ -268,8 +307,8 @@ public class EscortFiles { String xml = targetFileName + ".xml"; outStream = targetFTP.storeFileStream(xml); if (outStream == null) { - throw new NullPointerException( - "Can not open: " + targetFileName.substring(0, targetFileName.lastIndexOf('.')) + ".xml" + " Reply:" + targetFTP.getReplyString()); + throw new NullPointerException("Can not open: " + targetFileName.substring(0, targetFileName.lastIndexOf('.')) + ".xml" + " Reply:" + + targetFTP.getReplyString()); } outStream.write(killDateFile); outStream.flush(); 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 index 81f199c0..bf807791 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ItemManagerExtensions.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ItemManagerExtensions.java @@ -4,7 +4,6 @@ import com.ibm.nosql.json.api.BasicDBObject; import user.jobengine.db.IItemManager; import user.jobengine.db.IResultSetConsumer; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; public class ItemManagerExtensions { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java index d7085875..d1938203 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java @@ -34,7 +34,8 @@ public class MetadataTransformStep extends JobStep { private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null"; public static final String DEFAULT_MEDIATYPE = "Generic"; private ItemManager itemManager; - private Marker marker; + + private Marker marker;; private void addTags(ArchiveItem archiveItem, Media mediaCubeMedia) { BasicDBList tags = archiveItem.getTags(); @@ -154,7 +155,7 @@ public class MetadataTransformStep extends JobStep { } private Item getExistingItem(String itemHouseId, String itemTitle) { - Item[] result = { null }; + Item[] result = new Item[] { null }; String sql = String.format("select id from item where houseid='%s' and title='%s'", itemHouseId, itemTitle); itemManager.executeQuery(sql, rs -> { long id = rs.getLong("id"); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataType.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataType.java new file mode 100644 index 00000000..12e166cc --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataType.java @@ -0,0 +1,5 @@ +package user.jobengine.server.steps; + +public enum MetadataType { + TrafficMaterial, TrafficPromo, TrafficAD, OctopusStory, OctopusPlaceholder, Generic +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java index 778dd7b9..0bb69923 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java @@ -4,10 +4,6 @@ import org.apache.commons.lang.StringUtils; public class MetadataTypeDetector { - public enum MetadataType { - TrafficMaterial, TrafficPromo, TrafficAD, OctopusStory, OctopusPlaceholder, Generic - } - private static final String HYPHEN = "-"; private static final String DOT = "."; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java index 57f5cadb..a2ce97bd 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java @@ -36,7 +36,6 @@ import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.ProgressEvent; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; public class OctopusDataMiner { private static final String MOS_ABSTRACT = ""; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java index 7ac81628..7148df4c 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java @@ -17,7 +17,6 @@ import org.apache.logging.log4j.Marker; import user.jobengine.db.ArchivedMedia; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; public class OutputPathAndNameSelectorStep extends JobStep { @@ -66,7 +65,7 @@ public class OutputPathAndNameSelectorStep extends JobStep { @StepEntry public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String onlineOutputFolder, String houseId, String targetPathType, - ArchivedMedia archivedMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws IOException { + ArchivedMedia archivedMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { marker = jobRuntime.getSessionMarker(); check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, houseId, targetPathType); @@ -92,34 +91,35 @@ public class OutputPathAndNameSelectorStep extends JobStep { } private String getFolderById(String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder, - String genericOutputFolder, String houseId, ArchivedMedia archivedMedia) { + String genericOutputFolder, String houseId, ArchivedMedia archivedMedia) throws Exception { String id = houseId.toUpperCase(); MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id); String result = null; - switch (mdType) { - case Generic: - result = genericOutputFolder; - break; - case OctopusPlaceholder: - case OctopusStory: + //a groovy nem latja enumnak, hanem az objektum tulajdonsaganak + switch (mdType.toString()) { + case "OctopusPlaceholder": + case "OctopusStory": result = octopusOutputFolder; break; - case TrafficMaterial: + case "TrafficMaterial": result = materialOutputFolder; break; - case TrafficPromo: + case "TrafficPromo": result = promoOutputFolder; break; - case TrafficAD: + case "TrafficAD": result = advertisementOutputFolder; break; + case "Generic": + result = genericOutputFolder; + break; } return result; } private String getPossiblePath(String id, Path targetPath) throws IOException { - String[] result = { targetPath.toString() }; + String[] result = new String[] { targetPath.toString() }; FileVisitor matcherVisitor = new SimpleFileVisitor() { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { @@ -142,7 +142,8 @@ public class OutputPathAndNameSelectorStep extends JobStep { try { EscortFiles.ensureUNCFolder(Paths.get(targetPath)); } catch (Exception e) { - logger.error(jobRuntime.getSessionMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage()); + logger.error(jobRuntime.getSessionMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, + e.getMessage()); throw e; } return new Object[] { targetPath, targetNamePattern, false }; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/PlanAirExtensions.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/PlanAirExtensions.java index 46d1f797..8e7cef26 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/PlanAirExtensions.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/PlanAirExtensions.java @@ -31,7 +31,6 @@ import user.commons.mediatool.Timecode.Type; import user.jobengine.db.IItemManager; import user.jobengine.db.IResultSetConsumer; import user.jobengine.db.IStatementDecorator; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; public class PlanAirExtensions { private static final Logger logger = LogManager.getLogger(); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java index 096ef6b7..3fdc396a 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java @@ -25,7 +25,6 @@ import org.apache.logging.log4j.Marker; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; public class ProjectCleanupMountedLocationStep extends JobStep implements FileVisitor { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java index 07743474..a9589e01 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java @@ -60,7 +60,7 @@ public class TSMRestoreStep extends JobStep { String targetFileName = String.format(targetNamePattern, sourceFileName); try { String details = String.format("%s (%d frames)", sourceFileName, mediaCubeMedia.getLength()); - jobRuntime.setDescription(String.format("%s: %s", jobRuntime.getDescription(), details)); + jobRuntime.setDescription(details); beforeRestore(targetUri, targetNamePattern); final IJobRuntime runtime = jobRuntime; sourceUri.addProgressListener(new IProgressEventListener() { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java index 310df0d2..5b3907d4 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java @@ -29,7 +29,7 @@ public class TranscodeFFAStranStep extends JobStep { private static final String MP4EXT = ".MP4"; private static final String MXFEXT = ".MXF"; private static final String LOWRES_FILETYPE = "Low-res"; - private static final Logger logger = LogManager.getLogger(); + private static final Logger logger = LogManager.getLogger("TranscodeFFAStranStep"); private IItemManager manager; private Store store; private FileType fileType; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaData.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaDataStep.java similarity index 93% rename from server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaData.java rename to server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaDataStep.java index b13d4962..1edbda88 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaData.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaDataStep.java @@ -13,9 +13,8 @@ import user.jobengine.db.MediaFile; import user.jobengine.db.Store; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; -public class UpdateGhostMediaData extends JobStep { +public class UpdateGhostMediaDataStep extends JobStep { private static final Logger logger = LogManager.getLogger(); private Marker marker; diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java index 23e19ad5..6f26e22f 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java @@ -1,6 +1,9 @@ package user.jobengine.server; +import java.io.IOException; import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @@ -230,16 +233,20 @@ public class JobStepExecutor implements IJobStepExecutor { if (isGroovyStep()) { try (GroovyClassLoader gcl = new GroovyClassLoader(parentLoader)) { String stepsDir = System.getProperty("jobengine.jobsteps.groovy.root", ""); - for (String executorName : jobEngine.getExecutors().keySet()) { - if (!executorName.endsWith(".java")) - continue; - Class myClass = gcl.parseClass(Paths.get(stepsDir, executorName).toFile()); - if (stepUnitName.equals(executorName)) { - result = (IJobStep) myClass.newInstance(); - break; - } - } + Class myClass = parseClassHierarchy(gcl, stepsDir, stepUnitName); + result = (IJobStep) myClass.newInstance(); + + // for (String executorName : jobEngine.getExecutors().keySet()) { + // if (!executorName.endsWith(".java")) + // continue; + // + // Class myClass = gcl.parseClass(Paths.get(stepsDir, executorName).toFile()); + // if (stepUnitName.equals(executorName)) { + // result = (IJobStep) myClass.newInstance(); + // break; + // } + // } } catch (Exception e) { logger.error(e.getMessage()); throw e; @@ -279,6 +286,27 @@ public class JobStepExecutor implements IJobStepExecutor { return isRemote; } + private Class parseClassHierarchy(GroovyClassLoader cl, String root, String className) throws IOException { + Path path = Paths.get(root, className); + Class result = null; + if (!path.toFile().exists()) + return result; + List lines = Files.readAllLines(path); + + for (String line : lines) { + if (line.contains("extends")) { + String[] tokens = line.split("extends"); + String parent = tokens[tokens.length - 1]; + parent = parent.replace("{", "").trim(); + + parseClassHierarchy(cl, root, parent); + break; + } + } + result = cl.parseClass(path.toFile()); + return result; + } + @Override public void revoke(IJobRuntime jobRuntime) { queue.remove(jobRuntime); diff --git a/server/user.mediacube.gui/resources/i3-label_hu.properties b/server/user.mediacube.gui/resources/i3-label_hu.properties index e67cb167..afba507e 100644 --- a/server/user.mediacube.gui/resources/i3-label_hu.properties +++ b/server/user.mediacube.gui/resources/i3-label_hu.properties @@ -1,4 +1,4 @@ -version=2.6.7 +version=2.6.8 footer=2016-2020 © Copyright User Rendszerház Kft. login_info=Információ