git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Wed, 26 May 2021 19:02:52 +0000 (19:02 +0000)
committervasary.daniel <TFS\vasary.daniel>
Wed, 26 May 2021 19:02:52 +0000 (19:02 +0000)
41 files changed:
server/-product/production/LOCAL/jobs/steps/shared/MetadataType.java [new file with mode: 0644]
server/-product/production/LOCAL/jobs/steps/shared/MetadataTypeDetector.java [new file with mode: 0644]
server/-product/production/LOCAL/jobs/steps/shared/TestLib.java [new file with mode: 0644]
server/-product/production/LOCAL/jobs/steps/shared/TestLib1.java [new file with mode: 0644]
server/user.jobengine.executors/.classpath
server/user.jobengine.executors/.project
server/user.jobengine.executors/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
server/user.jobengine.executors/.settings/org.eclipse.jdt.core.prefs
server/user.jobengine.executors/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0644]
server/user.jobengine.executors/pom.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFile.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFileStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/IntegrationTestStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MediaToolStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareMediaRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareRemoteTranscodeJobParametersStep.java [deleted file]
server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareRemoteTranscodeStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/QueryMissingProxyMediaStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/RemoteJobStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/SaveMediaProxy.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFMpegStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/EscortFiles.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/ItemManagerExtensions.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/MetadataTypeDetector.java
server/user.jobengine.osgi.commons/src/user/commons/MediaCubeFinishMarker.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/LocalDirectoryLister.java
server/user.jobengine.osgi.server/META-INF/MANIFEST.MF
server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java
server/user.mediacube.gui/pages/jobparameters.zul
server/user.mediacube.gui/src/user/jobengine/zk/model/JobListModel.java
server/user.mediacube.gui/src/user/jobengine/zk/model/JobSelectorModel.java
server/user.mediacube.gui/src/user/jobengine/zk/util/SessionUtil.java

diff --git a/server/-product/production/LOCAL/jobs/steps/shared/MetadataType.java b/server/-product/production/LOCAL/jobs/steps/shared/MetadataType.java
new file mode 100644 (file)
index 0000000..0e27bf3
--- /dev/null
@@ -0,0 +1,5 @@
+package user.jobengine.server.steps.shared;\r
+\r
+public enum MetadataType {\r
+       TrafficMaterial, TrafficPromo, TrafficAD, OctopusStory, OctopusPlaceholder, Generic\r
+}\r
diff --git a/server/-product/production/LOCAL/jobs/steps/shared/MetadataTypeDetector.java b/server/-product/production/LOCAL/jobs/steps/shared/MetadataTypeDetector.java
new file mode 100644 (file)
index 0000000..9e9e6be
--- /dev/null
@@ -0,0 +1,49 @@
+package user.jobengine.server.steps.shared;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+\r
+public class MetadataTypeDetector {\r
+\r
+       private static final String HYPHEN = "-";\r
+       private static final String DOT = ".";\r
+\r
+       private static final String REGEXP_TRAFFICMATERIALID = "^M{1}[0-9]{6}[A-Z]{1}";\r
+       private static final String REGEXP_TRAFFICADID = "^R{1}[0-9]{6}[A-Z]{1}";\r
+       private static final String REGEXP_TRAFFICPROMOID = "^P{1}[0-9]{6}[A-Z]{1}";\r
+       private static final String REGEXP_OCTOPUSSTORYID = "^[0-9]+";\r
+       private static final String REGEXP_OCTOPUSPLACEHOLDERID = "^[0-9]+_[0-9]+";\r
+       private static final String REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID = "^[0-9]+_[0-9]+-[0-9]{3}";\r
+\r
+       public static MetadataType GuessMetadataType(String id) {\r
+               if (StringUtils.isBlank(id))\r
+                       return MetadataType.Generic;\r
+               if (id.matches(REGEXP_TRAFFICMATERIALID))\r
+                       return MetadataType.TrafficMaterial;\r
+               if (id.matches(REGEXP_TRAFFICPROMOID))\r
+                       return MetadataType.TrafficPromo;\r
+               if (id.matches(REGEXP_TRAFFICADID))\r
+                       return MetadataType.TrafficAD;\r
+               if (id.matches(REGEXP_OCTOPUSSTORYID))\r
+                       return MetadataType.OctopusStory;\r
+               if (id.matches(REGEXP_OCTOPUSPLACEHOLDERID))\r
+                       return MetadataType.OctopusPlaceholder;\r
+               if (id.matches(REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID))\r
+                       return MetadataType.OctopusPlaceholder;\r
+               return MetadataType.Generic;\r
+       }\r
+\r
+       public static String truncateExtension(String name) {\r
+               String result = name;\r
+               if (result != null && result.contains(DOT))\r
+                       result = result.substring(0, result.lastIndexOf(DOT));\r
+               return result;\r
+       }\r
+\r
+       public static String truncateVersion(String name) {\r
+               String result = name;\r
+               if (result != null && result.contains(HYPHEN))\r
+                       result = result.split(HYPHEN)[0];\r
+               return result;\r
+       }\r
+\r
+}\r
diff --git a/server/-product/production/LOCAL/jobs/steps/shared/TestLib.java b/server/-product/production/LOCAL/jobs/steps/shared/TestLib.java
new file mode 100644 (file)
index 0000000..d12738a
--- /dev/null
@@ -0,0 +1,9 @@
+package user.jobengine.server.steps.shared;\r
+\r
+public class TestLib {\r
+\r
+       public void hello() {\r
+               TestLib1 lib = new TestLib1();\r
+               lib.helo();\r
+       }\r
+}\r
diff --git a/server/-product/production/LOCAL/jobs/steps/shared/TestLib1.java b/server/-product/production/LOCAL/jobs/steps/shared/TestLib1.java
new file mode 100644 (file)
index 0000000..99d47e5
--- /dev/null
@@ -0,0 +1,8 @@
+package user.jobengine.server.steps.shared;\r
+\r
+public class TestLib1 {\r
+\r
+       public void hello() {\r
+               System.out.println("Hello from lib1");\r
+       }\r
+}\r
index 4848249846f9153775ed2f647f17ee59f78163ac..5e01dfaf16bbe5778c38450c94e115e83801f2b1 100644 (file)
@@ -2,6 +2,15 @@
 <classpath>\r
        <classpathentry kind="src" path="src"/>\r
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
-       <classpathentry kind="output" path="bin"/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">\r
+               <attributes>\r
+                       <attribute name="maven.pomderived" value="true"/>\r
+               </attributes>\r
+       </classpathentry>\r
+       <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">\r
+               <attributes>\r
+                       <attribute name="maven.pomderived" value="true"/>\r
+               </attributes>\r
+       </classpathentry>\r
+       <classpathentry kind="output" path="target/classes"/>\r
 </classpath>\r
index 1a808f875c7fcc0e6784eec3ae8ab3e08617fa56..65e764cf453e50828bc5e2a592bcb0a87ede42ae 100644 (file)
                                </dictionary>\r
                        </arguments>\r
                </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.m2e.core.maven2Builder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
        </buildSpec>\r
        <natures>\r
+               <nature>org.eclipse.m2e.core.maven2Nature</nature>\r
                <nature>org.eclipse.jdt.core.javanature</nature>\r
                <nature>org.eclipse.pde.PluginNature</nature>\r
        </natures>\r
diff --git a/server/user.jobengine.executors/.settings/org.eclipse.core.resources.prefs b/server/user.jobengine.executors/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..4824b80
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1\r
+encoding/<project>=UTF-8\r
index ace45ceefb456b3fa957d31f9c54df016ce54e53..39e9a9547224c8e25577883c8311ee321a108f84 100644 (file)
@@ -8,5 +8,9 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate\r
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate\r
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled\r
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning\r
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore\r
+org.eclipse.jdt.core.compiler.release=disabled\r
 org.eclipse.jdt.core.compiler.source=1.8\r
diff --git a/server/user.jobengine.executors/.settings/org.eclipse.m2e.core.prefs b/server/user.jobengine.executors/.settings/org.eclipse.m2e.core.prefs
new file mode 100644 (file)
index 0000000..14b697b
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=\r
+eclipse.preferences.version=1\r
+resolveWorkspaceProjects=true\r
+version=1\r
index 33493a7a3c4a8535a03e6f1a7b80088df8dc98f3..7e76498addd0a3051cd660ef6f2fa426915be42f 100644 (file)
@@ -9,9 +9,15 @@
 <!--           <version>1.0.0</version> -->\r
 <!--   </parent> -->\r
        <modelVersion>4.0.0</modelVersion>\r
+       <groupId>user.jobengine</groupId>       \r
        <artifactId>user.jobengine.executors</artifactId>\r
-       <packaging>eclipse-plugin</packaging>\r
        <version>1.0.0</version>\r
+       <properties>\r
+               <maven.compiler.source>1.8</maven.compiler.source>\r
+               <maven.compiler.target>1.8</maven.compiler.target>\r
+               <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\r
+               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\r
+       </properties>\r
 <!--   <build> -->\r
 <!--           <plugins> -->\r
 <!--                   <plugin> -->\r
index f90415ce5ee3eb0b779923fca6065da4c705eaf2..287a265095fb544e170ad6969ce2098dc77162d9 100644 (file)
@@ -1,72 +1,23 @@
 package user.jobengine.server.steps;\r
 \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
-import org.apache.logging.log4j.MarkerManager;\r
-\r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.FtpDirectoryLister;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.jobengine.server.steps.shared.EscortFiles;\r
 \r
 public class CancelableStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
-       int count = 10;\r
 \r
        @StepEntry\r
-       public Object[] execute(int param) throws Exception {\r
-               try {\r
-\r
-                       Marker marker = MarkerManager.getMarker("MEDIAPROFILE");\r
-                       logger.info(marker, "{}", EscortFiles.DOT_CATCHED);\r
-                       getJobRuntime().setRelated("TESZT" + param);\r
-\r
-                       //                      ftpTest();\r
-\r
-                       //                      if (param == 0)\r
-                       //                              Thread.sleep(5000);\r
-                       //                      if (param == 1)\r
-                       //                              throw new Exception("Error teszt");\r
-\r
-                       for (int i = 0; i < count; i++) {\r
-                               if (getJobRuntime().isWaitingCancel())\r
-                                       break;\r
-\r
-                               Thread.sleep(200);\r
-                               int progress = (i + 1) * 100 / count;\r
-                               setProgress(progress);\r
-                               logger.info(marker, "{}", i);\r
-                       }\r
-               } catch (Exception e) {\r
-                       e.printStackTrace();\r
-                       throw e;\r
+       public Object[] execute() throws Exception {\r
+               logger.info(getMarker(), "Executing");\r
+               for (int i = 0; i < 10; i++) {\r
+                       logger.info(getMarker(), "Executing {}", i);\r
+                       if (getJobRuntime().isWaitingCancel())\r
+                               break;\r
+                       Thread.sleep(100);\r
+                       int progress = (i + 1) * 100 / 10;\r
+                       setProgress(progress);\r
                }\r
-               return new Object[] { param };\r
-       }\r
-\r
-       void ftpTest() throws Exception {\r
-               StoreUri source = null;\r
-               StoreUri target = null;\r
-               try {\r
-                       source = getManager().getStoreUri("MEDIACUBE_UPLOADS", RemoteStoreProtocol.LOCAL);\r
-                       target = getManager().getStoreUri("NEXIO1", RemoteStoreProtocol.FTP);\r
-                       source.addProgressListener(e -> setProgress(e.getProgress()));\r
-                       logger.info("Uploading file PART_TEST.mxf");\r
-                       source.transferFrom(target, "PART_TEST.mxf", "PART_TEST.mxf");\r
-                       FTPClient client = ((FtpDirectoryLister) target.getLister()).connect();\r
-                       logger.info("Renaming file PART_TEST.mxf to RENAME_TEST.mxf");\r
-                       client.rename("PART_TEST.mxf", "RENAME_TEST.mxf");\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
-               } finally {\r
-                       if (target != null)\r
-                               target.cleanUp();\r
-                       if (source != null)\r
-                               source.cleanUp();\r
-               }\r
-\r
+               return null;\r
        }\r
 \r
 }\r
index 6a1d37a191fcb3a75a47a83a576b1ceb45ea404b..3ed0e4f407e052b00bf7768c9cd1a74e7455ba52 100644 (file)
@@ -23,10 +23,7 @@ import org.apache.logging.log4j.LogManager;
 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.RemoteStoreProtocol;\r
-import user.jobengine.db.Store;\r
+import user.jobengine.server.steps.shared.ItemManagerExtensions;\r
 \r
 public class CleanupMountedLocationStep extends JobStep implements FileVisitor<Path> {\r
 \r
@@ -66,7 +63,6 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
 \r
        private Path sourcePath;\r
        private SimpleDateFormat dateFormat;\r
-       private StoreUri tsmStoreUri;\r
        private boolean skipArchiveCheck;\r
 \r
        private Date checkExpiration(List<Path> killDateFiles) {\r
@@ -97,14 +93,6 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
                        throw new NullPointerException(String.format("Directory %s not exists.", sourceFolder));\r
                }\r
 \r
-               Store tsmStore = getManager().getSystemStore(false);\r
-               if (tsmStore == null)\r
-                       throw new NullPointerException("A TSM bejegyzés nem található!");\r
-\r
-               tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
-               if (tsmStoreUri == null)\r
-                       throw new NullPointerException("A TSM forrás elérése nem található!");\r
-\r
                try {\r
                        setProgress(1);\r
                        dateFormat = new SimpleDateFormat(DATEFORMAT);\r
@@ -176,29 +164,6 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
                return result;\r
        }\r
 \r
-       private boolean isArchived(Path filePath) {\r
-               boolean result = false;\r
-               String name = filePath.getFileName().toString();\r
-               String[] tsmName = new String[] { null };\r
-               String query = String.format("SELECT relativepath FROM MEDIAFILE WHERE houseid = '%s'", name);\r
-               getManager().executeQuery(query, rs -> {\r
-                       tsmName[0] = rs.getString("relativepath");\r
-                       return false;\r
-               }, null);\r
-\r
-               if (tsmName[0] != null) {\r
-                       try {\r
-                               RemoteFile remoteFile = tsmStoreUri.getRemoteFile(tsmName[0]);\r
-                               result = remoteFile != null;\r
-                       } catch (Exception e) {\r
-                               logger.error(e.getMessage());\r
-                       } finally {\r
-                               tsmStoreUri.cleanUp();\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-\r
        @Override\r
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {\r
                if (!dir.equals(sourcePath) && isEmpty(dir)) {\r
@@ -247,7 +212,7 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
                        return;\r
 \r
                if (!skipArchiveCheck && filePath.toFile().length() > 0) {\r
-                       if (!isArchived(filePath)) {\r
+                       if (!ItemManagerExtensions.isArchived(getManager(), filePath)) {\r
                                logger.error(marker, "A(z) {} anyag törlésre van kijelölve, de nem található az archívumban.", filePath);\r
                                return;\r
                        }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFile.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteFile.java
new file mode 100644 (file)
index 0000000..539faf7
--- /dev/null
@@ -0,0 +1,22 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+\r
+public class DeleteFile extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(String fileName, StoreUri tempStoreUri) throws Exception {\r
+               try {\r
+                       RemoteFile remoteFile = tempStoreUri.getRemoteFile(fileName);\r
+                       tempStoreUri.delete(remoteFile);\r
+               } catch (Exception e) {\r
+                       logger.warn(getJobRuntime().getSessionMarker(), e.getMessage());\r
+               }\r
+               return null;\r
+       }\r
+}\r
index 7682440ff71215876dd9c5cebd5f1548423aa55b..79734f57f374f4a07732740948beea784ccec2a4 100644 (file)
@@ -8,16 +8,13 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 \r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
 public class DeleteFileStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
        private Marker marker;\r
 \r
        @StepEntry\r
-       public Object[] execute(ArchiveItem archiveItem, boolean isDelete, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               marker = jobRuntime.getSessionMarker();\r
+       public Object[] execute(ArchiveItem archiveItem, boolean isDelete) throws Exception {\r
+               marker = getJobRuntime().getSessionMarker();\r
                if (isDelete) {\r
                        Path filePath = Paths.get(archiveItem.getMediaFile());\r
                        File file = filePath.toFile();\r
index 51bc6103fdb339226f03215d7d47eb0b5fc077be..317edfed9b6ac36c77f1ddb88565df8b5e2669e4 100644 (file)
@@ -1,5 +1,6 @@
 package user.jobengine.server.steps;\r
 \r
+import java.nio.file.Files;\r
 import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
 import java.util.concurrent.CountDownLatch;\r
@@ -11,71 +12,117 @@ import user.commons.ListUtils;
 import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.db.Item;\r
 import user.jobengine.db.Media;\r
+import user.jobengine.server.steps.shared.ItemManagerExtensions;\r
 \r
 public class IntegrationTestStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
+       private ArchivedMedia archivedMedia;\r
 \r
-       @StepEntry\r
-       public Object[] execute() throws Exception {\r
-               try {\r
-                       //test_cancelable(finishLatch);\r
-                       ArchivedMedia archivedMedia = new ArchivedMedia();\r
-                       Media media = getManager().getMedia(15285);\r
-                       Item item = getManager().getItem(media.getItemId());\r
-                       archivedMedia.setItem(item);\r
-                       archivedMedia.setMedia(media);\r
-                       test_retrieve_ondemand(archivedMedia);\r
-                       Path output = Paths.get("/mediacube/data", archivedMedia.getMedia().getHouseId(),\r
-                                       archivedMedia.getMedia().getHouseId() + "-ARCH-" + archivedMedia.getMedia().getMediaFileRealName());\r
-                       if (!output.toFile().exists())\r
-                               throw new Exception("File not exists: " + output);\r
-\r
-                       test_delete_materials(output.getParent().toString());\r
-\r
-                       if (output.toFile().exists())\r
-                               throw new Exception("File exists: " + output);\r
-\r
-               } catch (Exception e) {\r
-                       logger.info(e.getMessage());\r
-                       throw e;\r
-               }\r
-               return null;\r
-       }\r
-\r
-       private void test_cancelable() throws Exception {\r
+       private void _00_test_cancelable() throws Exception {\r
                CountDownLatch finishLatch = new CountDownLatch(1);\r
                getEngine().submit(null, e -> {\r
                        if (e.isRuntimeTerminated())\r
                                finishLatch.countDown();\r
                }, "cancelable.xml", "Test cancelable", ListUtils.asMap("param", 1));\r
                finishLatch.await();\r
+               logger.info("_00_test_cancelable SUCCESS");\r
        }\r
 \r
-       private void test_delete_materials(String source) throws Exception {\r
+       private void _01_test_retrieve_ondemand() throws Exception {\r
+               archivedMedia = new ArchivedMedia();\r
+               Media media = getManager().getMedia(15285);\r
+               Item item = getManager().getItem(media.getItemId());\r
+               archivedMedia.setItem(item);\r
+               archivedMedia.setMedia(media);\r
+\r
                CountDownLatch finishLatch = new CountDownLatch(1);\r
                getEngine().submit(null, e -> {\r
                        if (e.isRuntimeTerminated())\r
                                finishLatch.countDown();\r
-               }, "delete-materials.xml", "Test delete-materials", ListUtils.asMap("sourcePath", source, "skipArchiveCheck", true));\r
+\r
+               }, "retrieve-ondemand.xml", "Test retrieve-ondemand",\r
+                               ListUtils.asMap("globalRetrievePath", "file://10.11.1.100", "localRetrievePath", "/mediacube/data", "materialOutputFolder", "/",\r
+                                               "promoOutputFolder", "/", "advertisementOutputFolder", "/", "octopusOutputFolder", "/", "genericOutputFolder", "/",\r
+                                               "onlineOutputFolder", "/", "killDateDays", -1, "nexioAgency", "ARCHIVE_RESTORE", "nexioPort", 2098, "nexioUserName", "administrator",\r
+                                               "nexioPassword", "system", "archivedMedia", archivedMedia, "successRecipient", "vasary@elgekko.net", "houseId",\r
+                                               archivedMedia.getMedia().getHouseId(), "targetPathType", "0"));\r
+\r
                finishLatch.await();\r
+               Path output = Paths.get("/mediacube/data", archivedMedia.getMedia().getHouseId(),\r
+                               archivedMedia.getMedia().getHouseId() + "-ARCH-" + archivedMedia.getMedia().getMediaFileRealName());\r
+               if (!output.toFile().exists())\r
+                       throw new Exception("File not exists: " + output);\r
+\r
+               logger.info("_01_test_retrieve_ondemand SUCCESS");\r
        }\r
 \r
-       private void test_retrieve_ondemand(ArchivedMedia archivedMedia) throws Exception {\r
+       private void _02_test_archive_material() throws Exception {\r
+               Path input = Paths.get("/mediacube/data", archivedMedia.getMedia().getHouseId(),\r
+                               archivedMedia.getMedia().getHouseId() + "-ARCH-" + archivedMedia.getMedia().getMediaFileRealName());\r
+\r
+               String outputName = "IntegrationTest_" + System.currentTimeMillis() + ".mxf";\r
+               Path ouptput = Paths.get(input.getParent().toString(), outputName);\r
+               Files.copy(input, ouptput);\r
+               if (!ouptput.toFile().exists())\r
+                       throw new Exception("File not exists: " + ouptput);\r
+\r
+               ArchiveItem archiveItem = new ArchiveItem();\r
+               archiveItem.setMediaFile(ouptput.toString());\r
+               archiveItem.setItemHouseId(outputName);\r
+               archiveItem.setItemTitle(outputName);\r
+               archiveItem.setMediaHouseId(outputName);\r
+               archiveItem.setMediaTitle(outputName);\r
+               archiveItem.setMediaType("Generic");\r
 \r
                CountDownLatch finishLatch = new CountDownLatch(1);\r
                getEngine().submit(null, e -> {\r
                        if (e.isRuntimeTerminated())\r
                                finishLatch.countDown();\r
+               }, "archive-material.xml", "Test archive-material", ListUtils.asMap("archiveItem", archiveItem, "killDateDays", 0));\r
+               finishLatch.await();\r
 \r
-               }, "retrieve-ondemand.xml", "Test retrieve-ondemand",\r
-                               ListUtils.asMap("globalRetrievePath", "file://10.11.1.100", "localRetrievePath", "/mediacube/data", "materialOutputFolder", "/",\r
-                                               "promoOutputFolder", "/", "advertisementOutputFolder", "/", "octopusOutputFolder", "/", "genericOutputFolder", "/",\r
-                                               "onlineOutputFolder", "/", "killDateDays", -1, "nexioAgency", "ARCHIVE_RESTORE", "nexioPort", 2098, "nexioUserName", "administrator",\r
-                                               "nexioPassword", "system", "archivedMedia", archivedMedia, "successRecipient", "vasary@elgekko.net", "houseId",\r
-                                               archivedMedia.getMedia().getHouseId(), "targetPathType", "0"));\r
+               if (!ItemManagerExtensions.isArchived(getManager(), ouptput))\r
+                       throw new Exception("File not archived: " + ouptput);\r
+\r
+               Files.delete(ouptput);\r
 \r
+               logger.info("_02_test_archive_material SUCCESS");\r
+       }\r
+\r
+       private void _03_test_delete_materials() throws Exception {\r
+               Path output = Paths.get("/mediacube/data", archivedMedia.getMedia().getHouseId(),\r
+                               archivedMedia.getMedia().getHouseId() + "-ARCH-" + archivedMedia.getMedia().getMediaFileRealName());\r
+               String source = output.getParent().toString();\r
+\r
+               CountDownLatch finishLatch = new CountDownLatch(1);\r
+               getEngine().submit(null, e -> {\r
+                       if (e.isRuntimeTerminated())\r
+                               finishLatch.countDown();\r
+               }, "delete-materials.xml", "Test delete-materials", ListUtils.asMap("sourcePath", source, "skipArchiveCheck", true));\r
                finishLatch.await();\r
 \r
+               if (output.toFile().exists())\r
+                       throw new Exception("File exists: " + output);\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute() throws Exception {\r
+               getJobRuntime().setDescription("_00_test_cancelable");\r
+               _00_test_cancelable();\r
+               setProgress(25);\r
+\r
+               getJobRuntime().setDescription("_01_test_retrieve_ondemand");\r
+               _01_test_retrieve_ondemand();\r
+               setProgress(50);\r
+\r
+               getJobRuntime().setDescription("_02_test_archive_material");\r
+               _02_test_archive_material();\r
+               setProgress(75);\r
+\r
+               getJobRuntime().setDescription("_03_test_delete_materials");\r
+               _03_test_delete_materials();\r
+               setProgress(100);\r
+               return null;\r
        }\r
 \r
 }\r
index c0c56f689e87c8d67e990448ce4b2efc4cc4d6c1..81bea7bdab9b2157737b52d629c509e7ef7268d0 100644 (file)
@@ -5,35 +5,25 @@ import java.nio.file.Paths;
 \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.mediatool.MediaInfo;\r
+import user.commons.mediaarea.MediaArea;\r
 import user.jobengine.db.Media;\r
 \r
 public class MediaToolStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private Marker marker;\r
 \r
        @StepEntry\r
        public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia) throws Exception {\r
-               marker = getSessionMarker();\r
-\r
-               //TODO ez most minden esetben ujranezi\r
-               //              if (mediaCubeMedia.getLength() > 0)\r
-               //                      return null;\r
-\r
                Path filePath = Paths.get(archiveItem.getMediaFile());\r
-               MediaInfo mi = new MediaInfo(filePath);\r
-               try {\r
-                       mi.process();\r
-                       long frames = mi.getFrames();\r
+               if (filePath.toFile().length() != 0) {\r
+                       MediaArea ma = new MediaArea(filePath);\r
+                       ma.process();\r
+                       long frames = ma.getFrameCount();\r
                        if (frames > 0) {\r
+                               logger.info("Media {} length is {}", filePath, frames);\r
                                mediaCubeMedia.setLength(frames);\r
                                getManager().modify(mediaCubeMedia);\r
                        }\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
-                       logger.error(marker, "A '{}' média analizálása sikertelen. A  rendszer üzenete: {}", filePath, e.getMessage());\r
                }\r
                return null;\r
        }\r
index e924672438bdc28b291bd873c644f768363834a3..3708aa3e0179e284baf3c8dd2f04301290f053e4 100644 (file)
@@ -1,5 +1,7 @@
 package user.jobengine.server.steps;\r
 \r
+import java.util.List;\r
+\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
@@ -15,7 +17,10 @@ public class PrepareMediaRestoreStep extends JobStep {
        @StepEntry\r
        public Object[] execute(Media media, String tempStoreName, String tempStoreProtocol) throws Exception {\r
                StoreUri mediaStoreUri = null;\r
-               for (MediaFile mediaFile : media.getMediaFiles()) {\r
+               List<MediaFile> mediaFiles = media.getMediaFiles();\r
+               if (mediaFiles.size() > 1)\r
+                       throw new Exception("Media " + media.getId() + " already has proxy");\r
+               for (MediaFile mediaFile : mediaFiles) {\r
                        Store store = mediaFile.getStore();\r
                        if (store.isSystem() && !store.isLowres()) {\r
                                mediaStoreUri = store.getStoreUri(RemoteStoreProtocol.TSM);\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareRemoteTranscodeJobParametersStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareRemoteTranscodeJobParametersStep.java
deleted file mode 100644 (file)
index 8fa6821..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import java.nio.file.Path;\r
-import java.nio.file.Paths;\r
-\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-\r
-public class PrepareRemoteTranscodeJobParametersStep extends JobStep {\r
-       @StepEntry\r
-       public Object[] execute(String profileName, String tempStoreName, String tempStoreProtocol, String fileName) throws Exception {\r
-               Path inputPath = Paths.get("m:/", fileName);\r
-\r
-               StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, Enum.valueOf(RemoteStoreProtocol.class, tempStoreProtocol));\r
-               String outFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".mp4";\r
-               Path outputPath = null;\r
-               if (fileName.length() > 2) {\r
-                       outputPath = Paths.get(tempStoreUri.toString(true), fileName.substring(0, 1), fileName.substring(1, 2), fileName.substring(2, 3), outFileName);\r
-               } else {\r
-                       outputPath = Paths.get(tempStoreUri.toString(true), fileName, outFileName);\r
-               }\r
-\r
-               BasicDBObject parameters = new BasicDBObject();\r
-               parameters.put("profile", profileName);\r
-               parameters.put("input", inputPath.toString());\r
-               parameters.put("output", outputPath.toString());\r
-               return new Object[] { parameters };\r
-       }\r
-\r
-}\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareRemoteTranscodeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/PrepareRemoteTranscodeStep.java
new file mode 100644 (file)
index 0000000..50fe237
--- /dev/null
@@ -0,0 +1,38 @@
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+public class PrepareRemoteTranscodeStep extends JobStep {\r
+       static private final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(String profileName, String fileName) throws Exception {\r
+               String hiResRoot = "m:/";\r
+               String lowResRoot = "m:/lowres";\r
+\r
+               Path inputPath = Paths.get(hiResRoot, fileName);\r
+\r
+               String outFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".mp4";\r
+\r
+               Path relativeOutputPath = null;\r
+               if (fileName.length() > 2)\r
+                       relativeOutputPath = Paths.get(fileName.substring(0, 1), fileName.substring(1, 2), fileName.substring(2, 3), outFileName);\r
+               else\r
+                       relativeOutputPath = Paths.get(fileName, outFileName);\r
+\r
+               BasicDBObject parameters = new BasicDBObject();\r
+               parameters.put("profile", profileName);\r
+               parameters.put("input", inputPath.toString());\r
+               parameters.put("output", Paths.get(lowResRoot, relativeOutputPath.toString()).toString());\r
+\r
+               logger.info("Prepared for remote transode {}", parameters);\r
+               return new Object[] { parameters, relativeOutputPath.toString() };\r
+       }\r
+\r
+}\r
index 9e8d19496ed53137d7937a853f9cf9b1af07f6ee..56262737b8a90bcbf5f3bf9803e1225f1cc5fd51 100644 (file)
@@ -17,31 +17,21 @@ public class QueryMissingProxyMediaStep extends JobStep {
 \r
        @StepEntry\r
        public Object[] execute() throws Exception {\r
-               Object[] result = new Object[] { null };\r
+               setDescription("Looking for missing proxy");\r
                DB db = NoSQLUtils.getNoSQLDB();\r
                DBCollection collection = db.getCollection("missing_lowres");\r
                Media media = getFirstUntranscodedMedia(collection);\r
 \r
-               try {\r
-                       if (media == null) {\r
-                               logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
-                               // throw new Exception("Nincs feldolgozandó hiány.");\r
-                               cancel();\r
-                               return null;\r
-                       }\r
-\r
-                       String name = media.getMediaFileRealName();\r
-                       collection.save(new BasicDBObject("name", name));\r
-                       logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
-                       result[0] = media;\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
-                       logger.error(getSessionMarker(), e.getMessage());\r
-                       throw e;\r
-               } finally {\r
-                       setProgress(100);\r
+               if (media == null) {\r
+                       logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
+                       cancel();\r
+                       return null;\r
                }\r
-               return result;\r
+\r
+               String name = media.getMediaFileRealName();\r
+               collection.save(new BasicDBObject("name", name));\r
+               logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
+               return new Object[] { media };\r
        }\r
 \r
        private Media getFirstUntranscodedMedia(DBCollection collection) {\r
index de392cf33b2e8dbcd344a90649339b3fdd3a940b..d4900d7625c93c0296600df9115b08638091d559 100644 (file)
@@ -7,36 +7,30 @@ import com.ibm.nosql.json.api.BasicDBObject;
 \r
 import user.jobengine.server.steps.shared.MediaCubeClient;\r
 \r
-/*\r
-import user.jobengine.server.steps.MediaCubeClient;\r
-*/\r
 public class RemoteJobStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
        public Object[] execute(String remoteServer, String template, String name, BasicDBObject remoteJobParameters) throws Exception {\r
-               try {\r
-                       MediaCubeClient mc = new MediaCubeClient(remoteServer);\r
-                       long jobId = mc.startjob(template, name, remoteJobParameters);\r
-                       logger.info(getMarker(), "Started {} on server {}", jobId, remoteServer);\r
-                       while (true) {\r
-                               BasicDBObject status = mc.getStatus(jobId);\r
-                               if (status != null)\r
-                                       setProgress(status.getInt("progress"));\r
-\r
-                               Thread.sleep(3000);\r
-\r
-                               String jobStatus = status.getString("status");\r
-                               if ("SUSPENDED".equals(jobStatus))\r
-                                       throw new Exception(status.getString("description"));\r
-\r
-                               if ("FINISHED".equals(jobStatus))\r
-                                       break;\r
-                       }\r
-\r
-               } catch (Exception e) {\r
-                       throw e;\r
+               setDescription("Executing on {}, template {}, profile {}", remoteServer, template, remoteJobParameters.getString("profile"));\r
+               MediaCubeClient mc = new MediaCubeClient(remoteServer);\r
+               long jobId = mc.startjob(template, name, remoteJobParameters);\r
+               logger.info(getMarker(), "Started {} on server {}", jobId, remoteServer);\r
+               while (true) {\r
+                       BasicDBObject status = mc.getStatus(jobId);\r
+                       if (status != null)\r
+                               setProgress(status.getInt("progress"));\r
+\r
+                       Thread.sleep(2000);\r
+\r
+                       String jobStatus = status.getString("status");\r
+                       if ("SUSPENDED".equals(jobStatus))\r
+                               throw new Exception(status.getString("description"));\r
+\r
+                       if ("FINISHED".equals(jobStatus))\r
+                               break;\r
                }\r
-               return new Object[] { null };\r
+\r
+               return null;\r
        }\r
 }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/SaveMediaProxy.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/SaveMediaProxy.java
new file mode 100644 (file)
index 0000000..3f0f667
--- /dev/null
@@ -0,0 +1,22 @@
+package user.jobengine.server.steps;\r
+\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
+\r
+public class SaveMediaProxy extends JobStep {\r
+\r
+       @StepEntry\r
+       public Object[] execute(Media media, String proxyRelativePath) throws Exception {\r
+               IItemManager manager = getManager();\r
+               Store store = manager.getCurrentLowresStore();\r
+               MediaFile mediaFile = new MediaFile();\r
+               mediaFile.setMedia(media);\r
+               mediaFile.setStore(store);\r
+               mediaFile.setFileType(manager.getFileType("Low-res"));\r
+               mediaFile.setRelativePath(proxyRelativePath);\r
+               manager.add(mediaFile);\r
+               return null;\r
+       }\r
+}\r
index 98ea8cd0abfb56c52183cee9055666579da9cefd..c719116ee584d8ad4b0496f2caece715c469a0f0 100644 (file)
@@ -53,6 +53,14 @@ public class TSMBackupStep extends JobStep {
 \r
                File sourceMediaFile = new File(archiveItem.getMediaFile());\r
                String sourceFileName = sourceMediaFile.getName();\r
+               try {\r
+                       Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+                       String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
+                       getJobRuntime().setDescription(details);\r
+               } catch (Exception e) {\r
+                       String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
+                       getJobRuntime().setDescription(details);\r
+               }\r
                Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
                String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
                getJobRuntime().setDescription(details);\r
@@ -63,6 +71,7 @@ public class TSMBackupStep extends JobStep {
                        //TODO mxf helyett az osszes kiterjesztest!!!!!\r
                        //A dupla ellenorzes a napon beluli ismetlesek miatt kell\r
                        long existingMediaId = archiveItem.getExistingMediaId();\r
+\r
                        if (sourceMediaFile.length() == 0 && existingMediaId == 0) {\r
                                existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
                                if (existingMediaId == 0)\r
@@ -71,7 +80,6 @@ public class TSMBackupStep extends JobStep {
 \r
                        if (existingMediaId == 0)\r
                                existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
-\r
                        String targetFileName;\r
                        if (RANDOMIZE_ARCHIVES) {\r
                                // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA\r
index 56b522d368af69e546b261115cecdb6ed61aeba4..26d8607b4eeea2ce23d10d9b696a1515017185c0 100644 (file)
@@ -41,7 +41,7 @@ public class TSMRestoreStep extends JobStep {
        private Marker marker;\r
 \r
        protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception {\r
-               if (killDateDays > 0)\r
+               if (killDateDays != 0)\r
                        EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
        }\r
 \r
@@ -88,8 +88,10 @@ public class TSMRestoreStep extends JobStep {
                        });\r
                        RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
 \r
-                       String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(),\r
-                                       globalRetrievePath);\r
+                       String globalTargetPath = Paths.get(targetPath, targetFileName)\r
+                                       .getParent()\r
+                                       .toString()\r
+                                       .replace(Paths.get(localRetrievePath).toString(), globalRetrievePath);\r
 \r
                        logger.info(marker,\r
                                        "Az '{}' állomány visszatöltése sikeres volt '{}' néven. A célmappa a <a href='{}' target='_blank'>ide kattintva</a> nyitható meg.",\r
index 7e4c3a1f82f0d8f93bed829010600509cec9d352..c4cb01ac4b413c9724a39a1b793a56f4cdcf0bec 100644 (file)
@@ -1,40 +1,43 @@
 package user.jobengine.server.steps;\r
 \r
+import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
 import user.commons.mediaarea.MediaArea;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
 import user.jobengine.server.steps.shared.ExternalCommandExecutor;\r
-import user.jobengine.server.steps.shared.IExternalCallback;\r
 \r
-/*\r
-import user.jobengine.server.steps.shared.ExternalProfile;\r
-import user.jobengine.server.steps.shared.ExternalProfilesConfig;\r
- */\r
-public class TranscodeFFMpegStep extends JobStep implements IExternalCallback {\r
+public class TranscodeFFMpegStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
        private long allFrameCount;\r
        private long processedFrameCount;\r
 \r
        @StepEntry\r
        public Object[] execute(String input, String output, String profile) throws Exception {\r
-               try {\r
-                       MediaArea ma = new MediaArea(Paths.get(input));\r
-                       ma.process();\r
-                       allFrameCount = ma.getFrameCount();\r
-\r
-                       ExternalCommandExecutor executor = new ExternalCommandExecutor();\r
-                       executor.execute(profile, input, output, this);\r
-               } catch (Exception e) {\r
-                       logger.error(getMarker(), "Media information not available. System message: {}", e.getMessage());\r
-                       throw e;\r
-               }\r
+               Path inputPath = Paths.get(input);\r
+               MediaArea ma = new MediaArea(inputPath);\r
+               ma.process();\r
+               allFrameCount = ma.getFrameCount();\r
+\r
+               Timecode timecode = new Timecode(allFrameCount, Type.PAL);\r
+               setDescription("Transcoding file {}, profile {}, media length {} ({} frames)", inputPath.getFileName(), profile, timecode, allFrameCount);\r
+\r
+               Path lowresPath = Paths.get(output).getParent();\r
+               logger.info("Ensure path exists {}", lowresPath);\r
+               EscortFiles.ensureUNCFolder(lowresPath);\r
+\r
+               ExternalCommandExecutor executor = new ExternalCommandExecutor();\r
+               executor.execute(profile, input, output, l -> {\r
+                       onResponse(l);\r
+               });\r
                return null;\r
        }\r
 \r
-       @Override\r
        public void onResponse(String line) {\r
                String[] values = line.split("=");\r
                if ("frame".equals(values[0])) {\r
index 6057078d0ef8ea19c5c53bc35cbe933098f9cb46..da308d3c02d81a04b60870004bf91ddbcec1b832 100644 (file)
@@ -211,17 +211,17 @@ public class EscortFiles {
        public static void ensureUNCFolder(Path filePath) throws IOException {\r
                File folder = filePath.toFile();\r
                if (!folder.exists() || !folder.isDirectory()) {\r
-                       Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
-                       FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
                        try {\r
+                               Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
+                               FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
                                Files.createDirectories(filePath, attr);\r
                        } catch (Exception e) {\r
-                               // logger.catching(e);\r
+                               //logger.catching(e);\r
                                try {\r
                                        Files.createDirectories(filePath);\r
                                } catch (Exception e1) {\r
-                                       logger.catching(e);\r
-                                       throw e;\r
+                                       logger.catching(e1);\r
+                                       throw e1;\r
                                }\r
                        }\r
                }\r
index 9e6d4a2f02919dd3ff0c7d8ed75c8aa42b441d93..32f17cb557dd0d02d6d475ca247180171522ff0e 100644 (file)
@@ -1,9 +1,15 @@
 package user.jobengine.server.steps.shared;\r
 \r
+import java.nio.file.Path;\r
+\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.IResultSetConsumer;\r
+import user.jobengine.db.Store;\r
 \r
 public class ItemManagerExtensions {\r
 \r
@@ -27,8 +33,8 @@ public class ItemManagerExtensions {
        }\r
 \r
        public static long getExistingRundownMedia(IItemManager manager, String houseid) {\r
-               final long[] result = { 0 };\r
-               final String[] idToCheck = { houseid };\r
+               final long[] result = new long[] { 0 };\r
+               final String[] idToCheck = new String[] { houseid };\r
                int pos = houseid.lastIndexOf("-");\r
                //a hivas a CopyForArchiveNEXIOMaterialsStep-bol is johet, ott meg nincs idobelyegezve a nev!\r
                if (pos > 0 && houseid.length() - pos > 4)\r
@@ -55,4 +61,34 @@ public class ItemManagerExtensions {
                return result[0];\r
        }\r
 \r
+       static public boolean isArchived(IItemManager manager, Path filePath) {\r
+               boolean result = false;\r
+               String name = filePath.getFileName().toString();\r
+               String[] tsmName = new String[] { null };\r
+               String query = String.format("SELECT relativepath FROM MEDIAFILE WHERE houseid = '%s'", name);\r
+               manager.executeQuery(query, rs -> {\r
+                       tsmName[0] = rs.getString("relativepath");\r
+                       return false;\r
+               }, null);\r
+\r
+               Store tsmStore = manager.getSystemStore(false);\r
+               if (tsmStore == null)\r
+                       throw new NullPointerException("A TSM bejegyzés nem található!");\r
+\r
+               StoreUri tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+               if (tsmStoreUri == null)\r
+                       throw new NullPointerException("A TSM forrás elérése nem található!");\r
+\r
+               if (tsmName[0] != null) {\r
+                       try {\r
+                               RemoteFile remoteFile = tsmStoreUri.getRemoteFile(tsmName[0]);\r
+                               result = remoteFile != null;\r
+                       } catch (Exception e) {\r
+                               result = false;\r
+                       } finally {\r
+                               tsmStoreUri.cleanUp();\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
 }\r
index c221f8842c2e60e7e9475834fdc3c9b73fc66d0a..9e9e6be99c5804928f441071090adca26910177b 100644 (file)
@@ -7,12 +7,12 @@ public class MetadataTypeDetector {
        private static final String HYPHEN = "-";\r
        private static final String DOT = ".";\r
 \r
-       private static final String REGEXP_TRAFFICMATERIALID = "^M{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_TRAFFICADID = "^R{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_TRAFFICPROMOID = "^P{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_OCTOPUSSTORYID = "^[0-9]+$";\r
-       private static final String REGEXP_OCTOPUSPLACEHOLDERID = "^[0-9]+_[0-9]+$";\r
-       private static final String REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID = "^[0-9]+_[0-9]+-[0-9]{3}$";\r
+       private static final String REGEXP_TRAFFICMATERIALID = "^M{1}[0-9]{6}[A-Z]{1}";\r
+       private static final String REGEXP_TRAFFICADID = "^R{1}[0-9]{6}[A-Z]{1}";\r
+       private static final String REGEXP_TRAFFICPROMOID = "^P{1}[0-9]{6}[A-Z]{1}";\r
+       private static final String REGEXP_OCTOPUSSTORYID = "^[0-9]+";\r
+       private static final String REGEXP_OCTOPUSPLACEHOLDERID = "^[0-9]+_[0-9]+";\r
+       private static final String REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID = "^[0-9]+_[0-9]+-[0-9]{3}";\r
 \r
        public static MetadataType GuessMetadataType(String id) {\r
                if (StringUtils.isBlank(id))\r
index a0bee642777b29e0a9737afde903b8b93f88468b..d1c35c4a0141a10a584da5add6272520b769b7cf 100644 (file)
@@ -8,11 +8,13 @@ public class MediaCubeFinishMarker extends MediaCubeMarker {
                setSessionName(parent.getSessionName());\r
                setTo(parent.getTo());\r
                setUseSessionLog(parent.isUseSessionLog());\r
+               setParents(parent);\r
        }\r
 \r
        public MediaCubeFinishMarker(MediaCubeMarker parent, String to) {\r
                super(to);\r
                setSessionID(parent.getSessionID());\r
                setSessionName(parent.getSessionName());\r
+               setParents(parent);\r
        }\r
 }\r
index e2256c76edd05c5448005c6967b4633d9d3202e6..7339d0069894763eba36b7e7acc0f71fd690fc97 100644 (file)
@@ -1,5 +1,6 @@
 package user.commons.remotestore;\r
 \r
+import java.io.FileNotFoundException;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
 import java.io.OutputStream;\r
@@ -117,12 +118,17 @@ public class FtpDirectoryLister implements IDirectoryLister {
                ftpClient.login(userName, storeUri.getPassword());\r
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);\r
                ftpClient.enterLocalPassiveMode();\r
+\r
+               //210510 ha tud, akkor menjen a gyoker konyvtarba ld. AMC ISILON valtas\r
+               ftpClient.changeWorkingDirectory("/");\r
+\r
                if (pathElements.length > 1) {\r
                        for (int i = 1; i < pathElements.length; i++) {\r
                                ftpClient.changeWorkingDirectory(pathElements[i]);\r
                        }\r
                }\r
 \r
+               logger.info("Current working directory is {}", ftpClient.printWorkingDirectory());\r
                return ftpClient;\r
        }\r
 \r
@@ -175,7 +181,7 @@ public class FtpDirectoryLister implements IDirectoryLister {
                        //                      cleanUp();\r
                }\r
                if (result == null)\r
-                       throw new Exception("File not exists: " + fileName + " on uri " + storeUri);\r
+                       throw new FileNotFoundException(storeUri.toString() + "/" + fileName);\r
                return result;\r
        }\r
 \r
index 2e7ac124d419d6a2aeb698ca60b0c9d3cf026422..f8917cf58c9a237c7c73405a2a8ab2ff322bce9b 100644 (file)
@@ -2,6 +2,7 @@ package user.commons.remotestore;
 \r
 import java.io.File;\r
 import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
@@ -48,9 +49,11 @@ public class LocalDirectoryLister implements IDirectoryLister {
        }\r
 \r
        @Override\r
-       public void delete(RemoteFile remoteFile) {\r
-               // TODO Auto-generated method stub\r
-\r
+       public void delete(RemoteFile remoteFile) throws Exception {\r
+               String path = storeUri.toString(true);\r
+               File file = new File(path + remoteFile.getName());\r
+               if (file.exists() && !file.isDirectory())\r
+                       file.delete();\r
        }\r
 \r
        @Override\r
@@ -82,6 +85,10 @@ public class LocalDirectoryLister implements IDirectoryLister {
        public RemoteFile get(String fileName) throws Exception {\r
                String path = storeUri.toString(true);\r
                File file = new File(path + fileName);\r
+\r
+               if (!file.exists())\r
+                       throw new FileNotFoundException(storeUri.toString() + "/" + fileName);\r
+\r
                return toRemoteFile(file);\r
        }\r
 \r
index 12679c8d9a49fe0c2aa47a7410b25068d2d1cdf1..75e2d8bd8ead8766de7c1c587e1f22bbaa85fc0a 100644 (file)
@@ -17,6 +17,10 @@ Import-Package: com.fasterxml.jackson.databind;version="2.4.5",
  org.apache.commons.io.output;version="2.2.0",
  org.apache.logging.log4j;version="2.8.2",
  org.apache.logging.log4j.message;version="2.8.2",
+ org.codehaus.groovy.ast;version="3.0.3",
+ org.codehaus.groovy.classgen;version="3.0.3",
+ org.codehaus.groovy.control;version="3.0.3",
+ org.codehaus.groovy.control.customizers;version="3.0.3",
  org.eclipse.core.runtime.adaptor,
  org.eclipse.osgi.framework.console;version="1.1.0",
  org.jboss.resteasy.client.jaxrs,
index 38bbd174087260a15679c5096f58474944944d50..0e171f2a0d6449dcfab8c66491e1da3541748876 100644 (file)
@@ -14,9 +14,7 @@ public interface IJobEngine {
        static final int QUEUE_POLL_INTERVAL_MS = 50;
        static final String DEFAULT_OWNER = "MediaCube";
 
-       void addJobChangedEventListener(IJobChangedListener listener);
-
-       void addManagedJobChangedListener(IJobChangedListener listener);
+       boolean addJobChangedEventListener(IJobChangedListener listener);
 
        void addToExecutorQueue(IJobRuntime jobRuntime);
 
@@ -80,7 +78,7 @@ public interface IJobEngine {
 
        void jobCleanup(IJobRuntime jobRuntime);
 
-       void keepAliveJobChangedListener(IJobChangedListener listener);
+       boolean keepAliveJobChangedListener(IJobChangedListener listener);
 
        void keepAliveWorker(String remoteAddr);
 
index 07c9aa9c792f4a84fcb4fd410e942198ee07ed1e..88e4177adcf3c7b65017f8ba6f47d5a4b7f20567 100644 (file)
@@ -7,9 +7,9 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CyclicBarrier;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.PriorityBlockingQueue;
@@ -201,7 +201,7 @@ public class JobEngine implements IJobEngine {
 
        private AtomicLong nextJobId;
        private SchedulerService schedulerService = null;
-       private List<IJobChangedListener> jobChangedListenerList = new CopyOnWriteArrayList<>();
+       private Set<IJobChangedListener> jobChangedListenerList = ConcurrentHashMap.newKeySet();
        private Map<String, LocalDate> remoteWorkers;
        private String masterServerAddress = System.getProperty("jobengine.master.server", "");
        private final JobEngineRemote remoteEngine;
@@ -237,19 +237,12 @@ public class JobEngine implements IJobEngine {
        }
 
        @Override
-       public void addJobChangedEventListener(IJobChangedListener listener) {
-               if (listener != null && !keepAliveJobChangedListeners.containsKey(listener)) {
+       public boolean addJobChangedEventListener(IJobChangedListener listener) {
+               boolean result = !jobChangedListenerList.contains(listener);
+               if (listener != null && result)
                        jobChangedListenerList.add(listener);
-               }
-       }
 
-       @Override
-       public void addManagedJobChangedListener(IJobChangedListener listener) {
-               if (listener != null) {
-                       jobChangedListenerList.add(listener);
-                       keepAliveJobChangedListeners.put(listener, System.currentTimeMillis());
-                       logger.info("Managed listener added {}", listener);
-               }
+               return result;
        }
 
        @Override
@@ -589,14 +582,17 @@ public class JobEngine implements IJobEngine {
        }
 
        @Override
-       public void keepAliveJobChangedListener(IJobChangedListener listener) {
+       public boolean keepAliveJobChangedListener(IJobChangedListener listener) {
+               boolean result = false;
                if (keepAliveJobChangedListeners != null) {
                        long now = System.currentTimeMillis();
                        //ha mar hozza van adva, nem adja hozza
-                       addJobChangedEventListener(listener);
+                       result = addJobChangedEventListener(listener);
                        keepAliveJobChangedListeners.put(listener, now);
-                       //logger.info("Refreshing listener {}, now {} ({})", listener, now, keepAliveJobChangedListeners.size());
+                       logger.debug("Refreshing listener {}, now {} ({})", listener, now, keepAliveJobChangedListeners.size());
                }
+
+               return result;
        }
 
        @Deprecated
@@ -772,11 +768,11 @@ public class JobEngine implements IJobEngine {
                        if ((now - lastMod) > 5 * 1000) {
 
                                toBeRemoved.add(listener);
-                               logger.info("{} refreshed {}, now {}", listener, lastMod, now);
+                               logger.debug("{} refreshed {}, now {}", listener, lastMod, now);
                        }
                }
                toBeRemoved.forEach(r -> {
-                       logger.info("Removing listener {}", r);
+                       logger.debug("Removing listener {}", r);
                        removeJobChangedEventListener(r);
                        keepAliveJobChangedListeners.remove(r);
                });
index 331a8d53aa13706d3e021c849d7d135b5c95e623..86d2fdc3b1acdb5165c5beb7879bb181d76ad86b 100644 (file)
@@ -3,11 +3,13 @@ package user.jobengine.server;
 import java.io.FileNotFoundException;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
+import java.net.MalformedURLException;\r
 import java.net.URL;\r
 import java.net.URLClassLoader;\r
 import java.nio.file.Files;\r
 import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
+import java.security.CodeSource;\r
 import java.util.ArrayList;\r
 import java.util.Collections;\r
 import java.util.LinkedHashMap;\r
@@ -20,6 +22,8 @@ import java.util.stream.Stream;
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.codehaus.groovy.control.CompilationUnit;\r
+import org.codehaus.groovy.control.CompilerConfiguration;\r
 \r
 import com.ibm.nosql.json.JSONUtil;\r
 import com.ibm.nosql.json.api.BasicDBList;\r
@@ -49,6 +53,7 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
        private final Map<String, IProgram> programs = new LinkedHashMap<String, IProgram>();\r
        private final List<JobTemplate> templates = Collections.synchronizedList(new ArrayList<JobTemplate>());\r
        private final Map<String, BasicDBObject> schedules = new LinkedHashMap<String, BasicDBObject>();\r
+       private URLClassLoader stepsClassLoader;\r
 \r
        public synchronized void bindSystemConfiguration(Object service) {\r
                if (service instanceof IConfiguration) {\r
@@ -57,47 +62,69 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                }\r
        }\r
 \r
+       private GroovyClassLoader createGroovyClassLoader(URLClassLoader stepsClassLoader) throws FileNotFoundException {\r
+               String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
+               GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader) {\r
+\r
+                       @Override\r
+                       protected CompilationUnit createCompilationUnit(CompilerConfiguration config, CodeSource source) {\r
+                               CompilationUnit result = new CompilationUnit(config, source, this);\r
+                               loadStepSources(result, Paths.get(stepsDir, "shared"));\r
+                               loadStepSources(result, Paths.get(stepsDir));\r
+                               return result;\r
+                       }\r
+\r
+               };\r
+               return gcl;\r
+       }\r
+\r
        @SuppressWarnings("unchecked")\r
        @Override\r
        public IJobStep createJobStep(String stepUnitName) throws Exception {\r
                IJobStep result = null;\r
 \r
                boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java") || stepUnitName.toLowerCase().endsWith(".groovy");\r
+               logger.info("Looking for {} step classloader requirement", stepUnitName);\r
 \r
-               URLClassLoader stepsClassLoader = null;\r
-               try {\r
-                       String stepClassesDir = systemConfig.getConfig(DIR_CLASSES);\r
-                       Path path = Paths.get(stepClassesDir);\r
-                       URL[] urls = { path.toUri().toURL() };\r
-                       stepsClassLoader = URLClassLoader.newInstance(urls, Thread.currentThread().getContextClassLoader());\r
-               } catch (FileNotFoundException e) {\r
-                       //nincs jobs/classes mappa\r
-                       URL[] urls = {};\r
-                       stepsClassLoader = URLClassLoader.newInstance(urls, Thread.currentThread().getContextClassLoader());\r
-               }\r
+               if (stepsClassLoader == null)\r
+                       stepsClassLoader = createParentClassLoader();\r
 \r
                Class<IJobStep> stepClass = null;\r
 \r
                if (isGroovyClass) {\r
-                       try {\r
-                               GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader);\r
-                               String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
-                               stepClass = (Class<IJobStep>) parseClassHierarchy(gcl, stepsDir, stepUnitName);\r
-                       } catch (Exception e) {\r
-                               throw e;\r
-                       }\r
-\r
+                       logger.info("Creating GroovyClassLoader");\r
+                       GroovyClassLoader gcl = createGroovyClassLoader(stepsClassLoader);\r
+                       stepClass = (Class<IJobStep>) loadClassFromSourceCode(gcl, stepUnitName);\r
                } else\r
                        stepClass = (Class<IJobStep>) stepsClassLoader.loadClass(stepUnitName);\r
 \r
-               if (stepClass == null) {\r
-                       throw new Exception("Missing " + stepUnitName);\r
-               }\r
+               if (stepClass == null)\r
+                       throw new Exception("Cant load " + stepUnitName);\r
+\r
                result = stepClass.newInstance();\r
+               logger.info("Class for step {} successfully created", stepUnitName);\r
 \r
                return result;\r
        }\r
 \r
+       private URLClassLoader createParentClassLoader() throws MalformedURLException {\r
+               try {\r
+                       String stepClassesDir = systemConfig.getConfig(DIR_CLASSES);\r
+                       Path path = Paths.get(stepClassesDir);\r
+                       URL[] urls = { path.toUri().toURL() };\r
+                       logger.info("Creating URLClassLoader with {}", this.getClass().getClassLoader());\r
+                       //                      stepsClassLoader = URLClassLoader.newInstance(urls, Thread.currentThread().getContextClassLoader());\r
+                       stepsClassLoader = URLClassLoader.newInstance(urls, Thread.currentThread().getContextClassLoader());\r
+               } catch (FileNotFoundException e) {\r
+                       //nincs jobs/classes mappa\r
+                       URL[] urls = {};\r
+                       logger.info("Creating URLClassLoader");\r
+                       //                      stepsClassLoader = URLClassLoader.newInstance(urls, Thread.currentThread().getContextClassLoader());\r
+                       stepsClassLoader = URLClassLoader.newInstance(urls, this.getClass().getClassLoader());\r
+               }\r
+               return stepsClassLoader;\r
+       }\r
+\r
        @Override\r
        public ScheduledJob createScheduledJob(BasicDBObject jobJSON, IJobEngine jobEngine) {\r
                ScheduledJob sj = new ScheduledJob();\r
@@ -186,6 +213,20 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                loadSchedules();\r
        }\r
 \r
+       private Class<?> loadClassFromSourceCode(GroovyClassLoader gcl, String className) throws IOException {\r
+               Class<?> result = null;\r
+\r
+               String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
+               Path path = Paths.get(stepsDir, className);\r
+               if (!path.toFile().exists())\r
+                       return result;\r
+\r
+               result = gcl.parseClass(path.toFile());\r
+               if (result != null)\r
+                       logger.info("Successfully loaded {}", className);\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public void loadExecutors(IJobEngine jobEngine, boolean autoStart) {\r
                InputStream stream = null;\r
@@ -239,11 +280,32 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                BasicDBObject dbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonConfig);\r
                BasicDBList scheduleJobs = NoSQLUtils.asDBList(dbo, "joblist");\r
                scheduleJobs.forEach(o -> {\r
-                       BasicDBObject j = (BasicDBObject) o;\r
-                       schedules.put(j.getString("template"), j);\r
+                       try {\r
+                               BasicDBObject j = (BasicDBObject) o;\r
+                               String template = j.getString("template");\r
+                               String xml = loadTemplateXml(template);\r
+                               j.put("xml", xml);\r
+                               schedules.put(template, j);\r
+                       } catch (Exception e) {\r
+                               logger.error("Scheduled job error! {}", e.getMessage());\r
+                       }\r
+\r
                });\r
        }\r
 \r
+       private void loadStepSources(CompilationUnit compilationUnit, Path path) {\r
+               if (path.toFile().isDirectory()) {\r
+                       Predicate<Path> filter = file -> !Files.isDirectory(file) && file.getFileName().toString().endsWith(".java");\r
+                       try (Stream<Path> stream = Files.list(path)) {\r
+                               stream.filter(filter).forEach(p -> {\r
+                                       compilationUnit.addSource(p.toFile());\r
+                               });\r
+                       } catch (Exception e) {\r
+                       }\r
+\r
+               }\r
+       }\r
+\r
        private void loadTemplate(Path config) {\r
                InputStream stream = null;\r
                try {\r
@@ -304,42 +366,4 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                }\r
                return result;\r
        }\r
-\r
-       private Class<?> parseClassHierarchy(GroovyClassLoader cl, String root, String className) throws IOException {\r
-               Path path = Paths.get(root, className);\r
-\r
-               Class<?> result = null;\r
-               if (!path.toFile().exists())\r
-                       return result;\r
-               List<String> lines = Files.readAllLines(path);\r
-\r
-               String packageName = null;\r
-               for (String line : lines) {\r
-                       String trimmedLine = line.trim();\r
-                       if (trimmedLine.startsWith("package")) {\r
-                               String[] tokens = trimmedLine.split(" ");\r
-                               packageName = tokens[1].trim().replace(";", "");\r
-                       }\r
-\r
-                       if (trimmedLine.startsWith("import") && trimmedLine.contains(packageName)) {\r
-                               String[] tokens = trimmedLine.split("\\.");\r
-                               String name = tokens[tokens.length - 1];\r
-                               name = name.replace(";", "");\r
-                               logger.info("Try loading imported file {}", name);\r
-                               parseClassHierarchy(cl, root, name + ".java");\r
-                       }\r
-\r
-                       if (trimmedLine.contains("extends")) {\r
-                               String[] tokens = trimmedLine.split("extends");\r
-                               String parent = tokens[tokens.length - 1];\r
-                               parent = parent.replace("{", "").trim();\r
-                               //logger.info("Class {} needs parent class {}", className, parent);\r
-                               logger.info("Try loading parent file {}", parent);\r
-                               parseClassHierarchy(cl, root, parent + ".java");\r
-                               break;\r
-                       }\r
-               }\r
-               result = cl.parseClass(path.toFile());\r
-               return result;\r
-       }\r
 }\r
index 54bd8515ab614a2d86b0171e3a45c9bfc5aaaea3..588bfe599a78181890fb3d4e92ac68a8bfed8630 100644 (file)
@@ -111,10 +111,14 @@ public class JobStepExecutor implements IJobStepExecutor {
                                        logger.error("Error in {}", jobRuntime);
                                        Throwable t = e.getCause() == null ? e : e.getCause();
                                        logger.catching(t);
-                                       if (JobStatus.EXECUTING.equals(jobRuntime.getStatus()))
-                                               jobEngine.suspendExecutingJob(t, jobRuntime);
-                                       if (JobStatus.WAIT_EXECUTOR.equals(jobRuntime.getStatus()))
-                                               jobEngine.suspendWaitExecutorJob(t, jobRuntime);
+
+                                       if (jobRuntime != null) {
+                                               logger.error(jobRuntime.getSessionMarker(), t.getMessage());
+                                               if (JobStatus.EXECUTING.equals(jobRuntime.getStatus()))
+                                                       jobEngine.suspendExecutingJob(t, jobRuntime);
+                                               if (JobStatus.WAIT_EXECUTOR.equals(jobRuntime.getStatus()))
+                                                       jobEngine.suspendWaitExecutorJob(t, jobRuntime);
+                                       }
                                } finally {
                                        if (step != null) {
                                                step.cleanup();
@@ -144,10 +148,16 @@ public class JobStepExecutor implements IJobStepExecutor {
                                if (step != null) {
                                        ClassLoader cl = step.getClass().getClassLoader();
                                        if (cl instanceof GroovyClassLoader) {
-                                               URLClassLoader parentCl = (URLClassLoader) cl.getParent();
-                                               GroovyClassLoader groovyCl = (GroovyClassLoader) cl;
-                                               groovyCl.close();
-                                               parentCl.close();
+
+                                               GroovyClassLoader stepClassLoader = (GroovyClassLoader) cl;
+                                               stepClassLoader.close();
+
+                                               URLClassLoader stepParentClassLoader = (URLClassLoader) cl.getParent();
+                                               stepParentClassLoader.close();
+                                       } else if (cl instanceof URLClassLoader) {
+                                               URLClassLoader stepClassLoader = (URLClassLoader) cl;
+                                               stepClassLoader.close();
+
                                        }
                                }
                        }
index 41928c9d34b4d2a2b4446c1e381aaaf3116d73e1..02a2a7963b556ecb499e68e4d8440db8a9d22aee 100644 (file)
@@ -12,6 +12,8 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 import org.apache.logging.log4j.MarkerManager;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
 import org.osgi.framework.Bundle;\r
 import org.osgi.framework.BundleContext;\r
 import org.osgi.framework.FrameworkUtil;\r
@@ -199,6 +201,11 @@ public class JobStep implements IJobStep {
                return result;\r
        }\r
 \r
+       protected void setDescription(String description, Object... arguments) {\r
+               Message msg = new ParameterizedMessage(description, arguments);\r
+               getJobRuntime().setDescription(msg.getFormattedMessage());\r
+       }\r
+\r
        protected void setProgress(int progress) {\r
                if (jobRuntime != null)\r
                        jobRuntime.incrementProgress(progress);\r
index 36d57dd271ea2897476038891c98cf9ca63d658c..099e0f2daa6b70db9b44977e2e0e22ecbd025591 100644 (file)
@@ -1,7 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <window id="resultWin" title="Folyamat paraméterei" width="400px" border="normal" apply="org.zkoss.bind.BindComposer"\r
        viewModel="@id('jlm') @init('user.jobengine.zk.model.JobParametersModel')" forward="onCancel=closeButton.onClick">\r
-               <grid sizedByContent="false" span="true" model="@bind(jlm.selectedJob.parameters)" vflex="true" style="border: none; background: #e3e3e3 !important;"\r
+       <vlayout>\r
+               <hlayout>\r
+                       <label value="Végrehajtás alatt:" />\r
+                       <label value="@bind(jlm.selectedJob.currentStep)" />\r
+               </hlayout>\r
+               <grid sizedByContent="false" span="true" model="@bind(jlm.selectedJob.parameters)" vflex="true"\r
                        oddRowSclass="listbox-odd-style" sclass="listbox-normal-style">\r
                        <columns>\r
                                <column label="" hflex="1" align="left" />\r
@@ -19,7 +24,8 @@
                                </template>\r
                        </rows>\r
                </grid>\r
-       <hbox width="100%" pack="center" align="center">\r
-               <button id="closeButton" label="Bezár" onClick="@command('close')" />\r
-       </hbox>\r
+               <hbox width="100%" pack="center" align="center">\r
+                       <button id="closeButton" label="Bezár" onClick="@command('close')" />\r
+               </hbox>\r
+       </vlayout>\r
 </window>\r
index 421da5a0eb02b00e7052ccc11b122f7c873f0f8a..bb9fbb66163105978d739b8432b770569aae11ec 100644 (file)
@@ -175,8 +175,10 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
 \r
        @Override\r
        protected void doKeepAlive() {\r
-               jobEngine.keepAliveJobChangedListener(this);\r
-               //logger.info("Listener refreshed");\r
+               if (jobEngine.keepAliveJobChangedListener(this)) {\r
+                       //ujra hozzadadtuk, refresh\r
+                       initializeList();\r
+               }\r
        }\r
 \r
        @Command\r
index fab800ec17cf35914c1d4048bf64fd714041e33e..d6a5919d9af3b92dad08c1d8299525a1621c523c 100644 (file)
@@ -1,7 +1,10 @@
 package user.jobengine.zk.model;\r
 \r
 import java.text.ParseException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
 import java.util.Date;\r
+import java.util.List;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
@@ -79,7 +82,23 @@ public class JobSelectorModel extends BaseModel {
        @Init\r
        public void init() {\r
                this.jobEngine = (IJobEngine) Executions.getCurrent().getArg().get("jobEngine");\r
-               jobs = new ListModelList<>(jobEngine.getJobEngineConfiguration().getSchedules().values());\r
+\r
+               initJobList();\r
+       }\r
+\r
+       private void initJobList() {\r
+               List<BasicDBObject> jobsCollection = new ArrayList<>(jobEngine.getJobEngineConfiguration().getSchedules().values());\r
+               Collections.sort(jobsCollection, (a, b) -> {\r
+                       String aName = a.getString("name");\r
+                       if (aName == null)\r
+                               aName = a.getString("template");\r
+                       String bName = b.getString("name");\r
+                       if (bName == null)\r
+                               bName = b.getString("template");\r
+                       return aName.toLowerCase().compareTo(bName.toLowerCase());\r
+               });\r
+               jobs = new ListModelList<>(jobsCollection);\r
+\r
        }\r
 \r
        @Command\r
@@ -88,7 +107,8 @@ public class JobSelectorModel extends BaseModel {
                SchedulerService scheduler = jobEngine.getScheduler();\r
                try {\r
                        scheduler.restart();\r
-                       jobs = new ListModelList<>(jobEngine.getJobEngineConfiguration().getSchedules().values());\r
+                       initJobList();\r
+\r
                } catch (Exception e) {\r
                        logger.info("Scheduler reload error. System message: {}", e.getMessage());\r
                }\r
@@ -105,10 +125,6 @@ public class JobSelectorModel extends BaseModel {
                if (selectedJob == null)\r
                        return;\r
 \r
-               String template = selectedJob.getString(TEMPLATE);\r
-               String xml = jobEngine.getJobEngineConfiguration().loadTemplateXml(template);\r
-               selectedJob.put(XML, xml);\r
-\r
                String cronExpression = selectedJob.getString(CRONEXPRESSION);\r
                if (StringUtils.isBlank(cronExpression))\r
                        return;\r
index 6add1e576a0fe27a54d22eee57a86cb44b93c076..b315083777847dd6f6ba062bff06a4569d2fe102 100644 (file)
@@ -381,9 +381,9 @@ public class SessionUtil {
                //              setAttribute(JOBLISTENER, listener);\r
 \r
                IJobEngine jobEngine = ComponentBinder.getJobEngine();\r
-               if (jobEngine != null) {\r
-                       jobEngine.addManagedJobChangedListener(listener);\r
-               }\r
+               if (jobEngine != null)\r
+                       jobEngine.addJobChangedEventListener(listener);\r
+\r
        }\r
 \r
        static public void setAttribute(String name, Object obj) {\r