From 5f487d54c2fbab1096c6fafb01f861a5e92e9d70 Mon Sep 17 00:00:00 2001 From: =?utf8?q?D=C3=A9nes=20Horv=C3=A1th?= Date: Wed, 14 Aug 2019 11:30:01 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31477 --- server/-configuration/scheduledjobs.json | 17 +- server/user.commons.log4j2/.classpath | 2 +- .../config/config.xml | 1 + .../config/scheduledjobs.json | 21 ++ .../jobtemplates/common-copy.xml | 38 ++ .../jobtemplates/retrieve-ondemand.xml | 46 ++- .../jobengine/server/steps/EscortFiles.java | 56 ++- .../jobengine/server/steps/FileCopyStep.java | 123 ++++++ .../jobengine/server/steps/MXFCutterStep.java | 133 +++++++ .../steps/OutputPathAndNameSelectorStep.java | 65 ++-- .../server/steps/TSMExtendedRetrieveStep.java | 55 +-- .../pages/directorylist.zul | 19 +- .../zk/model/DirectoryListModel.java | 103 +++-- .../user/jobengine/zk/model/MaestroModel.java | 357 ------------------ 14 files changed, 551 insertions(+), 485 deletions(-) create mode 100644 server/user.jobengine.executors/jobtemplates/common-copy.xml rename server/{user.jobengine.osgi.server => user.jobengine.executors}/src/user/jobengine/server/steps/EscortFiles.java (72%) create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/FileCopyStep.java create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index 2a8407b7..f9d84efb 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -254,9 +254,22 @@ {"name": "houseId", "type": "java.lang.String"}, {"name": "successRecipient", "type": "java.lang.String"}, {"name": "killDateDays", "type": "java.lang.Integer"} + ] + }, + { + "active": false, + "executeimmediate": false, + "name" : "Common file copy", + "template": "common-copy.xml", + "cronexpression": "0 0 0/1 1/1 * ? *", + "parameters": [ + {"name": "sourceStoreUri", "value": "10.10.1.100/ARCHIVE", "type": "user.commons.StoreUri"}, + {"name": "targetStoreUri", "value": "10.10.1.100/TEMP", "type": "user.commons.StoreUri"}, + {"name": "sourceFileName", "value": "akarmi.mp4", "type": "java.lang.String"}, + {"name": "targetFileName", "value": "barmi.mp4", "type": "java.lang.String"}, + {"name": "sourceRemoteProtocol", "value": "LOCAL", "type": "user.commons.remotestore.RemoteStoreProtocol"}, + {"name": "targetRemoteProtocol", "value": "FTP", "type": "user.commons.remotestore.RemoteStoreProtocol"}, ] } ]} - - diff --git a/server/user.commons.log4j2/.classpath b/server/user.commons.log4j2/.classpath index 6e16b23d..33db0138 100644 --- a/server/user.commons.log4j2/.classpath +++ b/server/user.commons.log4j2/.classpath @@ -1,6 +1,6 @@ - + diff --git a/server/user.jobengine.executors/config/config.xml b/server/user.jobengine.executors/config/config.xml index a4cfd3ba..93d01f23 100644 --- a/server/user.jobengine.executors/config/config.xml +++ b/server/user.jobengine.executors/config/config.xml @@ -35,4 +35,5 @@ + \ No newline at end of file diff --git a/server/user.jobengine.executors/config/scheduledjobs.json b/server/user.jobengine.executors/config/scheduledjobs.json index c0864540..ca6353a9 100644 --- a/server/user.jobengine.executors/config/scheduledjobs.json +++ b/server/user.jobengine.executors/config/scheduledjobs.json @@ -191,6 +191,27 @@ "template": "fake-noparams.xml", "cronexpression": "0 40 22 * * ?", "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ] + }, + { + "name" : "Teszt Jobstep", + "template": "test_instr.xml", + "cronexpression": "0 46-50/1 * * * ?", + "parameters": [ {"name": "milisec", "value": 1000, "type": "java.lang.Integer"} ] + }, + { + "active": false, + "executeimmediate": false, + "name" : "Common file copy", + "template": "common-copy.xml", + "cronexpression": "0 0 0/1 1/1 * ? *", + "parameters": [ + {"name": "sourceStoreName", "value": "10.10.1.100/ARCHIVE", "type": "java.lang.String"}, + {"name": "targetStoreName", "value": "10.10.1.100/TEMP", "type": "java.lang.String"}, + {"name": "sourceFileName", "value": "akarmi.mp4", "type": "java.lang.String"}, + {"name": "targetFileName", "value": "barmi.mp4", "type": "java.lang.String"}, + {"name": "sourceRemoteProtocol", "value": "http://", "type": "user.commons.remotestore.RemoteStoreProtocol"}, + {"name": "targetRemoteProtocol", "value": "http://", "type": "user.commons.remotestore.RemoteStoreProtocol"}, + ] } ]} diff --git a/server/user.jobengine.executors/jobtemplates/common-copy.xml b/server/user.jobengine.executors/jobtemplates/common-copy.xml new file mode 100644 index 00000000..4ebf8689 --- /dev/null +++ b/server/user.jobengine.executors/jobtemplates/common-copy.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml b/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml index 79756820..94566ca8 100644 --- a/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml +++ b/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml @@ -10,7 +10,7 @@ - + @@ -24,6 +24,7 @@ + @@ -56,6 +57,9 @@ + + + @@ -109,5 +113,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/EscortFiles.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java similarity index 72% rename from server/user.jobengine.osgi.server/src/user/jobengine/server/steps/EscortFiles.java rename to server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java index 4ad4442c..67536a7a 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/EscortFiles.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java @@ -2,6 +2,7 @@ package user.jobengine.server.steps; import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Path; @@ -23,6 +24,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.lang.StringUtils; +import org.apache.commons.net.ftp.FTPClient; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; @@ -31,6 +33,8 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import user.commons.CalendarUtils; +import user.commons.StoreUri; +import user.commons.remotestore.FtpDirectoryLister; public class EscortFiles { private static final Logger logger = LogManager.getLogger(); @@ -51,13 +55,11 @@ public class EscortFiles { return dateFormat.format(killDate.getTime()); } /* - - - 02-02-2018 - TEST TEST - AGENT AGENT - - */ + * + * 02-02-2018 TEST + * TEST AGENT AGENT + * + */ private static String composeKillDateFileName(String fileName, int days) { return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days)); @@ -71,7 +73,8 @@ public class EscortFiles { Files.write(xmlPath, content.getBytes()); } - public static byte[] createNEXIOKillDateFile(String fileName, Date killDate, String description, String agency) throws Exception { + public static byte[] createNEXIOKillDateFile(String fileName, Date killDate, String description, String agency) + throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); DOMImplementation impl = db.getDOMImplementation(); @@ -85,7 +88,8 @@ public class EscortFiles { } if (StringUtils.isNotBlank(description)) - root.appendChild(xmlDocument.createElement(EXTENDEDDESCRIPTION)).appendChild(xmlDocument.createTextNode(description)); + root.appendChild(xmlDocument.createElement(EXTENDEDDESCRIPTION)) + .appendChild(xmlDocument.createTextNode(description)); if (StringUtils.isNotBlank(agency)) root.appendChild(xmlDocument.createElement(EXTENDEDAGENCY)).appendChild(xmlDocument.createTextNode(agency)); xmlDocument.appendChild(root); @@ -93,7 +97,8 @@ public class EscortFiles { DOMSource domSource = new DOMSource(xmlDocument); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); - //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + // transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, + // "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); @@ -123,7 +128,7 @@ public class EscortFiles { try { Files.createDirectories(filePath, attr); } catch (Exception e) { - //logger.catching(e); + // logger.catching(e); try { Files.createDirectory(filePath); } catch (Exception e1) { @@ -138,4 +143,33 @@ public class EscortFiles { Path statusPath = Paths.get(filePath, folderName); ensureUNCFolder(statusPath); } + + public static void setNEXIOKillDate(int killDateDays, String targetFileName, String nexioAgency, StoreUri targetUri) + throws Exception { + OutputStream outStream = null; + try { + FTPClient targetFTP = ((FtpDirectoryLister) targetUri.getLister()).connect(); + Calendar killDate = CalendarUtils.createCalendar(new Date()); + killDate.add(Calendar.DAY_OF_YEAR, killDateDays); + if (targetFileName.toLowerCase().contains(".mxf")) + targetFileName = targetFileName.substring(0, targetFileName.lastIndexOf('.')); + byte[] killDateFile = EscortFiles.createNEXIOKillDateFile(targetFileName, killDate.getTime(), null, + nexioAgency); + 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()); + } + outStream.write(killDateFile); + outStream.flush(); + } catch (Exception e) { + throw e; + } finally { + if (outStream != null) + outStream.close(); + targetUri.cleanUp(); + } + } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCopyStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCopyStep.java new file mode 100644 index 00000000..bc1767a0 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCopyStep.java @@ -0,0 +1,123 @@ +package user.jobengine.server.steps; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class FileCopyStep { + private static final Logger logger = LogManager.getLogger(); + private IItemManager manager; + private StoreUri sourceUri; + private StoreUri targetUri; + private String sourceFileName; + private String targetFileName; + private RemoteStoreProtocol sourceRemoteStoreProtocol; + private RemoteStoreProtocol targetRemoteStoreProtocol; + private Store sourceStore; + private Store targetStore; + private RemoteFile sourceRemotefile; + private Marker marker; + + @StepEntry + public Object[] execute(String sourceStoreName, String targetStoreName, String sourceFileName, String targetFileName, + RemoteStoreProtocol sourceRemoteStoreProtocol, RemoteStoreProtocol targetRemoteStoreProtocol + , IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getMarker(); + this.sourceFileName = sourceFileName; + this.targetFileName = targetFileName; + this.sourceRemoteStoreProtocol = sourceRemoteStoreProtocol; + this.targetRemoteStoreProtocol = targetRemoteStoreProtocol; + + setAndCheck(sourceStoreName, targetStoreName, jobEngine); + + try { + sourceUri.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + jobRuntime.incrementProgress(evt.getProgress()); + } + }); + + RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); + + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + sourceUri.cleanUp(); + targetUri.cleanUp(); + } + + return null; + } + + private void setAndCheck(String sourceStoreName, String targetStoreName, IJobEngine jobEngine) { + if (jobEngine == null) { + logger.error(marker, "A folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(marker, "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + if (sourceUri == null) { + logger.error(marker, "A sourceStoreUri bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + if (targetUri == null) { + logger.error(marker, "A targetStoreUri bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + if (sourceFileName == null) { + logger.error(marker, "A forrás fájlnév bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + sourceUri = sourceStore.getSourceStoreUri(sourceRemoteStoreProtocol); + if (targetFileName == null) { + logger.error(marker, "A cél fájlnév bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + targetUri = targetStore.getTargetStoreUri(targetRemoteStoreProtocol); + if (sourceRemoteStoreProtocol == null) { + logger.error(marker, "A forrás másolási protokol bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + if (targetRemoteStoreProtocol == null) { + logger.error(marker, "A cél másolási protokol bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + } + + private void transferFile(String sourceFileName, String targetFileName) throws Exception { + int reply = 0; + logger.info("Transfer clip {}", sourceFileName); + try { + RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + sourceUri.cleanUp(); + targetUri.cleanUp(); + } + + } +} + diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java new file mode 100644 index 00000000..5b356e4c --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java @@ -0,0 +1,133 @@ +package user.jobengine.server.steps; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +//import user.jobengine.db.Media; +import user.jobengine.db.ArchivedMedia; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class MXFCutterStep extends JobStep { + private static final String TARGETNAMEPATTERN = "-ARCH-%s"; + private static final Logger logger = LogManager.getLogger(); + private IItemManager manager; + private StoreUri tempTargetUri; + private StoreUri tempSourceUri; + private String sourceFileName; + private Marker marker; + private int nexioPort; + private String nexioUserName, nexioPassword; + private String nexioHost; + + protected void checkTargetPath(String targetPath) { + if (StringUtils.isBlank(targetPath)) { + logger.error(marker, "A folyamat 'targetPath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing."); + } + } + + protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException { + StoreUri result = null; + result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + result.setPortNumber(nexioPort); + result.setUserName(nexioUserName); + result.setPassword(nexioPassword); + + return result; + } + + @StepEntry + public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String houseId, String successRecipient, + int killDateDays, boolean useNexioTarget, String nexioAgency, Integer nexioPort, String nexioUserName, + String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + this.nexioPort = nexioPort; + this.nexioUserName = nexioUserName; + this.nexioPassword = nexioPassword; + nexioHost = System.getProperty("nexio.host"); + marker = jobRuntime.getMarker(); + + if (useNexioTarget && archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) { + setAndCheck(archivedMedia, houseId, targetPath, useNexioTarget, jobEngine); + + final IJobRuntime runtime = jobRuntime; + sourceFileName = houseId + TARGETNAMEPATTERN; + tempSourceUri.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + runtime.incrementProgress(evt.getProgress()); + } + }); + + RemoteFile result = tempSourceUri.transferFrom(tempTargetUri, sourceFileName, sourceFileName); + + EscortFiles.setNEXIOKillDate(killDateDays, houseId, nexioAgency, tempTargetUri); + + logger.info("A {} videó kivágva {}s - {}s", sourceFileName, archivedMedia.getTcIn(), + archivedMedia.getTcOut()); + } + + return null; + } + + // private String getSourceFileName(ArchivedMedia archivedMedia, Store + // store) { + // List mediaFiles = archivedMedia.getMedia().getMediaFiles(); + // if (mediaFiles == null) + // return null; + // for (MediaFile mediaFile : mediaFiles) { + // if (mediaFile.getStore().getId() == store.getId()) + // return mediaFile.getRelativePath(); + // } + // return null; + // } + + private void setAndCheck(ArchivedMedia archivedMedia, String houseId, String targetPath, boolean useNexioTarget, + IJobEngine jobEngine) { + if (jobEngine == null) { + logger.error(marker, "A folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(marker, "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + if (archivedMedia == null) { + logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres."); + throw new NullPointerException( + "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + checkTargetPath(targetPath); + if (StringUtils.isBlank(houseId)) { + logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'houseId' input parameter missing."); + } + Store tsmStore = manager.getSystemStore(false); + if (tsmStore == null) { + logger.error(marker, "A TSM rendszer beállítás nem elérhető."); + throw new NullPointerException("System is not configured properly, missing TSM Store."); + } + + tempSourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, targetPath); + if (tempSourceUri == null) { + logger.error(marker, "A TSM rendszer beállítás paraméterei nem elérhetőek."); + throw new NullPointerException("System is not configured properly, missing TSM StoreUri."); + } + tempTargetUri = createTargetUri(manager, targetPath); + // sourceFileName = getSourceFileName(archivedMedia, tsmStore); + if (sourceFileName == null) { + logger.error(marker, "Adatbázis bejegyzés hiba, a visszatöltendő fájl neve nem található."); + throw new NullPointerException("Database error, missing MediaFile 'relativePath'."); + } + } +} 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 1338315b..8cb0ed4e 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 @@ -14,6 +14,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; 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; @@ -26,31 +27,38 @@ public class OutputPathAndNameSelectorStep extends JobStep { private Marker marker; - private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, - String octopusOutputFolder, String genericOutputFolder, String houseId, String targetPathType) { + private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, + String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String houseId, + String targetPathType) { if (StringUtils.isBlank(localRetrievePath)) { logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'localRetrievePath' input parameter missing."); } if (StringUtils.isBlank(materialOutputFolder)) { logger.error(marker, "A folyamat 'materialOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'materialOutputFolder' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'materialOutputFolder' input parameter missing."); } if (StringUtils.isBlank(promoOutputFolder)) { logger.error(marker, "A folyamat 'promoOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'promoOutputFolder' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'promoOutputFolder' input parameter missing."); } if (StringUtils.isBlank(advertisementOutputFolder)) { logger.error(marker, "A folyamat 'advertisementOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'advertisementOutputFolder' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'advertisementOutputFolder' input parameter missing."); } if (StringUtils.isBlank(octopusOutputFolder)) { logger.error(marker, "A folyamat 'octopusOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'octopusOutputFolder' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'octopusOutputFolder' input parameter missing."); } if (StringUtils.isBlank(genericOutputFolder)) { logger.error(marker, "A folyamat 'genericOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'genericOutputFolder' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'genericOutputFolder' input parameter missing."); } if (StringUtils.isBlank(houseId)) { logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres."); @@ -58,36 +66,44 @@ public class OutputPathAndNameSelectorStep extends JobStep { } if (StringUtils.isBlank(targetPathType)) { logger.error(marker, "A folyamat 'targetPathType' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'targetPathType' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'targetPathType' input parameter missing."); } } @StepEntry - public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, - String octopusOutputFolder, String genericOutputFolder, String onlineOutputFolder, String houseId, String targetPathType, IJobEngine jobEngine, - IJobRuntime jobRuntime) throws IOException { + 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 { marker = jobRuntime.getMarker(); - check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, houseId, - targetPathType); + check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, + octopusOutputFolder, genericOutputFolder, houseId, targetPathType); Object[] result = null; switch (Integer.parseInt(targetPathType)) { case 0: - String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, - houseId); - return localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime); + String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, + octopusOutputFolder, genericOutputFolder, houseId, archivedMedia); + result = localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime); case 1: - return localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime); + result = localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime); case 2: - return new Object[] { null, houseId, true }; + + if (archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) + result = new Object[] { genericOutputFolder, houseId, true }; + else + result = new Object[] { null, houseId, true }; } return result; } - private String getFolderById(String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder, - String genericOutputFolder, String houseId) { + private String getFolderById(String materialOutputFolder, String promoOutputFolder, + String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String houseId, + ArchivedMedia archivedMedia) { String id = houseId.toUpperCase(); MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id); String result = null; + switch (mdType) { case Generic: result = genericOutputFolder; @@ -126,14 +142,17 @@ public class OutputPathAndNameSelectorStep extends JobStep { return result[0]; } - private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, IJobRuntime jobRuntime) throws IOException { + private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, + IJobRuntime jobRuntime) throws IOException { String id = houseId.toUpperCase(); String targetPath = getPossiblePath(id, Paths.get(localRetrievePath, outputFolder, id)).toString(); String targetNamePattern = houseId + TARGETNAMEPATTERN; try { EscortFiles.ensureUNCFolder(Paths.get(targetPath)); } catch (Exception e) { - logger.error(jobRuntime.getMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage()); + logger.error(jobRuntime.getMarker(), + "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/TSMExtendedRetrieveStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java index 49c9503e..4b210e92 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java @@ -1,14 +1,6 @@ package user.jobengine.server.steps; -import java.io.OutputStream; -import java.util.Calendar; -import java.util.Date; - -import org.apache.commons.net.ftp.FTPClient; - -import user.commons.CalendarUtils; import user.commons.StoreUri; -import user.commons.remotestore.FtpDirectoryLister; import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.IItemManager; import user.jobengine.db.Media; @@ -23,31 +15,10 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { private String nexioAgency; @Override - protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws Exception { + protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) + throws Exception { if (useNexioTarget) { - OutputStream outStream = null; - try { - FTPClient targetFTP = ((FtpDirectoryLister) targetUri.getLister()).connect(); - Calendar killDate = CalendarUtils.createCalendar(new Date()); - killDate.add(Calendar.DAY_OF_YEAR, killDateDays); - if (targetFileName.toLowerCase().contains(".mxf")) - targetFileName = targetFileName.substring(0, targetFileName.lastIndexOf('.')); - byte[] killDateFile = EscortFiles.createNEXIOKillDateFile(targetFileName, killDate.getTime(), null, nexioAgency); - 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()); - } - outStream.write(killDateFile); - outStream.flush(); - } catch (Exception e) { - throw e; - } finally { - if (outStream != null) - outStream.close(); - targetUri.cleanUp(); - } + EscortFiles.setNEXIOKillDate(killDateDays, targetFileName, nexioAgency, targetUri); } else { super.afterRestore(targetUri, targetPath, killDateDays, targetFileName); } @@ -60,7 +31,8 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { newTargetName = targetName.substring(0, targetName.lastIndexOf('.')); if (useNexioTarget) if (targetURI.fileExists(newTargetName + ".mxf")) - throw new Exception(String.format("%s-The newly created file name is existed.", getClass().getSimpleName())); + throw new Exception( + String.format("%s-The newly created file name is existed.", getClass().getSimpleName())); } @Override @@ -84,9 +56,10 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { } @StepEntry - public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays, - String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, String nexioAgency, Integer nexioPort, String nexioUserName, - String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, + int killDateDays, String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, + String nexioAgency, Integer nexioPort, String nexioUserName, String nexioPassword, IJobEngine jobEngine, + IJobRuntime jobRuntime) throws Exception { this.useNexioTarget = useNexioTarget; this.nexioAgency = nexioAgency; this.nexioPort = nexioPort; @@ -101,17 +74,19 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { throw new NullPointerException("System is not configured properly, 'nexioPort' input parameter missing."); } if (nexioUserName == null) { - throw new NullPointerException("System is not configured properly, 'nexioUserName' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'nexioUserName' input parameter missing."); } if (nexioPassword == null) { - throw new NullPointerException("System is not configured properly, 'nexioPassword' input parameter missing."); + throw new NullPointerException( + "System is not configured properly, 'nexioPassword' input parameter missing."); } if (nexioAgency == null) { throw new NullPointerException("System is not configured properly, 'nexioAgency' input parameter missing."); } - return super.execute(mediaCubeMedia, targetPath, targetNamePattern, successRecipient, killDateDays, localRetrievePath, globalRetrievePath, jobEngine, - jobRuntime); + return super.execute(mediaCubeMedia, targetPath, targetNamePattern, successRecipient, killDateDays, + localRetrievePath, globalRetrievePath, jobEngine, jobRuntime); } } diff --git a/server/user.jobengine.osgi.server/pages/directorylist.zul b/server/user.jobengine.osgi.server/pages/directorylist.zul index 72614a7f..c77a6241 100644 --- a/server/user.jobengine.osgi.server/pages/directorylist.zul +++ b/server/user.jobengine.osgi.server/pages/directorylist.zul @@ -5,7 +5,7 @@
- - - - - -