git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorDénes Horváth <USER\denes.horvath>
Wed, 14 Aug 2019 11:30:01 +0000 (11:30 +0000)
committerDénes Horváth <USER\denes.horvath>
Wed, 14 Aug 2019 11:30:01 +0000 (11:30 +0000)
14 files changed:
server/-configuration/scheduledjobs.json
server/user.commons.log4j2/.classpath
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/config/scheduledjobs.json
server/user.jobengine.executors/jobtemplates/common-copy.xml [new file with mode: 0644]
server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java [moved from server/user.jobengine.osgi.server/src/user/jobengine/server/steps/EscortFiles.java with 72% similarity]
server/user.jobengine.executors/src/user/jobengine/server/steps/FileCopyStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java
server/user.jobengine.osgi.server/pages/directorylist.zul
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DirectoryListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MaestroModel.java

index 2a8407b760b33beac065b065977fce081d1d1874..f9d84efbb40b999d428c974cf9d4022284c75601 100644 (file)
        {"name": "houseId", "type": "java.lang.String"},\r
        {"name": "successRecipient", "type": "java.lang.String"},\r
        {"name": "killDateDays", "type": "java.lang.Integer"}\r
+      ]\r
+       },      \r
+       {\r
+      "active": false,\r
+      "executeimmediate": false,\r
+         "name" : "Common file copy",\r
+      "template": "common-copy.xml",\r
+      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "parameters": [ \r
+       {"name": "sourceStoreUri", "value": "10.10.1.100/ARCHIVE", "type": "user.commons.StoreUri"},\r
+       {"name": "targetStoreUri", "value": "10.10.1.100/TEMP", "type": "user.commons.StoreUri"},\r
+       {"name": "sourceFileName", "value": "akarmi.mp4", "type": "java.lang.String"},\r
+       {"name": "targetFileName", "value": "barmi.mp4", "type": "java.lang.String"},\r
+       {"name": "sourceRemoteProtocol", "value": "LOCAL", "type": "user.commons.remotestore.RemoteStoreProtocol"},\r
+       {"name": "targetRemoteProtocol", "value": "FTP", "type": "user.commons.remotestore.RemoteStoreProtocol"},\r
       ]\r
        }\r
 ]}\r
 \r
-\r
-\r
index 6e16b23d6951a66733f6bad1d440cc2b57c86122..33db01386486d29b3bda38a2e7d60d7b4ec3843a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <classpath>\r
-       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
+       <classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
        <classpathentry kind="src" path="src"/>\r
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
        <classpathentry kind="output" path="bin"/>\r
index a4cfd3bad57c1078a0a065b88bb450e60cd4f4bb..93d01f230bea6ea27758dd1f6ddc769b316c16bb 100644 (file)
@@ -35,4 +35,5 @@
        <executor className="user.jobengine.server.steps.UploadRecordingToNexioStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.MediaToolStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.UpdateGhostMediaData" maxConcurrent="1"/>\r
+       <executor className="user.jobengine.server.steps.FileCopyStep" maxConcurrent="1"/>\r
 </executors>
\ No newline at end of file
index c08645404a4cdd8a3284e74ddcad79258ae37645..ca6353a9a45993010c62ce661f305ad96be54879 100644 (file)
       "template": "fake-noparams.xml",\r
       "cronexpression": "0 40 22 * * ?",\r
       "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+       },\r
+       {\r
+         "name" : "Teszt Jobstep",\r
+      "template": "test_instr.xml",\r
+      "cronexpression": "0 46-50/1 * * * ?",\r
+      "parameters": [ {"name": "milisec", "value": 1000, "type": "java.lang.Integer"} ]\r
+       },      \r
+       {\r
+      "active": false,\r
+      "executeimmediate": false,\r
+         "name" : "Common file copy",\r
+      "template": "common-copy.xml",\r
+      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "parameters": [ \r
+       {"name": "sourceStoreName", "value": "10.10.1.100/ARCHIVE", "type": "java.lang.String"},\r
+       {"name": "targetStoreName", "value": "10.10.1.100/TEMP", "type": "java.lang.String"},\r
+       {"name": "sourceFileName", "value": "akarmi.mp4", "type": "java.lang.String"},\r
+       {"name": "targetFileName", "value": "barmi.mp4", "type": "java.lang.String"},\r
+       {"name": "sourceRemoteProtocol", "value": "http://", "type": "user.commons.remotestore.RemoteStoreProtocol"},\r
+       {"name": "targetRemoteProtocol", "value": "http://", "type": "user.commons.remotestore.RemoteStoreProtocol"},\r
+      ]\r
        }\r
 ]}\r
 \r
diff --git a/server/user.jobengine.executors/jobtemplates/common-copy.xml b/server/user.jobengine.executors/jobtemplates/common-copy.xml
new file mode 100644 (file)
index 0000000..4ebf868
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Általános file másolás">\r
+       <declarations>\r
+               <parameters>\r
+\r
+                       <parameter name="sourceStoreName" type="java.lang.String"/>\r
+                       <parameter name="targetStoreName" type="java.lang.String"/>\r
+                       <parameter name="sourceFileName" type="java.lang.String"/>\r
+                       <parameter name="targetFileName" type="java.lang.String"/>\r
+                       <parameter name="sourceRemoteProtocol" type="user.commons.remotestore.RemoteStoreProtocol"/>\r
+                       <parameter name="targetRemoteProtocol" type="user.commons.remotestore.RemoteStoreProtocol"/>\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep id="id1" type="user.jobengine.server.steps.FileCopyStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="sourceStoreName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetStoreName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="sourceFileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetFileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="sourceRemoteProtocol" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetRemoteProtocol" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index 79756820025d37350c9d729a80b98920333d5b21..94566ca898330e5620ef2a1c47154a416fb33799 100644 (file)
@@ -10,7 +10,7 @@
                        <parameter name="octopusOutputFolder" type="java.lang.String" />\r
                        <parameter name="genericOutputFolder" type="java.lang.String" />\r
                        <parameter name="onlineOutputFolder" type="java.lang.String" />\r
-                       <parameter name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
+                       <parameter name="archivedMedia" type="user.jobengine.db.ArchivedMedia" />\r
                        <parameter name="houseId" type="java.lang.String" />\r
                        <parameter name="successRecipient" type="java.lang.String" />\r
                        <parameter name="targetPathType" type="java.lang.String" />\r
@@ -24,6 +24,7 @@
                        <variable name="targetPath" type="java.lang.String" />\r
                        <variable name="targetNamePattern" type="java.lang.String" />\r
                        <variable name="useNexioTarget" type="java.lang.Boolean" />\r
+                       <variable name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
                </variables>\r
        </declarations>\r
        <commands>\r
@@ -56,6 +57,9 @@
                                <input>\r
                                        <parameter name="targetPathType" />\r
                                </input>\r
+                               <input>\r
+                                       <parameter name="archivedMedia" />\r
+                               </input>\r
                        </inputs>\r
                        <outputs>\r
                                <output>\r
                                </input>\r
                        </inputs>\r
                </calljobstep>\r
+               <calljobstep type="user.jobengine.server.steps.MXFCutterStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="archivedMedia" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="targetPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="targetNamePattern" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="successRecipient" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="killDateDays" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="localRetrievePath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="globalRetrievePath" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="useNexioTarget" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="nexioAgency" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="nexioPort" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="nexioUserName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="nexioPassword" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
        </commands>\r
 </jobtemplate>
\ No newline at end of file
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 4ad4442cebc6c5d5e59a842f4b9ae231da3ff2bc..67536a7a32d9813afee2ca5e961509d23e235960 100644 (file)
@@ -2,6 +2,7 @@ package user.jobengine.server.steps;
 \r
 import java.io.File;\r
 import java.io.IOException;\r
+import java.io.OutputStream;\r
 import java.io.StringWriter;\r
 import java.nio.file.Files;\r
 import java.nio.file.Path;\r
@@ -23,6 +24,7 @@ import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
+import org.apache.commons.net.ftp.FTPClient;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
@@ -31,6 +33,8 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;\r
 \r
 import user.commons.CalendarUtils;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.FtpDirectoryLister;\r
 \r
 public class EscortFiles {\r
        private static final Logger logger = LogManager.getLogger();\r
@@ -51,13 +55,11 @@ public class EscortFiles {
                return dateFormat.format(killDate.getTime());\r
        }\r
        /*\r
-       <?xml version="1.0" encoding="UTF-16"?>\r
-       <ID extendedId="aaaaaaa">\r
-               <KillDate>02-02-2018</KillDate>\r
-               <ExtendedDescription>TEST TEST</ExtendedDescription>\r
-               <ExtendedAgency>AGENT AGENT</ExtendedAgency>\r
-       </ID>\r
-       */\r
+        * <?xml version="1.0" encoding="UTF-16"?> <ID extendedId="aaaaaaa">\r
+        * <KillDate>02-02-2018</KillDate> <ExtendedDescription>TEST\r
+        * TEST</ExtendedDescription> <ExtendedAgency>AGENT AGENT</ExtendedAgency>\r
+        * </ID>\r
+        */\r
 \r
        private static String composeKillDateFileName(String fileName, int days) {\r
                return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days));\r
@@ -71,7 +73,8 @@ public class EscortFiles {
                Files.write(xmlPath, content.getBytes());\r
        }\r
 \r
-       public static byte[] createNEXIOKillDateFile(String fileName, Date killDate, String description, String agency) throws Exception {\r
+       public static byte[] createNEXIOKillDateFile(String fileName, Date killDate, String description, String agency)\r
+                       throws Exception {\r
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();\r
                DocumentBuilder db = dbf.newDocumentBuilder();\r
                DOMImplementation impl = db.getDOMImplementation();\r
@@ -85,7 +88,8 @@ public class EscortFiles {
                }\r
 \r
                if (StringUtils.isNotBlank(description))\r
-                       root.appendChild(xmlDocument.createElement(EXTENDEDDESCRIPTION)).appendChild(xmlDocument.createTextNode(description));\r
+                       root.appendChild(xmlDocument.createElement(EXTENDEDDESCRIPTION))\r
+                                       .appendChild(xmlDocument.createTextNode(description));\r
                if (StringUtils.isNotBlank(agency))\r
                        root.appendChild(xmlDocument.createElement(EXTENDEDAGENCY)).appendChild(xmlDocument.createTextNode(agency));\r
                xmlDocument.appendChild(root);\r
@@ -93,7 +97,8 @@ public class EscortFiles {
                DOMSource domSource = new DOMSource(xmlDocument);\r
                TransformerFactory tf = TransformerFactory.newInstance();\r
                Transformer transformer = tf.newTransformer();\r
-               //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");\r
+               // transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,\r
+               // "yes");\r
                transformer.setOutputProperty(OutputKeys.METHOD, "xml");\r
                transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16");\r
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
@@ -123,7 +128,7 @@ public class EscortFiles {
                        try {\r
                                Files.createDirectories(filePath, attr);\r
                        } catch (Exception e) {\r
-                               //logger.catching(e);\r
+                               // logger.catching(e);\r
                                try {\r
                                        Files.createDirectory(filePath);\r
                                } catch (Exception e1) {\r
@@ -138,4 +143,33 @@ public class EscortFiles {
                Path statusPath = Paths.get(filePath, folderName);\r
                ensureUNCFolder(statusPath);\r
        }\r
+\r
+       public static void setNEXIOKillDate(int killDateDays, String targetFileName, String nexioAgency, StoreUri targetUri)\r
+                       throws Exception {\r
+               OutputStream outStream = null;\r
+               try {\r
+                       FTPClient targetFTP = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
+                       Calendar killDate = CalendarUtils.createCalendar(new Date());\r
+                       killDate.add(Calendar.DAY_OF_YEAR, killDateDays);\r
+                       if (targetFileName.toLowerCase().contains(".mxf"))\r
+                               targetFileName = targetFileName.substring(0, targetFileName.lastIndexOf('.'));\r
+                       byte[] killDateFile = EscortFiles.createNEXIOKillDateFile(targetFileName, killDate.getTime(), null,\r
+                                       nexioAgency);\r
+                       String xml = targetFileName + ".xml";\r
+                       outStream = targetFTP.storeFileStream(xml);\r
+                       if (outStream == null) {\r
+                               throw new NullPointerException(\r
+                                               "Can not open: " + targetFileName.substring(0, targetFileName.lastIndexOf('.')) + ".xml"\r
+                                                               + " Reply:" + targetFTP.getReplyString());\r
+                       }\r
+                       outStream.write(killDateFile);\r
+                       outStream.flush();\r
+               } catch (Exception e) {\r
+                       throw e;\r
+               } finally {\r
+                       if (outStream != null)\r
+                               outStream.close();\r
+                       targetUri.cleanUp();\r
+               }\r
+       }\r
 }\r
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 (file)
index 0000000..bc1767a
--- /dev/null
@@ -0,0 +1,123 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+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.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.ProgressEvent;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class FileCopyStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private IItemManager manager;\r
+       private StoreUri sourceUri;\r
+       private StoreUri targetUri;\r
+       private String sourceFileName;\r
+       private String targetFileName;\r
+       private RemoteStoreProtocol sourceRemoteStoreProtocol;\r
+       private RemoteStoreProtocol targetRemoteStoreProtocol;\r
+       private Store sourceStore;\r
+       private Store targetStore;\r
+       private RemoteFile sourceRemotefile;\r
+       private Marker marker;\r
+\r
+       @StepEntry\r
+       public Object[] execute(String sourceStoreName, String targetStoreName, String sourceFileName, String targetFileName,\r
+                       RemoteStoreProtocol sourceRemoteStoreProtocol, RemoteStoreProtocol targetRemoteStoreProtocol\r
+                       , IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               marker = jobRuntime.getMarker();\r
+               this.sourceFileName = sourceFileName;\r
+               this.targetFileName = targetFileName;\r
+               this.sourceRemoteStoreProtocol = sourceRemoteStoreProtocol;\r
+               this.targetRemoteStoreProtocol = targetRemoteStoreProtocol;\r
+\r
+               setAndCheck(sourceStoreName, targetStoreName, jobEngine);\r
+               \r
+               try {\r
+                       sourceUri.addProgressListener(new IProgressEventListener() {\r
+                               @Override\r
+                               public void progressChanged(ProgressEvent evt) {\r
+                                       jobRuntime.incrementProgress(evt.getProgress());\r
+                               }\r
+                       });\r
+\r
+               RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
+\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       throw e;\r
+               } finally {\r
+                       sourceUri.cleanUp();\r
+                       targetUri.cleanUp();\r
+               }\r
+               \r
+               return null;\r
+       }\r
+       \r
+       private void setAndCheck(String sourceStoreName, String targetStoreName, IJobEngine jobEngine) {\r
+               if (jobEngine == null) {\r
+                       logger.error(marker, "A folyamatkezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing JobEngine reference.");\r
+               }\r
+               manager = jobEngine.getItemManager();\r
+               if (manager == null) {\r
+                       logger.error(marker, "Az adatbáziskezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing ItemManager reference.");\r
+               }\r
+               if (sourceUri == null) {\r
+                       logger.error(marker, "A sourceStoreUri bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+               if (targetUri == null) {\r
+                       logger.error(marker, "A targetStoreUri bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+               if (sourceFileName == null) {\r
+                       logger.error(marker, "A forrás fájlnév bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+               sourceUri = sourceStore.getSourceStoreUri(sourceRemoteStoreProtocol);\r
+               if (targetFileName == null) {\r
+                       logger.error(marker, "A cél fájlnév bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+               targetUri = targetStore.getTargetStoreUri(targetRemoteStoreProtocol);\r
+               if (sourceRemoteStoreProtocol == null) {\r
+                       logger.error(marker, "A forrás másolási protokol bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+               if (targetRemoteStoreProtocol == null) {\r
+                       logger.error(marker, "A cél másolási protokol bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+       }\r
+       \r
+       private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+               int reply = 0;\r
+               logger.info("Transfer clip {}", sourceFileName);\r
+               try {\r
+                       RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       throw e;\r
+               } finally {\r
+                       sourceUri.cleanUp();\r
+                       targetUri.cleanUp();\r
+               }\r
+\r
+       }\r
+}\r
+\r
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 (file)
index 0000000..5b356e4
--- /dev/null
@@ -0,0 +1,133 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+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.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
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class MXFCutterStep extends JobStep {\r
+       private static final String TARGETNAMEPATTERN = "-ARCH-%s";\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private IItemManager manager;\r
+       private StoreUri tempTargetUri;\r
+       private StoreUri tempSourceUri;\r
+       private String sourceFileName;\r
+       private Marker marker;\r
+       private int nexioPort;\r
+       private String nexioUserName, nexioPassword;\r
+       private String nexioHost;\r
+\r
+       protected void checkTargetPath(String targetPath) {\r
+               if (StringUtils.isBlank(targetPath)) {\r
+                       logger.error(marker, "A folyamat 'targetPath' bemeneti paramétere üres.");\r
+                       throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing.");\r
+               }\r
+       }\r
+\r
+       protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException {\r
+               StoreUri result = null;\r
+               result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost);\r
+               result.setPortNumber(nexioPort);\r
+               result.setUserName(nexioUserName);\r
+               result.setPassword(nexioPassword);\r
+\r
+               return result;\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String houseId, String successRecipient,\r
+                       int killDateDays, boolean useNexioTarget, String nexioAgency, Integer nexioPort, String nexioUserName,\r
+                       String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               this.nexioPort = nexioPort;\r
+               this.nexioUserName = nexioUserName;\r
+               this.nexioPassword = nexioPassword;\r
+               nexioHost = System.getProperty("nexio.host");\r
+               marker = jobRuntime.getMarker();\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(),\r
+                                       archivedMedia.getTcOut());\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       // private String getSourceFileName(ArchivedMedia archivedMedia, Store\r
+       // store) {\r
+       // List<MediaFile> mediaFiles = archivedMedia.getMedia().getMediaFiles();\r
+       // if (mediaFiles == null)\r
+       // return null;\r
+       // for (MediaFile mediaFile : mediaFiles) {\r
+       // if (mediaFile.getStore().getId() == store.getId())\r
+       // return mediaFile.getRelativePath();\r
+       // }\r
+       // return null;\r
+       // }\r
+\r
+       private void setAndCheck(ArchivedMedia archivedMedia, String houseId, String targetPath, boolean useNexioTarget,\r
+                       IJobEngine jobEngine) {\r
+               if (jobEngine == null) {\r
+                       logger.error(marker, "A folyamatkezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing JobEngine reference.");\r
+               }\r
+               manager = jobEngine.getItemManager();\r
+               if (manager == null) {\r
+                       logger.error(marker, "Az adatbáziskezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing ItemManager reference.");\r
+               }\r
+               if (archivedMedia == null) {\r
+                       logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+               checkTargetPath(targetPath);\r
+               if (StringUtils.isBlank(houseId)) {\r
+                       logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres.");\r
+                       throw new NullPointerException("System is not configured properly, 'houseId' input parameter missing.");\r
+               }\r
+               Store tsmStore = manager.getSystemStore(false);\r
+               if (tsmStore == null) {\r
+                       logger.error(marker, "A TSM rendszer beállítás nem elérhető.");\r
+                       throw new NullPointerException("System is not configured properly, missing TSM Store.");\r
+               }\r
+\r
+               tempSourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, targetPath);\r
+               if (tempSourceUri == null) {\r
+                       logger.error(marker, "A TSM rendszer beállítás paraméterei nem elérhetőek.");\r
+                       throw new NullPointerException("System is not configured properly, missing TSM StoreUri.");\r
+               }\r
+               tempTargetUri = createTargetUri(manager, targetPath);\r
+               // sourceFileName = getSourceFileName(archivedMedia, tsmStore);\r
+               if (sourceFileName == null) {\r
+                       logger.error(marker, "Adatbázis bejegyzés hiba, a visszatöltendő fájl neve nem található.");\r
+                       throw new NullPointerException("Database error, missing MediaFile 'relativePath'.");\r
+               }\r
+       }\r
+}\r
index 1338315b5b1252e374da259f73c9ceffec2bd082..8cb0ed4edacbf515d5dff80d4a69da230d174833 100644 (file)
@@ -14,6 +14,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 \r
+import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
@@ -26,31 +27,38 @@ public class OutputPathAndNameSelectorStep extends JobStep {
 \r
        private Marker marker;\r
 \r
-       private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder,\r
-                       String octopusOutputFolder, String genericOutputFolder, String houseId, String targetPathType) {\r
+       private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder,\r
+                       String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String houseId,\r
+                       String targetPathType) {\r
                if (StringUtils.isBlank(localRetrievePath)) {\r
                        logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'localRetrievePath' input parameter missing.");\r
                }\r
                if (StringUtils.isBlank(materialOutputFolder)) {\r
                        logger.error(marker, "A folyamat 'materialOutputFolder' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'materialOutputFolder' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'materialOutputFolder' input parameter missing.");\r
                }\r
                if (StringUtils.isBlank(promoOutputFolder)) {\r
                        logger.error(marker, "A folyamat 'promoOutputFolder' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'promoOutputFolder' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'promoOutputFolder' input parameter missing.");\r
                }\r
                if (StringUtils.isBlank(advertisementOutputFolder)) {\r
                        logger.error(marker, "A folyamat 'advertisementOutputFolder' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'advertisementOutputFolder' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'advertisementOutputFolder' input parameter missing.");\r
                }\r
                if (StringUtils.isBlank(octopusOutputFolder)) {\r
                        logger.error(marker, "A folyamat 'octopusOutputFolder' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'octopusOutputFolder' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'octopusOutputFolder' input parameter missing.");\r
                }\r
                if (StringUtils.isBlank(genericOutputFolder)) {\r
                        logger.error(marker, "A folyamat 'genericOutputFolder' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'genericOutputFolder' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'genericOutputFolder' input parameter missing.");\r
                }\r
                if (StringUtils.isBlank(houseId)) {\r
                        logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres.");\r
@@ -58,36 +66,44 @@ public class OutputPathAndNameSelectorStep extends JobStep {
                }\r
                if (StringUtils.isBlank(targetPathType)) {\r
                        logger.error(marker, "A folyamat 'targetPathType' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'targetPathType' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'targetPathType' input parameter missing.");\r
                }\r
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder,\r
-                       String octopusOutputFolder, String genericOutputFolder, String onlineOutputFolder, String houseId, String targetPathType, IJobEngine jobEngine,\r
-                       IJobRuntime jobRuntime) throws IOException {\r
+       public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder,\r
+                       String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder,\r
+                       String onlineOutputFolder, String houseId, String targetPathType, ArchivedMedia archivedMedia,\r
+                       IJobEngine jobEngine, IJobRuntime jobRuntime) throws IOException {\r
                marker = jobRuntime.getMarker();\r
-               check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, houseId,\r
-                               targetPathType);\r
+               check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder,\r
+                               octopusOutputFolder, genericOutputFolder, houseId, targetPathType);\r
                Object[] result = null;\r
                switch (Integer.parseInt(targetPathType)) {\r
                case 0:\r
-                       String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder,\r
-                                       houseId);\r
-                       return localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime);\r
+                       String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder,\r
+                                       octopusOutputFolder, genericOutputFolder, houseId, archivedMedia);\r
+                       result = localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime);\r
                case 1:\r
-                       return localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime);\r
+                       result = localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime);\r
                case 2:\r
-                       return new Object[] { null, houseId, true };\r
+\r
+                       if (archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null)\r
+                               result = new Object[] { genericOutputFolder, houseId, true };\r
+                       else\r
+                               result = new Object[] { null, houseId, true };\r
                }\r
                return result;\r
        }\r
 \r
-       private String getFolderById(String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder,\r
-                       String genericOutputFolder, String houseId) {\r
+       private String getFolderById(String materialOutputFolder, String promoOutputFolder,\r
+                       String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String houseId,\r
+                       ArchivedMedia archivedMedia) {\r
                String id = houseId.toUpperCase();\r
                MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id);\r
                String result = null;\r
+\r
                switch (mdType) {\r
                case Generic:\r
                        result = genericOutputFolder;\r
@@ -126,14 +142,17 @@ public class OutputPathAndNameSelectorStep extends JobStep {
                return result[0];\r
        }\r
 \r
-       private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, IJobRuntime jobRuntime) throws IOException {\r
+       private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId,\r
+                       IJobRuntime jobRuntime) throws IOException {\r
                String id = houseId.toUpperCase();\r
                String targetPath = getPossiblePath(id, Paths.get(localRetrievePath, outputFolder, id)).toString();\r
                String targetNamePattern = houseId + TARGETNAMEPATTERN;\r
                try {\r
                        EscortFiles.ensureUNCFolder(Paths.get(targetPath));\r
                } catch (Exception e) {\r
-                       logger.error(jobRuntime.getMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage());\r
+                       logger.error(jobRuntime.getMarker(),\r
+                                       "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath,\r
+                                       e.getMessage());\r
                        throw e;\r
                }\r
                return new Object[] { targetPath, targetNamePattern, false };\r
index 49c9503ecdd3cde0b0d22274b9a47e31707e8893..4b210e92595e7e24f2648373cf1a004c5a2bc2e0 100644 (file)
@@ -1,14 +1,6 @@
 package user.jobengine.server.steps;\r
 \r
-import java.io.OutputStream;\r
-import java.util.Calendar;\r
-import java.util.Date;\r
-\r
-import org.apache.commons.net.ftp.FTPClient;\r
-\r
-import user.commons.CalendarUtils;\r
 import user.commons.StoreUri;\r
-import user.commons.remotestore.FtpDirectoryLister;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Media;\r
@@ -23,31 +15,10 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep {
        private String nexioAgency;\r
 \r
        @Override\r
-       protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws Exception {\r
+       protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName)\r
+                       throws Exception {\r
                if (useNexioTarget) {\r
-                       OutputStream outStream = null;\r
-                       try {\r
-                               FTPClient targetFTP = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
-                               Calendar killDate = CalendarUtils.createCalendar(new Date());\r
-                               killDate.add(Calendar.DAY_OF_YEAR, killDateDays);\r
-                               if (targetFileName.toLowerCase().contains(".mxf"))\r
-                                       targetFileName = targetFileName.substring(0, targetFileName.lastIndexOf('.'));\r
-                               byte[] killDateFile = EscortFiles.createNEXIOKillDateFile(targetFileName, killDate.getTime(), null, nexioAgency);\r
-                               String xml = targetFileName + ".xml";\r
-                               outStream = targetFTP.storeFileStream(xml);\r
-                               if (outStream == null) {\r
-                                       throw new NullPointerException(\r
-                                                       "Can not open: " + targetFileName.substring(0, targetFileName.lastIndexOf('.')) + ".xml" + " Reply:" + targetFTP.getReplyString());\r
-                               }\r
-                               outStream.write(killDateFile);\r
-                               outStream.flush();\r
-                       } catch (Exception e) {\r
-                               throw e;\r
-                       } finally {\r
-                               if (outStream != null)\r
-                                       outStream.close();\r
-                               targetUri.cleanUp();\r
-                       }\r
+                       EscortFiles.setNEXIOKillDate(killDateDays, targetFileName, nexioAgency, targetUri);\r
                } else {\r
                        super.afterRestore(targetUri, targetPath, killDateDays, targetFileName);\r
                }\r
@@ -60,7 +31,8 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep {
                        newTargetName = targetName.substring(0, targetName.lastIndexOf('.'));\r
                if (useNexioTarget)\r
                        if (targetURI.fileExists(newTargetName + ".mxf"))\r
-                               throw new Exception(String.format("%s-The newly created file name is existed.", getClass().getSimpleName()));\r
+                               throw new Exception(\r
+                                               String.format("%s-The newly created file name is existed.", getClass().getSimpleName()));\r
        }\r
 \r
        @Override\r
@@ -84,9 +56,10 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep {
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays,\r
-                       String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, String nexioAgency, Integer nexioPort, String nexioUserName,\r
-                       String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+       public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient,\r
+                       int killDateDays, String localRetrievePath, String globalRetrievePath, boolean useNexioTarget,\r
+                       String nexioAgency, Integer nexioPort, String nexioUserName, String nexioPassword, IJobEngine jobEngine,\r
+                       IJobRuntime jobRuntime) throws Exception {\r
                this.useNexioTarget = useNexioTarget;\r
                this.nexioAgency = nexioAgency;\r
                this.nexioPort = nexioPort;\r
@@ -101,17 +74,19 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep {
                        throw new NullPointerException("System is not configured properly, 'nexioPort' input parameter missing.");\r
                }\r
                if (nexioUserName == null) {\r
-                       throw new NullPointerException("System is not configured properly, 'nexioUserName' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'nexioUserName' input parameter missing.");\r
                }\r
                if (nexioPassword == null) {\r
-                       throw new NullPointerException("System is not configured properly, 'nexioPassword' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'nexioPassword' input parameter missing.");\r
                }\r
                if (nexioAgency == null) {\r
                        throw new NullPointerException("System is not configured properly, 'nexioAgency' input parameter missing.");\r
                }\r
 \r
-               return super.execute(mediaCubeMedia, targetPath, targetNamePattern, successRecipient, killDateDays, localRetrievePath, globalRetrievePath, jobEngine,\r
-                               jobRuntime);\r
+               return super.execute(mediaCubeMedia, targetPath, targetNamePattern, successRecipient, killDateDays,\r
+                               localRetrievePath, globalRetrievePath, jobEngine, jobRuntime);\r
        }\r
 \r
 }\r
index 72614a7f61c870119e6584b0376385414ac46e49..c77a6241dce534b4c4c15cc839f714318e329e36 100644 (file)
@@ -5,7 +5,7 @@
                                                <div id="kicsidiv" height="100%" width="100%">\r
                                    <!-- Keresés menü -->\r
                                    <hbox width="100%">\r
-                                               <button id="sback" onClick="@command('onSrcBack')" image="/img/baseline_arrow_back_black_18dp.png">\r
+                                               <button id="sback" onClick="@command('onBack')" image="/img/baseline_arrow_back_black_18dp.png">\r
                                                        <attribute w:name="onClick"><![CDATA[\r
                                                                var ss = zk.Widget.$(jq('$sourceSearch')),\r
                                                                val = "";\r
                                                                ss.smartUpdate('value', val);\r
                                                        ]]></attribute>\r
                                                </button>\r
-                                               <textbox id="sourceSearch" value="@bind(vm.searchText)" onOK="@command('refresh')" />\r
-                                               \r
-       \r
-                                               <!-- button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" / -->\r
-                                               <button id="resetSSearch" image="/img/baseline_close_black_18dp.png" onClick="@command('clearSrcFilter')">\r
+                                               <textbox id="sourceSearch" value="@bind(vm.searchText)" onOK="@command('doSearch')" />\r
+                                               <button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" />\r
+                                               <button id="resetSSearch" image="/img/baseline_close_black_18dp.png" onClick="@command('clearFilter')">\r
                                                        <attribute w:name="onClick"><![CDATA[\r
                                                                var ss = zk.Widget.$(jq('$sourceSearch')),\r
                                                                val = "";\r
@@ -28,9 +26,9 @@
                                                <button id="refreshS" image="/img/baseline_refresh_black_18dp.png" onClick="@command('refresh')"/>\r
                                        </hbox>\r
                                        <!-- Forrás file lista -->\r
-                                       <listbox id="srcbox" vflex="true" model="@load(vm.srcFiles)" multiple="false" checkmark="true" \r
+                                       <listbox id="srcbox" vflex="true" model="@load(vm.files)" multiple="false" checkmark="true" \r
                                                    oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" style="border: none; background: #e3e3e3 !important;"\r
-                                                    ctrlKeys="#bak" onCtrlKey="@command('onSrcBack')" onSelect="@command('selectedItemChanged')"\r
+                                                    ctrlKeys="#bak" onCtrlKey="@command('onBack')" onSelect="@command('selectedItemChanged')"\r
                                                     onAfterRender="srcbox.focus()">\r
                                                <listhead>\r
                                                        <listheader label="" sort="auto(isFolder)" width="8%" />\r
@@ -41,8 +39,7 @@
                                                </listhead>\r
 \r
                                                <template name="model">\r
-                                                       <!-- listitem onDoubleClick="@command('onSourceDoubleClick',selectedItem=each)" -->\r
-                                                       <listitem onDoubleClick="@command('onSourceDoubleClick')">\r
+                                                       <listitem onDoubleClick="@command('onDoubleClick',selectedItem=each)">\r
                                                                <attribute w:name="onDoubleClick"><![CDATA[\r
                                                                        var ss = zk.Widget.$(jq('$sourceSearch')),\r
                                                                        val = "";\r
@@ -58,7 +55,7 @@
                                                                \r
                                                                <listcell>\r
                                                                        <label value="@load(each.name)" visible="${!each.isFolder}" />\r
-                                                                       <a label="@load(each.name)" visible="${each.isFolder}" onClick="@command('onSourceClick',selectedItem=each)">\r
+                                                                       <a label="@load(each.name)" visible="${each.isFolder}" onClick="@command('onDoubleClick',selectedItem=each)">\r
                                                                                <attribute w:name="onClick"><![CDATA[\r
                                                                                        var ss = zk.Widget.$(jq('$sourceSearch')),\r
                                                                                        val = "";\r
index d1b9f3349e17cee4809f98813a3f3f89cdca99f1..e1d69fc6aa69cad5bfdb18596dcc6d0ceba4729d 100644 (file)
@@ -28,11 +28,15 @@ public class DirectoryListModel {
        private String searchText;\r
 \r
        public void setSourceList() throws Exception {\r
+               //files = new ListModelList<>(filesCopy);\r
+               //files = new ListModelList<>(uri.getRemoteFiles());\r
+               files.clear();\r
+               files.addAll(uri.getRemoteFiles());\r
                filesCopy = new ArrayList<>(files);\r
-               files = new ListModelList<>(filesCopy);\r
        }\r
 \r
-       public void changeSrcDirectory(RemoteFile selectedFolder) throws Exception {\r
+       public void changeDirectory(RemoteFile selectedFolder) throws Exception {\r
+               setSearchText(null);\r
                if (uri.getCurrentPath() == null){\r
                        uri.setCurrentPath(selectedFolder.getName());\r
                }else{\r
@@ -47,6 +51,11 @@ public class DirectoryListModel {
                Set<RemoteFile> selection = files.getSelection();\r
                logger.info("Selected: {}", selection.size());\r
        }\r
+       \r
+       @Command\r
+       public boolean notSelected (){\r
+               return files.getSelection().size() == 0;\r
+       }\r
 \r
        @Init\r
        public void init() {\r
@@ -55,7 +64,7 @@ public class DirectoryListModel {
                        config = JSONConfig.read(key, MaestroConfig.class);\r
                        uri = config.getSourceStoreUri();\r
 \r
-                       files = new ListModelList<>(uri.getRemoteFiles()); \r
+                       files = new ListModelList<>(); \r
                        setSourceList();\r
                } catch (Exception e) {\r
                        logger.error("A forrás file -ok nem elérhetőek: {}", e.getMessage());\r
@@ -63,69 +72,85 @@ public class DirectoryListModel {
        }\r
 \r
        @Command\r
-       @NotifyChange("srcFiles")\r
-       public void onSourceDoubleClick() {\r
-//             if (selectedSource.getIsFolder()){\r
-//                     try {\r
-//                             \r
-//                             changeSrcDirectory(selectedSource);\r
-//                     } catch (Exception e) {\r
-//                             logger.error("A forrás file -ok nem elérhetőek: {}", e);\r
-//                     }\r
-//             }\r
+       @NotifyChange({"files","searchText"})\r
+       public void onDoubleClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
+               if (selectedItem.getIsFolder()){\r
+                       try {\r
+                               \r
+                               changeDirectory(selectedItem);\r
+                       } catch (Exception e) {\r
+                               logger.error("A forrás file -ok nem elérhetőek: {}", e);\r
+                       }\r
+               }\r
        }\r
-       \r
+\r
        @Command\r
-       @NotifyChange("srcFiles")\r
-       public void onSourceClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
-               //selectedSource = selectedItem;\r
-               onSourceDoubleClick();\r
+       @NotifyChange({"files","searchText"})\r
+    public void doSearch() throws Exception {\r
+               if (searchText == null || searchText == ""){\r
+                       files.clear();\r
+                       files.addAll(filesCopy);\r
+               }else{          \r
+                       files.clear();\r
+                       for (int i=0;i<filesCopy.size();i++){\r
+                               if (filesCopy.get(i).getName().contains(searchText)){\r
+                                       files.add(filesCopy.get(i));\r
+                               }\r
+                       }\r
+               }\r
        }\r
-\r
+       \r
        @Command\r
-    @NotifyChange("srcFiles")\r
+    @NotifyChange("files")\r
     public void refresh() throws Exception {\r
                if (searchText == null || searchText == ""){\r
-                       setSourceList();\r
+                       files.clear();\r
+                       files.addAll(uri.getRemoteFiles());\r
                }else{          \r
                        files.clear();\r
-                       for (int i=0;i<uri.getRemoteFiles().size();i++){\r
-                               if (uri.getRemoteFiles().get(i).getName().contains(searchText)){\r
-                                       files.add(uri.getRemoteFiles().get(i));\r
+                       //List<RemoteFile> currList = new ArrayList<>; \r
+                       List<RemoteFile> currList =     uri.getRemoteFiles();\r
+                       for (int i=0;i<currList.size();i++){\r
+                               if (currList.get(i).getName().contains(searchText)){\r
+                                       files.add(currList.get(i));\r
                                }\r
                        }\r
                }\r
        }\r
 \r
        @Command\r
-    @NotifyChange("srcFiles")\r
-    public void clearSrcFilter() throws Exception {\r
-               files = new ListModelList<>(filesCopy);\r
+    @NotifyChange("files")\r
+    public void clearFilter() throws Exception {\r
+               //files = new ListModelList<>(filesCopy);\r
+               setSearchText(null);\r
+               files.clear();\r
+               files.addAll(filesCopy);\r
     }\r
        \r
-       public StoreUri getSourceUri() {\r
+       public StoreUri getUri() {\r
                return uri;\r
        }\r
 \r
-       public void setSourceUri(StoreUri sourceUri) {\r
-               this.uri = sourceUri;\r
+       public void setUri(StoreUri uri) {\r
+               this.uri = uri;\r
        }\r
 \r
-       public List<RemoteFile> getSrcFiles() {\r
+       public List<RemoteFile> getFiles() {\r
                return files;\r
        }\r
 \r
-       public Store getSourceStore() {\r
+       public Store getStore() {\r
                return store;\r
        }\r
 \r
-       public void setSourceStore(Store sourceStore) {\r
-               this.store = sourceStore;\r
+       public void setStore(Store store) {\r
+               this.store = store;\r
        }\r
 \r
        @Command\r
-       @NotifyChange("srcFiles")\r
-       public void onSrcBack() throws Exception{\r
+       @NotifyChange({"files","searchText"})\r
+       public void onBack() throws Exception{\r
+               setSearchText(null);\r
                if (uri.getCurrentPath() != null){\r
                        if (uri.getCurrentPath().contains("/")){\r
                                uri.setCurrentPath(uri.getCurrentPath().substring(0, uri.getCurrentPath().lastIndexOf("/")));\r
@@ -145,12 +170,12 @@ public class DirectoryListModel {
        }\r
 \r
 \r
-       public List<RemoteFile> getsrcFilesCopy() {\r
+       public List<RemoteFile> getFilesCopy() {\r
                return filesCopy;\r
        }\r
 \r
-       public void setsrcFilesCopy(List<RemoteFile> srcFilesCopy) {\r
-               this.filesCopy = srcFilesCopy;\r
+       public void setFilesCopy(List<RemoteFile> filesCopy) {\r
+               this.filesCopy = filesCopy;\r
        }\r
 \r
        public String getSearchText() {\r
index 748b8534cf29d7da0eab21213aa6357c7f2b66ea..7affae7bafe9b85c8379d6f238413003ae483b13 100644 (file)
 package user.jobengine.zk.model;\r
 \r
-import java.util.ArrayList;\r
-import java.util.LinkedHashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
-import org.zkoss.bind.annotation.BindingParam;\r
-import org.zkoss.bind.annotation.Command;\r
 import org.zkoss.bind.annotation.Init;\r
-import org.zkoss.bind.annotation.NotifyChange;\r
-import org.zkoss.zul.ListModelList;\r
 \r
-import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
 import user.commons.config.JSONConfig;\r
-import user.jobengine.db.Store;\r
-import user.jobengine.server.IJobEngine;\r
 \r
 public class MaestroModel {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private Store sourceStore = new Store();\r
-       private Store targetStore = new Store();\r
-       private ListModelList<RemoteFile> srcFiles;\r
-       private List<RemoteFile> srcFilesCopy;\r
-       private List<RemoteFile> trgFiles;\r
-       private RemoteFile selectedTarget;\r
        private StoreUri sourceUri;\r
-       private StoreUri targetUri0;\r
-       private StoreUri targetUri1;\r
        private MaestroConfig sourceConfig = null;\r
-       //private MaestroConfig targetConfig = null;\r
-       private List<MaestroTarget> targetList = null;\r
-       private static final String PROGRAM = "Műsor";\r
-       private static final String PROMO = "Promó";\r
-       private static final String AD = "Reklám";\r
-       private String[] topTypeFilterNames;\r
-       private Map<String, TypeFilter> typeFilters;\r
-       private IJobEngine jobEngine;\r
-       private FileSizeConverter fileSizeConverter = new FileSizeConverter();\r
-       private String[] jobs = new String[] { "Job1", "Job2", "Job3" };\r
-       private String searchText;\r
-\r
-       public void setSourceList() throws Exception {\r
-               srcFilesCopy = new ArrayList<>(srcFiles);\r
-               srcFiles = new ListModelList<>(srcFilesCopy);\r
-       }\r
-\r
-       public void changeSrcDirectory(RemoteFile selectedFolder) throws Exception {\r
-               if (sourceUri.getCurrentPath() == null){\r
-                       sourceUri.setCurrentPath(selectedFolder.getName());\r
-               }else{\r
-                       sourceUri.setCurrentPath(sourceUri.getCurrentPath() + "/" + selectedFolder.getName());\r
-               }\r
-\r
-               setSourceList();\r
-               //srcFiles.clear();\r
-               //srcFiles.addAll(sourceUri.getRemoteFiles());\r
-       }\r
-       \r
-       public void changeTrgDirectory(RemoteFile selectedFolder) throws Exception {\r
-       /*      if (targetUri.getCurrentPath() == null){\r
-                       targetUri.setCurrentPath(selectedFolder.getName());\r
-               }else{\r
-                       targetUri.setCurrentPath(targetUri.getCurrentPath() + "/" + selectedFolder.getName());\r
-               }\r
-\r
-               trgFiles.clear();\r
-               getTargetList();\r
-       */\r
-       }\r
-       \r
-       public void loadTargets(RemoteFile selectedFolder) throws Exception {\r
-       /*      targetUri.setCurrentPath(targetUri.getUri() + "/" + selectedFolder.getName());\r
-               trgFiles = targetUri.getRemoteFiles();\r
-       */\r
-       }\r
-       \r
-       public void getTargetList()  throws Exception {\r
-               /*trgFiles.clear();\r
-               targetList = sourceConfig.getTargets();\r
-               for(MaestroTarget mt : targetList){\r
-                       targetUri = mt.getStoreUri();\r
-                       trgFiles.addAll(targetUri.getRemoteFiles());\r
-               }\r
-               Collections.sort(trgFiles, new Comparator<RemoteFile>() {\r
-                         @Override\r
-                         public int compare(RemoteFile r1, RemoteFile r2) {\r
-                           return ((r1.getIsFolder() ? "0" : "1")+ r1.getName()).compareTo(((r2.getIsFolder() ? "0" : "1")+ r2.getName()));\r
-                         }\r
-                       });\r
-               */\r
-       }\r
-       \r
-       @Command\r
-       public void selectedItemChanged (){\r
-               Set<RemoteFile> selection = srcFiles.getSelection();\r
-               logger.info("Selected: {}", selection.size());\r
-       }\r
 \r
        @Init\r
        public void init() {\r
-               typeFilters = new LinkedHashMap<>();\r
-               addTypeFilter(TypeFilter.as(PROGRAM, "RED200", "ic_language_black_18dp.png"));\r
-               addTypeFilter(TypeFilter.as(PROMO, "RED100", "ic_perm_camera_mic_black_18dp.png"));\r
-               addTypeFilter(TypeFilter.as(AD, "TEAL200", "ic_theaters_black_18dp.png"));\r
-               setTopTypeFilterNames(new String[] { PROGRAM, PROMO, AD });\r
 \r
                String message = "A forrás file -ok nem elérhetőek: {}";\r
                try {\r
                        String key = "jobengine.maestro.config";\r
                        sourceConfig = JSONConfig.read(key, MaestroConfig.class);\r
                        sourceUri = sourceConfig.getSourceStoreUri();\r
-                       //sourceConfig.getTargets().get(0).getStoreUri()\r
-                       srcFiles = new ListModelList<>(sourceUri.getRemoteFiles()); \r
-                       setSourceList();\r
-                       targetUri0 = sourceConfig.getTargets().get(0).getStoreUri();\r
-                       targetUri1 = sourceConfig.getTargets().get(1).getStoreUri();\r
-\r
-                       //target files\r
-                       //message = "A cél file -ok nem elérhetőek: {}";\r
-                       //trgFiles = new ArrayList<RemoteFile>();\r
-                       //getTargetList();\r
                } catch (Exception e) {\r
                        logger.error(message, e.getMessage());\r
                }\r
        }\r
-\r
-       @Command\r
-       @NotifyChange("srcFiles")\r
-       public void onSourceDoubleClick() {\r
-//             if (selectedSource.getIsFolder()){\r
-//                     try {\r
-//                             \r
-//                             changeSrcDirectory(selectedSource);\r
-//                     } catch (Exception e) {\r
-//                             logger.error("A forrás file -ok nem elérhetőek: {}", e);\r
-//                     }\r
-//             }\r
-       }\r
-       \r
-       /*@Command\r
-       @NotifyChange("trgFiles")\r
-       public void onTargetDoubleClick() {\r
-               if (selectedTarget.getIsFolder()){\r
-                       try {\r
-                               \r
-                               changeTrgDirectory(selectedTarget);\r
-                       } catch (Exception e) {\r
-                               logger.error("A cél file -ok nem elérhetőek: {}", e);\r
-                       }\r
-               }\r
-       }*/\r
-       \r
-       @Command\r
-       @NotifyChange("srcFiles")\r
-       public void onSourceClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
-               //selectedSource = selectedItem;\r
-               onSourceDoubleClick();\r
-       }\r
-       \r
-       /*@Command\r
-       @NotifyChange("trgFiles")\r
-       public void onTargetClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
-               selectedTarget = selectedItem;\r
-               onTargetDoubleClick();\r
-       }*/\r
-\r
-       @Command\r
-    @NotifyChange("srcFiles")\r
-    public void refresh() throws Exception {\r
-               if (searchText == null || searchText == ""){\r
-                       setSourceList();\r
-               }else{          \r
-                       srcFiles.clear();\r
-                       for (int i=0;i<sourceUri.getRemoteFiles().size();i++){\r
-                               if (sourceUri.getRemoteFiles().get(i).getName().contains(searchText)){\r
-                                       srcFiles.add(sourceUri.getRemoteFiles().get(i));\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       @Command\r
-    @NotifyChange("trgFiles")\r
-    public void changeTrgFilter(@BindingParam("ttext") String ttext) throws Exception {\r
-       /*      trgFiles.clear();\r
-               for (int i=0;i<targetUri.getRemoteFiles().size();i++){\r
-                       if (targetUri.getRemoteFiles().get(i).getName().contains(ttext)){\r
-                               trgFiles.add(targetUri.getRemoteFiles().get(i));\r
-                               //getTargetList();\r
-                       }\r
-               }\r
-       */\r
-    }\r
-\r
-       @Command\r
-    @NotifyChange("srcFiles")\r
-    public void clearSrcFilter() throws Exception {\r
-               srcFiles = new ListModelList<>(srcFilesCopy);\r
-    }\r
-       \r
-       @Command\r
-    @NotifyChange("trgFiles")\r
-    public void clearTrgFilter() throws Exception {\r
-       /*      trgFiles.clear();\r
-               trgFiles.addAll(targetUri.getRemoteFiles());\r
-       */\r
-    }\r
-       \r
-       @Command\r
-       @NotifyChange({ "trgFiles"})\r
-       public void trg1(@BindingParam("state") boolean state ) {\r
-               if (state) {\r
-                       //sourceConfig.getTargets().get(0).getStoreUri().setUri("c:/temp1");\r
-                       sourceConfig.getTargets().get(0).setStoreUri(getTargetUri1());\r
-               }else {\r
-                       //sourceConfig.getTargets().get(0).getStoreUri().setUri("");\r
-                       sourceConfig.getTargets().get(0).setStoreUri(null);\r
-               }\r
-       }\r
-       \r
-       @Command\r
-       @NotifyChange({ "trgFiles"})\r
-       public void trg2(@BindingParam("state") boolean state ) {\r
-               if (state) {\r
-                       //sourceConfig.getTargets().get(1).getStoreUri().setUri("c:/temp2");\r
-                       sourceConfig.getTargets().get(1).setStoreUri(getTargetUri1());\r
-               }else {\r
-                       //sourceConfig.getTargets().get(1).getStoreUri().setUri("");\r
-                       sourceConfig.getTargets().get(1).setStoreUri(null);\r
-               }\r
-       }\r
-\r
        \r
        public StoreUri getSourceUri() {\r
                return sourceUri;\r
@@ -243,150 +32,4 @@ public class MaestroModel {
        public void setSourceUri(StoreUri sourceUri) {\r
                this.sourceUri = sourceUri;\r
        }\r
-       \r
-       public StoreUri getTargetUri0() {\r
-               return targetUri0;\r
-       }\r
-\r
-       public void setTargetUri0(StoreUri targetUri) {\r
-               this.targetUri0 = targetUri;\r
-       }\r
-       \r
-       public StoreUri getTargetUri1() {\r
-               return targetUri1;\r
-       }\r
-\r
-       public void setTargetUri1(StoreUri targetUri) {\r
-               this.targetUri1 = targetUri;\r
-       }\r
-       \r
-       /*public String getTargetUri() {\r
-               return sourceConfig.getSourceStoreUri().getUri();\r
-       }\r
-       \r
-       public void setTargetUri(String targetUri) {\r
-               sourceConfig.getSourceStoreUri().setUri(targetUri);\r
-       }*/\r
-\r
-       public List<RemoteFile> getSrcFiles() {\r
-               return srcFiles;\r
-       }\r
-\r
-       public Store getSourceStore() {\r
-               return sourceStore;\r
-       }\r
-\r
-       public void setSourceStore(Store sourceStore) {\r
-               this.sourceStore = sourceStore;\r
-       }\r
-\r
-       public List<RemoteFile> gettrgFiles() {\r
-               return trgFiles;\r
-       }\r
-\r
-       public void settrgFiles(List<RemoteFile> trgFiles) {\r
-               this.trgFiles = trgFiles;\r
-       }\r
-       \r
-       public String[] getJobs() {\r
-               return jobs;\r
-       }\r
-       \r
-       public void setJobs(String[] jobs) {\r
-               this.jobs = jobs;\r
-       }\r
-\r
-       private void addTypeFilter(TypeFilter typeFilter) {\r
-               typeFilters.put(typeFilter.getName(), typeFilter);\r
-       }\r
-       \r
-       public String[] getTopTypeFilterNames() {\r
-               return topTypeFilterNames;\r
-       }\r
-\r
-       public void setTopTypeFilterNames(String[] topTypeFilterNames) {\r
-               this.topTypeFilterNames = topTypeFilterNames;\r
-       }\r
-       \r
-       public Map<String, TypeFilter> getTypeFilters() {\r
-               return typeFilters;\r
-       }\r
-       \r
-
-       public Store getTargetStore() {\r
-               return targetStore;\r
-       }\r
-\r
-       public void setTargetStore(Store targetStore) {\r
-               this.targetStore = targetStore;\r
-       }\r
-\r
-\r
-       public IJobEngine getJobEngine() {\r
-               return jobEngine;\r
-       }\r
-\r
-       public void setJobEngine(IJobEngine jobEngine) {\r
-               this.jobEngine = jobEngine;\r
-       }\r
-       \r
-       @Command\r
-       @NotifyChange("srcFiles")\r
-       public void onSrcBack() throws Exception{\r
-               if (sourceUri.getCurrentPath() != null){\r
-                       if (sourceUri.getCurrentPath().contains("/")){\r
-                               sourceUri.setCurrentPath(sourceUri.getCurrentPath().substring(0, sourceUri.getCurrentPath().lastIndexOf("/")));\r
-                       }else{\r
-                               sourceUri.setCurrentPath(null);\r
-                       }\r
-                       setSourceList();\r
-               }\r
-       }\r
-       \r
-       @Command\r
-       @NotifyChange("trgFiles")\r
-       public void onTrgBack() throws Exception{\r
-               /*if (targetUri.getCurrentPath() != null){\r
-                       if (targetUri.getCurrentPath().contains("/")){\r
-                               targetUri.setCurrentPath(targetUri.getCurrentPath().substring(0, targetUri.getCurrentPath().lastIndexOf("/")));\r
-                       }else{\r
-                               targetUri.setCurrentPath(null);\r
-                       }\r
-                       trgFiles.clear();\r
-                       trgFiles.addAll(targetUri.getRemoteFiles());\r
-                       clearTrgFilter();\r
-               }*/\r
-       }\r
-\r
-       public FileSizeConverter getFileSizeConverter() {\r
-               return fileSizeConverter;\r
-       }\r
-       \r
-       public void setFileSizeConverter(FileSizeConverter fileSizeConverter) {\r
-               this.fileSizeConverter = fileSizeConverter;\r
-       }\r
-\r
-       public RemoteFile getSelectedTarget() {\r
-               return selectedTarget;\r
-       }\r
-\r
-       public void setSelectedTarget(RemoteFile selectedTarget) {\r
-               this.selectedTarget = selectedTarget;\r
-       }\r
-\r
-       public List<RemoteFile> getsrcFilesCopy() {\r
-               return srcFilesCopy;\r
-       }\r
-\r
-       public void setsrcFilesCopy(List<RemoteFile> srcFilesCopy) {\r
-               this.srcFilesCopy = srcFilesCopy;\r
-       }\r
-\r
-       public String getSearchText() {\r
-               return searchText;\r
-       }\r
-\r
-       public void setSearchText(String searchText) {\r
-               this.searchText = searchText;\r
-       }\r
 }\r