--- /dev/null
+package hu.user.mediacube.executors.tests;\r
+\r
+import java.sql.Connection;\r
+import java.sql.SQLException;\r
+\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.ItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobRuntime;\r
+import user.jobengine.server.steps.AttachLowresStep;\r
+\r
+public class SupportAttachLowres {\r
+ protected static IItemManager manager = null;\r
+ private static final String LOWRES_ROOT = "//10.11.1.90/data/lowres";\r
+ private static final String LOWRES_OUTPUT = "//10.11.1.100/Promise/TRANSCODER/FFASTRANSCODER/Out";\r
+\r
+ private static final long[] duplicateLength = { 0 };\r
+\r
+ @BeforeClass\r
+ static public void setUpConnection() {\r
+ System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty("jobengine.nosql.db.user", "db2admin");\r
+ System.setProperty("jobengine.nosql.db.password", "password");\r
+ System.setProperty(ItemManager.DBURL, "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+ System.setProperty(ItemManager.DBPASSWORD, "password");\r
+ manager = new ItemManager();\r
+ manager.connect();\r
+ }\r
+\r
+ @AfterClass\r
+ static public void tearDownConnection() {\r
+ manager.disconnect();\r
+ }\r
+\r
+ @Test\r
+ public void process() throws SQLException {\r
+ final Connection[] con = { null };\r
+ final AttachLowresStep step = new AttachLowresStep();\r
+ final IJobRuntime runtime = new JobRuntime();\r
+ runtime.setPersister(manager);\r
+\r
+ manager.executeQuery("select mediaid from vw_mediafiles where mediafilecount = 1", rs -> {\r
+ long mediaId = rs.getLong("mediaId");\r
+ Media m = manager.getMedia(mediaId);\r
+ try {\r
+ step.run(null, runtime, new Object[] { m, LOWRES_OUTPUT, LOWRES_ROOT });\r
+ } catch (Throwable e) {\r
+ System.out.println("Error: " + e.getMessage());\r
+ }\r
+ return true;\r
+ }, null);\r
+\r
+ con[0].close();\r
+ }\r
+\r
+}\r
--- /dev/null
+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.util.List;\r
+\r
+import org.apache.commons.io.FilenameUtils;\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.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
+\r
+import user.jobengine.db.FileType;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
+\r
+public class AttachLowresStep extends JobStep {\r
+ private static final int POLL_INTERVALL = 3000;\r
+ private static final String MP4EXT = ".MP4";\r
+ private static final String MXFEXT = ".MXF";\r
+ private static final String LOWRES_FILETYPE = "Low-res";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private IItemManager manager;\r
+ private Store store;\r
+ private FileType fileType;\r
+ private Media mediaCubeMedia;\r
+ private Marker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(Media mediaCubeMedia, String localLowresTargetPath, String webPath) throws Exception {\r
+\r
+ this.marker = jobRuntime.getMarker();\r
+ this.manager = (IItemManager) jobRuntime.getPersister();\r
+ this.store = check(manager.getSystemStore(true), "lowres Store");\r
+ this.fileType = check(manager.getFileType(LOWRES_FILETYPE), "lowres FileType");\r
+ this.mediaCubeMedia = check(mediaCubeMedia, "mediaCubeMedia");\r
+ check(localLowresTargetPath, "localLowresTargetPath");\r
+ check(webPath, "webPath");\r
+\r
+ List<MediaFile> mediaFiles = mediaCubeMedia.getMediaFiles();\r
+ if (mediaFiles.size() != 1)\r
+ throw new Exception("Media must have one media file");\r
+ String sourceFileName = mediaFiles.get(0).getHouseId();\r
+ Path targetPath = null;\r
+ try {\r
+ String targetFileName = FilenameUtils.removeExtension(sourceFileName) + MP4EXT;\r
+ targetPath = Paths.get(localLowresTargetPath, targetFileName);\r
+ System.out.println("Processing " + sourceFileName);\r
+\r
+ if (!targetPath.toFile().exists())\r
+ System.out.println("File not exists: " + targetPath.toString());\r
+ else\r
+ postprocess(targetPath, webPath);\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ Message m = new ParameterizedMessage("{} átkódolás hiba: {}", e.getClass().getSimpleName(), e.getMessage());\r
+ logger.error(marker, m);\r
+ throw new Exception(m.getFormattedMessage());\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private void postprocess(Path transcodedFilePath, String webPath) throws IOException {\r
+ Path lowresPath = null;\r
+ try {\r
+ String transcodedFileName = transcodedFilePath.getFileName().toString();\r
+ String targetPath = null;\r
+ if (transcodedFileName.indexOf(".") > 2) {\r
+ Path subdir = Paths.get(transcodedFileName.substring(0, 1), transcodedFileName.substring(1, 2), transcodedFileName.substring(2, 3));\r
+ EscortFiles.ensureUNCFolder(webPath, subdir.toString());\r
+ targetPath = Paths.get(subdir.toString(), transcodedFileName).toString();\r
+ } else {\r
+ targetPath = transcodedFileName;\r
+ }\r
+ lowresPath = Paths.get(webPath, targetPath);\r
+ int version = 1;\r
+ while (lowresPath.toFile().exists()) {\r
+ String fileName = transcodedFileName + version + MP4EXT;\r
+ lowresPath = Paths.get(lowresPath.toString().replace(transcodedFileName, fileName));\r
+ targetPath = targetPath.replace(transcodedFileName, fileName);\r
+ transcodedFileName = fileName;\r
+ version++;\r
+ }\r
+\r
+ Files.move(transcodedFilePath, lowresPath);\r
+ manager.createMediaFile(targetPath, fileType, store, mediaCubeMedia).add();\r
+ } catch (IOException e) {\r
+ logger.catching(e);\r
+ logger.error(marker, "A '{}' állomány mozgatása a '{}' helyre nem sikerült.", transcodedFilePath, lowresPath);\r
+ throw e;\r
+ }\r
+ }\r
+\r
+}\r