git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Sat, 16 Apr 2022 18:50:13 +0000 (18:50 +0000)
committervasary.daniel <TFS\vasary.daniel>
Sat, 16 Apr 2022 18:50:13 +0000 (18:50 +0000)
19 files changed:
server/-product/production/HIRTV/jobs/steps/CancelableStep.java [deleted file]
server/-product/production/HIRTV/jobs/steps/DummyTestStep1.java [deleted file]
server/-product/production/HIRTV/jobs/steps/DummyTestStep2.java [deleted file]
server/-product/production/HIRTV/jobs/steps/DummyTestStep3.java [deleted file]
server/-product/production/HIRTV/jobs/steps/TestForkCancelableStep.java [deleted file]
server/-product/production/LOCAL/jobs/executors.xml
server/-product/production/LOCAL/jobs/templates/cancelable.xml
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/DynamicStepsLoaderTests.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/DetectMissingLengthStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/DuplicateRemoverStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/FFMpeg.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/PlanAirExtensions.java
server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicStepsLoader.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java
server/user.mediacube.gui/css/archivum.css
server/user.mediacube.gui/js/searchitems.js
server/user.mediacube.gui/pages/jobeditor.zul
server/user.mediacube.gui/pages/searchitems.zul
server/user.mediacube.gui/src/user/jobengine/zk/model/ListSearchModel.java

diff --git a/server/-product/production/HIRTV/jobs/steps/CancelableStep.java b/server/-product/production/HIRTV/jobs/steps/CancelableStep.java
deleted file mode 100644 (file)
index 3368e44..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-public class CancelableStep extends JobStep {\r
-       private static final Logger logger = LogManager.getLogger();\r
-\r
-       @StepEntry\r
-       public Object[] execute(int param) throws Exception {\r
-               logger.info(getMarker(), "Executing with param {}", param);\r
-               for (int i = 0; i < 10; i++) {\r
-                       if (getJobRuntime().isWaitingCancel())\r
-                               break;\r
-                       Thread.sleep(1000);\r
-                       int progress = (i + 1) * 100 / 10;\r
-                       setProgress(progress);\r
-               }\r
-               return null;\r
-       }\r
-\r
-}\r
diff --git a/server/-product/production/HIRTV/jobs/steps/DummyTestStep1.java b/server/-product/production/HIRTV/jobs/steps/DummyTestStep1.java
deleted file mode 100644 (file)
index 22b3ab9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-public class DummyTestStep1 extends JobStep {\r
-       private static final Logger logger = LogManager.getLogger(DummyTestStep1.class);\r
-\r
-       @StepEntry\r
-       public Object[] execute(String param1) {\r
-               logger.info("Executing DummyTestStep1");\r
-               int var1 = 0;\r
-               if (param1.equals("Jozsi")) {\r
-                       var1 = 1;\r
-                       Thread.sleep(1000);\r
-                       setProgress(50);\r
-                       Thread.sleep(1000);\r
-                       setProgress(50);\r
-               }\r
-\r
-               return new Object[] {var1}; \r
-       }\r
-}\r
diff --git a/server/-product/production/HIRTV/jobs/steps/DummyTestStep2.java b/server/-product/production/HIRTV/jobs/steps/DummyTestStep2.java
deleted file mode 100644 (file)
index 5843131..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-public class DummyTestStep2 extends JobStep {\r
-       private static final Logger logger = LogManager.getLogger(DummyTestStep2.class);\r
-\r
-       @StepEntry\r
-       public Object[] execute(int var2) {\r
-               logger.info("Executing DummyTestStep2");\r
-               long var3 = 0L;\r
-\r
-               return new Object[] { var3 };\r
-       }\r
-}\r
diff --git a/server/-product/production/HIRTV/jobs/steps/DummyTestStep3.java b/server/-product/production/HIRTV/jobs/steps/DummyTestStep3.java
deleted file mode 100644 (file)
index b3e061a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-public class DummyTestStep3 extends JobStep {\r
-       private static final Logger logger = LogManager.getLogger(DummyTestStep3.class);\r
-\r
-       @StepEntry\r
-       public void execute(long var3) {\r
-               logger.info("Executing DummyTestStep3");\r
-       }\r
-}\r
diff --git a/server/-product/production/HIRTV/jobs/steps/TestForkCancelableStep.java b/server/-product/production/HIRTV/jobs/steps/TestForkCancelableStep.java
deleted file mode 100644 (file)
index 8083d94..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-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.IJob;\r
-import user.commons.JobStatus;\r
-import user.commons.ListUtils;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
-public class TestForkCancelableStep extends JobStep {\r
-       private static final String CHILD_TEMPLATE = "cancelable.xml";\r
-       private static final Logger logger = LogManager.getLogger();\r
-\r
-       @StepEntry\r
-       public Object[] execute(int count) throws Exception {\r
-               getJobRuntime().forkPrepare();\r
-               for (int i = 0; i < count; i++) {\r
-                       if (getJobRuntime().isWaitingCancel())\r
-                               break;\r
-                       IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
-                               IJobRuntime r = (IJobRuntime) e.getSource();\r
-\r
-                               if (r.isDisableRetry())\r
-                                       return;\r
-\r
-                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) {\r
-                                       long id = ((IJob) e.getSource()).getId();\r
-                                       logger.info("Cleanup occured because status is {} {}", e.getStatus(), id);\r
-                               }\r
-\r
-                       }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
-\r
-                       runtime.setRelated("TEST" + runtime.getId());\r
-               }\r
-\r
-               getJobRuntime().forkWaitComplete();\r
-               return null;\r
-       }\r
-}\r
index 0fd7a2f228848f2186df85d1f72f25237d394301..14f3fa67fc4a93cb2d8a8b1d888a949d38a13a22 100644 (file)
@@ -14,7 +14,7 @@
        <executor className="ArchiveListBuilderStep.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="ArchiveMaterialSubmitStep.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="BatchRetrieveForkStep.java" maxConcurrent="1" isRemote="false" />\r
-       <executor className="CancelableStep.java" maxConcurrent="20" isRemote="false" />\r
+       <executor className="user.jobengine.server.steps.CancelableStep" maxConcurrent="20" isRemote="false" />\r
        <executor className="CalculateMD5Step.java" maxConcurrent="1" isRemote="false "/>\r
        <executor className="CleanupMountedLocationStep.java" maxConcurrent="5" isRemote="false" />\r
        <executor className="CreateArchiveItemStep.java" maxConcurrent="1" isRemote="false" />\r
index 2be289b3fa73d9de54cd551fbe52519823ecd7af..e5ec0cf3b5ce82c15aba43230995f2e99b056785 100644 (file)
@@ -6,7 +6,7 @@
                </parameters>\r
        </declarations>\r
        <commands>\r
-               <calljobstep remote="true" type="CancelableStep.java" weight="1" >\r
+               <calljobstep remote="true" type="user.jobengine.server.steps.CancelableStep" weight="1" >\r
                        <inputs>\r
                                <input>\r
                                        <parameter name="param" />\r
diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/DynamicStepsLoaderTests.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/DynamicStepsLoaderTests.java
new file mode 100644 (file)
index 0000000..2303b7b
--- /dev/null
@@ -0,0 +1,48 @@
+package hu.user.mediacube.executors.tests;\r
+\r
+import static org.junit.Assert.assertNotNull;\r
+\r
+import java.io.File;\r
+import java.util.Set;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import groovy.lang.GroovyClassLoader;\r
+import user.jobengine.server.DynamicStepsLoader;\r
+\r
+public class DynamicStepsLoaderTests {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       static DynamicStepsLoader sut = null;\r
+\r
+       @BeforeClass\r
+       static public void beforeClass() {\r
+               sut = new DynamicStepsLoader(\r
+                               "C:/work/user/mediacube/server/user.jobengine.executors/src/user/jobengine/server/steps");\r
+       }\r
+\r
+       @Test\r
+       public void test0() throws Exception {\r
+               GroovyClassLoader classLoader = sut.createClassLoader(this.getClass().getClassLoader());\r
+               assertNotNull(classLoader);\r
+       }\r
+\r
+       @Test\r
+       public void test1() throws Exception {\r
+               GroovyClassLoader classLoader = sut.createClassLoader(this.getClass().getClassLoader());\r
+               Set<File> sourceFiles = sut.getSourceFiles();\r
+               logger.info("Chcking {} files", sourceFiles.size());\r
+               sourceFiles.forEach(f -> {\r
+                       String name = f.getName().toString();\r
+                       try {\r
+                               logger.info("Loading {}", name);\r
+                               sut.loadClassFromSourceCode(classLoader, name);\r
+                       } catch (Exception e) {\r
+                               logger.error(e.getMessage());\r
+                       }\r
+\r
+               });\r
+       }\r
+}\r
index d3180f5152e30a2b649303cc8ce820aa0dcff64b..830e41fc852140305215e013448dec0526b2f9cc 100644 (file)
@@ -24,7 +24,7 @@ public class DetectMissingLengthStep extends JobStep {
 \r
        @StepEntry\r
        public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               Object[] result = { null, null, "%s", null, 0, true };\r
+               Object[] result = new Object[] { null, null, "%s", null, 0, true };\r
                marker = jobRuntime.getSessionMarker();\r
 \r
                DB db = NoSQLUtils.getNoSQLDB();\r
index 6aed5a0061693355b3a3756e476b0f03ad876261..741edbbb4fce13248e13742920f7139813b6a28c 100644 (file)
@@ -33,7 +33,7 @@ public class DuplicateRemoverStep extends JobStep {
        }\r
 \r
        public void processLowresDuplicates(int limit) {\r
-               long count[] = { 0, 0 };\r
+               long count[] = new long[] { 0, 0 };\r
 \r
                manager.executeQuery("select count(filecount) from vw_items_rd_dup", rs -> {\r
                        count[0] = rs.getLong(1);\r
@@ -89,7 +89,8 @@ public class DuplicateRemoverStep extends JobStep {
                        }\r
 \r
                        if (moved) {\r
-                               logger.info(marker, "{} {} {}", mediaFile.getMediaId(), mediaFile.getRelativePath(), masterMediaFile[0].getRelativePath());\r
+                               logger.info(marker, "{} {} {}", mediaFile.getMediaId(), mediaFile.getRelativePath(),\r
+                                               masterMediaFile[0].getRelativePath());\r
                                mediaFile.setRelativePath(masterMediaFile[0].getRelativePath());\r
                                manager.modify(mediaFile);\r
                        }\r
index 206796dd320ce1c1b39fe0f3db1dfc18d1622e50..b1f2855d669e825542d9e61b04f5bf2913fe2cf8 100644 (file)
@@ -71,7 +71,7 @@ public class FFMpeg {
        }\r
        System.out.println(sb);\r
         ProcessBuilder processBuilder = Cmd.create(Cmd.getFFMpegExecutable(), sb);\r
-        long allFrames[] = {0};\r
+        long[] allFrames = new long[]{0};\r
 \r
         try {\r
                MediaInfo mi = new MediaInfo(Paths.get(input));\r
@@ -158,7 +158,7 @@ public class FFMpeg {
        }\r
        System.out.println(sb);\r
         ProcessBuilder processBuilder = Cmd.create(Cmd.getFFMpegExecutable(), sb);\r
-        long allFrames[] = {0};\r
+        long[] allFrames = new long[]{0};\r
 \r
         try {\r
                MediaInfo mi = new MediaInfo(Paths.get(input));\r
index 05553a5631e6ed958cc1be7686fb56c6d9927b4e..b64d36d4a8e79a4046ac2d4d6d5f542b26983eab 100644 (file)
@@ -185,7 +185,7 @@ public class PlanAirExtensions {
                        connection = DriverManager.getConnection(dbUrl, userName, password);\r
                        // TODO hiba esetén exception\r
                        switch (type) {\r
-                       case TrafficMaterial:\r
+                       case TrafficMaterial: {\r
                                manager.executeQuery(connection, MATERIAL_SQL, rs -> {\r
                                        String progTitle = rs.getString("v_ProgTitle");\r
                                        String epTitle = rs.getString("v_EpTitle");\r
@@ -215,7 +215,8 @@ public class PlanAirExtensions {
                                        st.setString(1, name);\r
                                });\r
                                break;\r
-                       case TrafficPromo:\r
+                       }\r
+                       case TrafficPromo: {\r
                                manager.executeQuery(connection, PROMO_SQL, rs -> {\r
                                        String title = rs.getString("v_Title");\r
                                        int in = rs.getInt("t_TcIn");\r
@@ -228,7 +229,8 @@ public class PlanAirExtensions {
                                        st.setString(1, name);\r
                                });\r
                                break;\r
-                       case TrafficAD:\r
+                       }\r
+                       case TrafficAD: {\r
                                manager.executeQuery(connection, AD_SQL, rs -> {\r
                                        String title = rs.getString("v_Title");\r
                                        int in = rs.getInt("t_TcIn");\r
@@ -241,6 +243,7 @@ public class PlanAirExtensions {
                                        st.setString(1, name);\r
                                });\r
                                break;\r
+                       }\r
                        default:\r
                                return null;\r
                        }\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicStepsLoader.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicStepsLoader.java
new file mode 100644 (file)
index 0000000..5e8a3b4
--- /dev/null
@@ -0,0 +1,108 @@
+package user.jobengine.server;\r
+\r
+import java.io.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.security.CodeSource;\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+import java.util.function.Predicate;\r
+import java.util.stream.Stream;\r
+\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 groovy.lang.GroovyClassLoader;\r
+\r
+public class DynamicStepsLoader {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private String stepsDir;\r
+\r
+       public DynamicStepsLoader(String stepsDir) {\r
+               this.stepsDir = stepsDir;\r
+       }\r
+\r
+       public Class<?> loadClassFromSourceCode(GroovyClassLoader gcl, String fileName) throws IOException {\r
+               Class<?> result = null;\r
+\r
+               Path path = Paths.get(stepsDir, fileName);\r
+               File classFile = null;\r
+\r
+               // Windows alatt az eleresi utak irasmodja egyforma kell legyen.\r
+               // A GroovyClassLoader\r
+               // ld. createGroovyClassLoader a new File(path.toFile().getCanonicalPath())-al\r
+               // operal.\r
+               classFile = new File(path.toFile().getCanonicalPath());\r
+               logger.info("Class path is normalized to {}", classFile.getCanonicalPath());\r
+\r
+               if (!classFile.exists())\r
+                       return result;\r
+\r
+               result = gcl.parseClass(classFile);\r
+               if (result != null)\r
+                       logger.info("Class for {} successfully loaded", fileName);\r
+               return result;\r
+       }\r
+\r
+       public Set<File> getSourceFiles() {\r
+               Set<File> sharedFiles = getJavaFileList(Paths.get(stepsDir, "shared"), null);\r
+               Set<File> libFiles = getJavaFileList(Paths.get(stepsDir), null);\r
+               libFiles.addAll(sharedFiles);\r
+               return libFiles;\r
+       }\r
+\r
+       public GroovyClassLoader createClassLoader(ClassLoader stepsClassLoader) throws FileNotFoundException {\r
+               Set<File> libFiles = getSourceFiles();\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
+                               libFiles.forEach(f -> result.addSource(f));\r
+                               return result;\r
+                       }\r
+\r
+               };\r
+               return gcl;\r
+       }\r
+\r
+       private Set<File> getJavaFileList(Path path, String excludeFileName) {\r
+               Set<File> result = new HashSet<>();\r
+               if (path.toFile().isDirectory()) {\r
+                       Predicate<Path> filter = file -> !Files.isDirectory(file)\r
+                                       && file.getFileName().toString().endsWith(".java");\r
+                       try (Stream<Path> stream = Files.list(path)) {\r
+                               stream.filter(filter).forEach(p -> {\r
+\r
+                                       boolean add = false;\r
+                                       if (excludeFileName == null)\r
+                                               add = true;\r
+                                       else if (!excludeFileName.equals(p.getFileName().toString()))\r
+                                               add = true;\r
+\r
+                                       try {\r
+                                               if (add) {\r
+                                                       // ha a betoltendo osztaly eleresi utja korabban mas kapitalissal kerul\r
+                                                       // feldolgozasra, hibat kapunk\r
+                                                       // ld. loadClassFromSourceCode\r
+                                                       File classFile = new File(p.toFile().getCanonicalPath());\r
+                                                       result.add(classFile);\r
+                                               }\r
+                                       } catch (IOException e) {\r
+                                               logger.catching(e);\r
+                                       }\r
+\r
+                               });\r
+                       } catch (Exception e) {\r
+                       }\r
+\r
+               }\r
+               return result;\r
+       }\r
+\r
+}\r
index f1063db92496a09d22ad7776bf16208f182cab4c..1bd5c162ef8fbcdbe8d10834a8757f4c08a07d5e 100644 (file)
@@ -1,6 +1,5 @@
 package user.jobengine.server;\r
 \r
-import java.io.File;\r
 import java.io.FileNotFoundException;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
@@ -10,16 +9,13 @@ import java.net.URLClassLoader;
 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.AbstractMap.SimpleEntry;\r
 import java.util.ArrayList;\r
 import java.util.Collections;\r
-import java.util.HashSet;\r
 import java.util.LinkedHashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Map.Entry;\r
-import java.util.Set;\r
 import java.util.function.Consumer;\r
 import java.util.function.Predicate;\r
 import java.util.stream.Stream;\r
@@ -27,8 +23,6 @@ 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
@@ -61,6 +55,17 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
        private URLClassLoader stepsClassLoader;\r
        private boolean resetStepClassLoader;\r
        private GroovyClassLoader groovyClassLoader;\r
+       private DynamicStepsLoader dynamicStepsLoader;\r
+\r
+       public JobEngineConfiguration() {\r
+\r
+               try {\r
+                       String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
+                       dynamicStepsLoader = new DynamicStepsLoader(stepsDir);\r
+               } catch (Exception e) {\r
+                       logger.warn(e.getMessage());\r
+               }\r
+       }\r
 \r
        public synchronized void bindSystemConfiguration(Object service) {\r
                if (service instanceof IConfiguration) {\r
@@ -69,32 +74,6 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                }\r
        }\r
 \r
-       private GroovyClassLoader createGroovyClassLoader(URLClassLoader stepsClassLoader) throws FileNotFoundException {\r
-               String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
-\r
-               Set<File> sharedFiles = getJavaFileList(Paths.get(stepsDir, "shared"), null);\r
-               Set<File> libFiles = getJavaFileList(Paths.get(stepsDir), null);\r
-               libFiles.addAll(sharedFiles);\r
-\r
-               // for (File f : libFiles) {\r
-               // logger.info("GroovyClassLoader source {}", f.getAbsolutePath());\r
-               // }\r
-\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
-                               libFiles.forEach(f -> result.addSource(f));\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
@@ -126,13 +105,16 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
 \r
                if (groovyClassLoader == null) {\r
                        logger.info("Creating Groovy ClassLoader");\r
-                       groovyClassLoader = createGroovyClassLoader(stepsClassLoader);\r
+                       if (dynamicStepsLoader != null)\r
+                               groovyClassLoader = dynamicStepsLoader.createClassLoader(stepsClassLoader);\r
                }\r
 \r
                Class<IJobStep> stepClass = null;\r
 \r
                if (isGroovyClass) {\r
-                       stepClass = (Class<IJobStep>) loadClassFromSourceCode(groovyClassLoader, stepUnitName);\r
+                       if (dynamicStepsLoader != null)\r
+                               stepClass = (Class<IJobStep>) dynamicStepsLoader.loadClassFromSourceCode(groovyClassLoader,\r
+                                               stepUnitName);\r
                } else\r
                        stepClass = (Class<IJobStep>) stepsClassLoader.loadClass(stepUnitName);\r
 \r
@@ -253,29 +235,6 @@ 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
-               File classFile = null;\r
-\r
-               // Windows alatt az eleresi utak irasmodja egyforma kell legyen.\r
-               // A GroovyClassLoader\r
-               // ld. createGroovyClassLoader a new File(path.toFile().getCanonicalPath())-al\r
-               // operal.\r
-               classFile = new File(path.toFile().getCanonicalPath());\r
-               logger.info("Class path is normalized to {}", classFile.getCanonicalPath());\r
-\r
-               if (!classFile.exists())\r
-                       return result;\r
-\r
-               result = gcl.parseClass(classFile);\r
-               if (result != null)\r
-                       logger.info("Class for {} successfully loaded", className);\r
-               return result;\r
-       }\r
-\r
        @Override\r
        public void loadExecutors(IJobEngine jobEngine, boolean autoStart) {\r
                InputStream stream = null;\r
@@ -346,40 +305,6 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                });\r
        }\r
 \r
-       private Set<File> getJavaFileList(Path path, String excludeFileName) {\r
-               Set<File> result = new HashSet<>();\r
-               if (path.toFile().isDirectory()) {\r
-                       Predicate<Path> filter = file -> !Files.isDirectory(file)\r
-                                       && file.getFileName().toString().endsWith(".java");\r
-                       try (Stream<Path> stream = Files.list(path)) {\r
-                               stream.filter(filter).forEach(p -> {\r
-\r
-                                       boolean add = false;\r
-                                       if (excludeFileName == null)\r
-                                               add = true;\r
-                                       else if (!excludeFileName.equals(p.getFileName().toString()))\r
-                                               add = true;\r
-\r
-                                       try {\r
-                                               if (add) {\r
-                                                       // ha a betoltendo osztaly eleresi utja korabban mas kapitalissal kerul\r
-                                                       // feldolgozasra, hibat kapunk\r
-                                                       // ld. loadClassFromSourceCode\r
-                                                       File classFile = new File(p.toFile().getCanonicalPath());\r
-                                                       result.add(classFile);\r
-                                               }\r
-                                       } catch (IOException e) {\r
-                                               logger.catching(e);\r
-                                       }\r
-\r
-                               });\r
-                       } catch (Exception e) {\r
-                       }\r
-\r
-               }\r
-               return result;\r
-       }\r
-\r
        private void loadTemplate(Path config) {\r
                InputStream stream = null;\r
                try {\r
index 3b7bc705bad0e2826a7eed22de9318b8533594a3..5a22e7e0647eaa4354ae6f24e60e3aed88dc59b3 100644 (file)
@@ -225,3 +225,26 @@ body *:not([class*="z-icon-"], [class*="vjs-icon-"]) {
 .z-listbox-autopaging .z-listitem .z-listcell .z-listcell-content{\r
         padding: 5px;\r
 }\r
+\r
+/*\r
+VideoJS controls never hide\r
+https://player.support.brightcove.com/styling/customizing-player-appearance.html\r
+https://www.endpointdev.com/blog/2016/03/creating-video-player-with-time-markers/\r
+*/\r
+/* .video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-active .vjs-control-bar:not(.vjs-focus-within):not(.vjs-control-bar-visible), */\r
+/* .video-js.not-hover.vjs-has-started.vjs-paused.vjs-user-inactive .vjs-control-bar:not(.vjs-focus-within):not(.vjs-control-bar-visible), */\r
+/* .video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-active .vjs-control-bar:not(.vjs-focus-within):not(.vjs-control-bar-visible), */\r
+/* .video-js.not-hover.vjs-has-started.vjs-playing.vjs-user-inactive .vjs-control-bar:not(.vjs-focus-within):not(.vjs-control-bar-visible), */\r
+/* .video-js.vjs-has-started.vjs-paused.vjs-ad-playing.vjs-user-inactive .vjs-control-bar, */\r
+/* .video-js.vjs-has-started.vjs-playing.vjs-user-inactive .vjs-control-bar:not(.vjs-focus-within):not(.vjs-control-bar-visible){ */\r
+/*     transform: none; */\r
+/*     -webkit-transform: none; */\r
+/*     -ms-transform: none; */\r
+/* } */\r
+\r
+.video-js .vjs-time-control {\r
+    display: block;\r
+}\r
+/* .video-js .vjs-remaining-time { */\r
+/*     display: none; */\r
+/* } */\r
index f96ff094685ba644ed5132d72315786c17c35215..6956ffc057eb647e5c3fa72065d20dd42788fab6 100644 (file)
@@ -1,16 +1,17 @@
 /* Proxy lejátszó */\r
 \r
-function addButton(player, id, text, classOfButton, callback){\r
+function addButton(player, id, text, icon, callback){\r
        var button = videojs.getComponent('Button');\r
        var breakButton = videojs.extend(button, {\r
-               constructor: function() {\r
-                 button.apply(this, arguments);\r
-                 this.controlText(text);\r
-                 this.addClass(classOfButton);\r
-               },\r
-               handleClick: function() {\r
-                 callback();\r
-               }\r
+       constructor: function() {\r
+         button.apply(this, arguments);\r
+         this.controlText(text);\r
+         this.addClass(icon);\r
+\r
+       },\r
+       handleClick: function() {\r
+         callback();\r
+       }\r
        });\r
        videojs.registerComponent(id, breakButton);\r
        player.getChild('controlBar').addChild(id, {}); \r
@@ -19,19 +20,61 @@ function addButton(player, id, text, classOfButton, callback){
 function createPlayer() {\r
        var player = videojs('myVideoDiv', {\r
                controls : true,\r
-               preload : "auto"\r
+               preload : "auto",\r
+               controlBar: {\r
+                       pictureInPictureToggle: false,\r
+                       _children: [\r
+                   "playToggle",\r
+                   "volumeMenuButton",\r
+                   "durationDisplay",\r
+                   "timeDivider",\r
+                   "currentTimeDisplay",\r
+                   "progressControl",\r
+                   "remainingTimeDisplay",\r
+                   "fullscreenToggle"\r
+               ]\r
+               },\r
+               _userActions: {\r
+                       hotkeys: function(event){\r
+                               //console.log(event.which);\r
+                         //space\r
+                         if (event.which === 32) {\r
+                           this.play();\r
+                         }\r
+                       \r
+                         // left\r
+                         if (event.which === 37) {\r
+                          \r
+                         }\r
+                         // right\r
+                         if (event.which === 39) {\r
+                          \r
+                         }\r
+                         // down\r
+                         if (event.which === 39) {\r
+                          \r
+                         }\r
+                       }\r
+               }\r
        });\r
-\r
-       addButton(player, 'stepPrevButton', "Step back", 'vjs-icon-previous-item', function() {\r
-         console.log('Step back');\r
+/*\r
+       addButton(player, 'stepPrevButton', "Step back", "z-icon-step-backward", function() {\r
+               console.log('Step back');\r
+               player.pause();\r
+               player.currentTime(player.currentTime() - 0.04);\r
        });\r
-       addButton(player, 'breakButton', "Insert breakpoint", 'vjs-icon-chapters', function() {\r
-         console.log('BREAK');\r
+       addButton(player, 'breakButton', "Insert breakpoint", "z-icon-unlink", function() {\r
+               player.pause();\r
+               createBreakPoint();\r
        });\r
-       addButton(player, 'stepNextButton', "Step forward", 'vjs-icon-next-item', function() {\r
-         console.log('Step forward');\r
+       addButton(player, 'stepNextButton', "Step foreward", "z-icon-step-forward", function() {\r
+               console.log('Step foreward');\r
+               player.pause();\r
+               console.log(player.currentTime());\r
+               player.currentTime(player.currentTime() + 0.04);\r
+               console.log(player.currentTime());\r
        });\r
-       \r
+*/     \r
        return player;\r
 }\r
 \r
@@ -87,23 +130,12 @@ function customTimeFormat(seconds) {
         return SMPTEToString(secondsToSMPTE(seconds));\r
 }\r
 \r
-videojs.setFormatTime(customTimeFormat);       \r
-\r
-\r
-function pushTcIn() {\r
-       var current = player.currentTime();\r
-       console.log("pushTcIn", current);\r
-       zk.Widget.$('$videoListener').fire('onTcIn', {\r
-               meta : current\r
-       }, {\r
-               toServer : true\r
-       });\r
-}\r
+//videojs.setFormatTime(customTimeFormat);     \r
 \r
-function pushTcOut() {\r
+function createBreakPoint() {\r
        var current = player.currentTime();\r
-       console.log("pushTcOut", current);\r
-       zk.Widget.$('$videoListener').fire('onTcOut', {\r
+       console.log('Create breakpoint', current);\r
+       zk.Widget.$('$videoListener').fire('onCreateBreakPoint', {\r
                meta : current\r
        }, {\r
                toServer : true\r
index ad865467742cc34dcfa7b0ced85756168ffddc11..88af42240ca58dc47f7eb8b6827f252be03adf54 100644 (file)
@@ -34,7 +34,7 @@
                                        <tabs visible="true">\r
                                                <tab id="tab0" label="Paraméterek" selected="true" />\r
                                                <tab id="tab1" label="Részletek" />\r
-                                               <tab id="tab2" label="Ábra" />\r
+<!--                                           <tab id="tab2" label="Ábra" /> -->\r
                                        </tabs>\r
                                        <tabpanels>\r
                                                <tabpanel>\r
                                                        <label height="100%" ca:data-syntax-highlight="true" multiline="true" pre="true" \r
                                                                value="@bind(jlm.selectedJob['xml'])" />\r
                                                </tabpanel>\r
-                                               <tabpanel>\r
-                                                       <include src="pages/processVisualizer.zul" />\r
-                                               </tabpanel>\r
+<!--                                           <tabpanel> -->\r
+<!--                                                   <include src="pages/processVisualizer.zul" /> -->\r
+<!--                                           </tabpanel> -->\r
                                        </tabpanels>\r
                                </tabbox>\r
                        </east>\r
index 0b66449fe9521026892f3b1b721efd9f7248ff7e..44b22616612346e03a5fc92218f43062a10f2bb2 100644 (file)
@@ -8,9 +8,15 @@
 \r
 <!DOCTYPE xml>\r
 <zk xmlns:h="xhtml" xmlns:n="native" xmlns:c="client">\r
-       <style src="/css/video-js.css" />\r
+<!--   <style src="https://unpkg.com/@videojs/themes@1/dist/city/index.css" /> -->\r
+<!--   <style src="https://vjs.zencdn.net/7.18.1/video-js.css"/> -->\r
+<!--   <h:script src="https://vjs.zencdn.net/7.18.1/video.min.js"/> -->\r
+\r
+\r
+       <style src="/css/video-js.css?v=3" />\r
        <style src="/css/searchitems.css" /> \r
        <style src="/css/tagify.css" /> \r
+       \r
        <h:script src="/js/tagify.min.js" />\r
        <h:script src="/js/video.js" />\r
        <h:script src="/js/searchitems.js" />\r
                                <borderlayout height="100%" width="100%">\r
                                        <north border="none" size="60%" splittable="true" minsize="250" collapsible="true">\r
                                                <div align="center" height="100%" width="100%">\r
-                                                       <h:video-js id="myVideoDiv" class="video-js vjs-default-skin vjs-big-play-centered" \r
+                                                       <h:video-js id="myVideoDiv" class="video-js vjs-big-play-centered" \r
                                                                data-setup='{"inactivityTimeout": 0}'\r
                                                                style="width: 100%;height: 100%">\r
                                                        </h:video-js>\r
-                                                       <div id="videoListener" onTcOut="@command('onTcOut')" onTcIn="@command('onTcIn')" />\r
+                                                       <div id="videoListener" onCreateBreakPoint="@command('onCreateBreakPoint')"/>\r
                                                </div>\r
                                        </north>\r
                                        <center border="none">\r
index d91cde9acad53078a5f6024b7e8255a20caaaca1..ef47b36f5114c9b97fefe5695e0c2cf50bcbfe49 100644 (file)
@@ -725,34 +725,13 @@ public class ListSearchModel extends AsyncBaseModel {
        }\r
 \r
        @Command\r
-       public void onTcIn(@ContextParam(ContextType.TRIGGER_EVENT) Event event) throws Exception {\r
+       public void onCreateBreakPoint(@ContextParam(ContextType.TRIGGER_EVENT) Event event) throws Exception {\r
                JSONObject jsObject = (JSONObject) event.getData();\r
                Double doubleVar = 0.0;\r
                if (!jsObject.get("meta").equals(0)) {\r
                        doubleVar = (Double) jsObject.get("meta");\r
                }\r
-\r
-               if (doubleVar.floatValue() >= ((selectedObject.getTcOut() == null) ? 9999999999999999999999.9\r
-                               : selectedObject.getTcOut())) {\r
-                       throw new Exception("A kilépés időpontjának későbbinek kell lennie mint a belépés időpontja!");\r
-               } else {\r
-                       selectedObject.setTcIn(new Float(doubleVar.floatValue()));\r
-               }\r
-       }\r
-\r
-       @Command\r
-       public void onTcOut(@ContextParam(ContextType.TRIGGER_EVENT) Event event) throws Exception {\r
-               JSONObject jsObject = (JSONObject) event.getData();\r
-               Double doubleVar = 0.0;\r
-               if (!jsObject.get("meta").equals(0)) {\r
-                       doubleVar = (Double) jsObject.get("meta");\r
-               }\r
-\r
-               if (doubleVar.floatValue() <= ((selectedObject.getTcIn() == null) ? 0.0 : selectedObject.getTcIn())) {\r
-                       throw new Exception("A kilépés időpontjának későbbinek kell lennie mint a belépés időpontja!");\r
-               } else {\r
-                       selectedObject.setTcOut(new Float(doubleVar.floatValue()));\r
-               }\r
+               logger.info("Create breakpoint at {}", doubleVar);\r
        }\r
 \r
        @Command\r