git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 21 May 2019 11:26:08 +0000 (11:26 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 21 May 2019 11:26:08 +0000 (11:26 +0000)
server/-configuration/run-mediacube-server-bsh.launch
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/jobtemplates/delete-promo-materials.xml [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/searchitems.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java

index b5abf0ffe55d8ad00ee38d4d145901763bb6d9ae..60593dc90510dad5c338af841d50f81381337d3c 100644 (file)
@@ -19,7 +19,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=false&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;"/>\r
 <stringAttribute key="pde.version" value="3.3"/>\r
 <booleanAttribute key="show_selected_only" value="false"/>\r
 <stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
index 3a2adc7050653044c0a54df101a87e3e5bad1f23..c164fd7fd65c94111b6584357ef083f57006ce99 100644 (file)
@@ -32,15 +32,14 @@ import user.commons.ListUtils;
 import user.commons.logging.LogUtils;\r
 import user.commons.nosql.NoSQLUtils;\r
 import user.jobengine.db.IItemManager;\r
-import user.jobengine.db.IResultSetConsumer;\r
 import user.jobengine.db.Item;\r
 import user.jobengine.db.ItemManager;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.db.MediaFile;\r
+import user.jobengine.server.JobRuntime;\r
 import user.jobengine.server.steps.ItemManagerExtensions;\r
-import user.jobengine.server.steps.MetadataTypeDetector;\r
-import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
 import user.jobengine.server.steps.PlanAirExtensions;\r
+import user.jobengine.server.steps.ProjectCleanupMountedLocationStep;\r
 import user.jobengine.server.steps.RundownArchive;\r
 \r
 public class Support {\r
@@ -97,7 +96,7 @@ public class Support {
                        }\r
                        stream.close();\r
 \r
-                       check_rd_process(allFiles, allStatus);\r
+                       //check_rd_process(allFiles, allStatus);\r
                } catch (Exception e) {\r
                        System.err.println(e.getMessage());\r
                }\r
@@ -136,37 +135,37 @@ public class Support {
                return null;\r
        }\r
 \r
-       private void check_rd_process(List<String> allFiles, List<String> allStatus) {\r
-               File mediaFile = mediaFilePath.toFile();\r
-               if (mediaFile.isDirectory() || !mediaFile.getName().toUpperCase().endsWith(".MXF"))\r
-                       return;\r
-               Path status = Paths.get(mediaFilePath.getParent().toString(), ".STATUS", mediaFile.getName() + ".json");\r
-               if (!status.toFile().exists()) {\r
-                       System.out.println("Nincs JSON: " + mediaFile.getAbsolutePath());\r
-               }\r
-\r
-               if (mediaFile.length() == 0) {\r
-                       String houseid = mediaFile.getName().substring(0, mediaFile.getName().lastIndexOf("."));\r
-                       final String idToCheck = houseid.substring(0, houseid.lastIndexOf("-"));\r
-                       MetadataType metadataType = MetadataTypeDetector.GuessMetadataType(idToCheck);\r
-                       if (metadataType == MetadataType.OctopusPlaceholder) {\r
-                               String query = String.format("select count(*) from mediafile where houseid like '%s%%'", idToCheck);\r
-                               IResultSetConsumer consumer = rs -> {\r
-                                       if (rs.getInt(1) == 0) {\r
-\r
-                                               File f = check_rd_nonzero_fellow(idToCheck, allFiles);\r
-                                               if (f == null)\r
-                                                       System.out.println("0 még sincs korábbi: " + mediaFile.getAbsolutePath());\r
-\r
-                                       }\r
-                                       return false;\r
-                               };\r
-                               manager.executeQuery(query, consumer, null);\r
-                       }\r
-\r
-               }\r
-\r
-       }\r
+       //      private void check_rd_process(List<String> allFiles, List<String> allStatus) {\r
+       //              File mediaFile = mediaFilePath.toFile();\r
+       //              if (mediaFile.isDirectory() || !mediaFile.getName().toUpperCase().endsWith(".MXF"))\r
+       //                      return;\r
+       //              Path status = Paths.get(mediaFilePath.getParent().toString(), ".STATUS", mediaFile.getName() + ".json");\r
+       //              if (!status.toFile().exists()) {\r
+       //                      System.out.println("Nincs JSON: " + mediaFile.getAbsolutePath());\r
+       //              }\r
+       //\r
+       //              if (mediaFile.length() == 0) {\r
+       //                      String houseid = mediaFile.getName().substring(0, mediaFile.getName().lastIndexOf("."));\r
+       //                      final String idToCheck = houseid.substring(0, houseid.lastIndexOf("-"));\r
+       //                      MetadataType metadataType = MetadataTypeDetector.GuessMetadataType(idToCheck);\r
+       //                      if (metadataType == MetadataType.OctopusPlaceholder) {\r
+       //                              String query = String.format("select count(*) from mediafile where houseid like '%s%%'", idToCheck);\r
+       //                              IResultSetConsumer consumer = rs -> {\r
+       //                                      if (rs.getInt(1) == 0) {\r
+       //\r
+       //                                              File f = check_rd_nonzero_fellow(idToCheck, allFiles);\r
+       //                                              if (f == null)\r
+       //                                                      System.out.println("0 még sincs korábbi: " + mediaFile.getAbsolutePath());\r
+       //\r
+       //                                      }\r
+       //                                      return false;\r
+       //                              };\r
+       //                              manager.executeQuery(query, consumer, null);\r
+       //                      }\r
+       //\r
+       //              }\r
+       //\r
+       //      }\r
 \r
        private void rescue_archive(RescueNEXIOMaterials processor, String clipName, long duration) throws Exception {\r
                /*\r
@@ -220,6 +219,13 @@ public class Support {
                assertTrue(actual.length() > 0);\r
        }\r
 \r
+       @Test\r
+       public void test_ProjectCleanupMountedLocationStep() throws Exception {\r
+               //TODO\r
+               ProjectCleanupMountedLocationStep sut = new ProjectCleanupMountedLocationStep();\r
+               sut.execute("c:\\_video\\projects", null, new JobRuntime());\r
+       }\r
+\r
        @Test\r
        public void test_Solr() throws Exception {\r
                //http://lucene.apache.org/solr/guide/7_5/using-solrj.html#using-solrj\r
@@ -260,5 +266,4 @@ public class Support {
 \r
                System.out.println("itemid=" + i.getId() + " AND mediaid=" + m.getId() + " AND mediafileid=" + mf.getId());\r
        }\r
-\r
 }\r
index 744df7f4b854e9a12d0293e3bd929cb80d69a363..a4cfd3bad57c1078a0a065b88bb450e60cd4f4bb 100644 (file)
@@ -7,6 +7,7 @@
        <executor className="user.jobengine.server.steps.CheckMORPHEUSMissingMaterialsStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CheckTRAFFICMissingMaterialsStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CleanupMountedLocationStep" maxConcurrent="10"/>\r
+       <executor className="user.jobengine.server.steps.ProjectCleanupMountedLocationStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CopyForArchiveNEXIOMaterialsStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CopyForArchiveNEXIORecordingsStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CreateMissingLowresStep" maxConcurrent="1"/>\r
diff --git a/server/user.jobengine.executors/jobtemplates/delete-promo-materials.xml b/server/user.jobengine.executors/jobtemplates/delete-promo-materials.xml
new file mode 100644 (file)
index 0000000..3dc9a7d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Anyagok törlése" multiInstance="true">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="sourcePath" type="java.lang.String"/>\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep id="id1" type="user.jobengine.server.steps.ProjectCleanupMountedLocationStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="sourcePath" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index e623850ec42cde6e6b7b57c599d238c4e8827639..9c4d021dd8b611fa77bf20836d9a072f11a229cb 100644 (file)
@@ -46,7 +46,8 @@ public class CreateMissingLowresStep extends JobStep {
 \r
                } catch (Exception e) {\r
                        logger.catching(e);\r
-                       logger.error(marker, e.getMessage());\r
+                       logger.info(marker, e.getMessage());\r
+                       throw e;\r
                } finally {\r
                        setProgress(100);\r
                }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ProjectCleanupMountedLocationStep.java
new file mode 100644 (file)
index 0000000..27f1b5e
--- /dev/null
@@ -0,0 +1,210 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\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
+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
+import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
+\r
+public class ProjectCleanupMountedLocationStep extends JobStep implements FileVisitor<Path> {\r
+\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String DATEFORMAT = "yyyyMMdd";\r
+       private static final String DOT = ".";\r
+       private static final String STATUSFOLDER = ".STATUS";\r
+       private static final String KILLDATEEXT = ".killdate";\r
+       private Marker marker;\r
+       final int[] allCount = { 0 };\r
+       final int[] currentCount = { 0 };\r
+       private Path sourcePath;\r
+       private SimpleDateFormat dateFormat;\r
+\r
+       private Date checkExpiration(List<Path> killDateFiles) {\r
+               Date killDate = null;\r
+               for (Path killDateFile : killDateFiles) {\r
+                       Date currentKillDate = getKillDate(killDateFile);\r
+                       if (currentKillDate == null)\r
+                               continue;\r
+                       if ((killDate != null && currentKillDate.after(killDate)) || killDate == null)\r
+                               killDate = currentKillDate;\r
+               }\r
+               return new Date().after(killDate) ? killDate : null;\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute(String sourceFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               marker = jobRuntime.getMarker();\r
+               sourcePath = Paths.get(sourceFolder);\r
+               DirectoryStream<Path> directoryStream = null;\r
+               if (StringUtils.isBlank(sourcePath.toString())) {\r
+                       logger.error(marker, "A folyamat 'sourcePath' bemeneti paramétere üres.");\r
+                       throw new NullPointerException("System is not configured properly, 'sourceFolder' input parameter missing.");\r
+               }\r
+\r
+               if (!sourcePath.toFile().exists() || !sourcePath.toFile().isDirectory()) {\r
+                       logger.error(marker, "A {} mappa nem létezik.", sourceFolder);\r
+                       throw new NullPointerException(String.format("Directory %s not exists.", sourceFolder));\r
+               }\r
+               try {\r
+                       setProgress(1);\r
+                       dateFormat = new SimpleDateFormat(DATEFORMAT);\r
+                       Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {\r
+                               @Override\r
+                               public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
+                                       allCount[0]++;\r
+                                       return super.visitFile(file, attrs);\r
+                               }\r
+                       });\r
+                       Files.walkFileTree(sourcePath, this);\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+                       throw e;\r
+               } finally {\r
+                       if (directoryStream != null) {\r
+                               try {\r
+                                       directoryStream.close();\r
+                               } catch (IOException e) {\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private Date getKillDate(Path killDateFile) {\r
+               String fileName = killDateFile.getFileName().toString();\r
+               int end = fileName.lastIndexOf(DOT);\r
+               if (end < 1)\r
+                       return null;\r
+               int start = fileName.lastIndexOf(DOT, end - 1);\r
+               if (start < 0)\r
+                       return null;\r
+               String strKillDate = fileName.substring(start + 1, end);\r
+               Date result = null;\r
+               if (StringUtils.isNumeric(strKillDate)) {\r
+                       try {\r
+                               result = dateFormat.parse(strKillDate);\r
+                       } catch (ParseException e) {\r
+                               logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", fileName, strKillDate);\r
+                               return null;\r
+                       }\r
+               } else\r
+                       logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", fileName, strKillDate);\r
+               return result;\r
+       }\r
+\r
+       private List<Path> getKillDateFiles(Path filePath) {\r
+               String killDateFilePattern = String.format("%s.*%s", filePath.getFileName().toString(), KILLDATEEXT);\r
+               List<Path> result = new ArrayList<>();\r
+               Path statusPath = null;\r
+               try {\r
+                       statusPath = Paths.get(filePath.getParent().toString(), STATUSFOLDER);\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       return null;\r
+               }\r
+               File statusPathFile = statusPath.toFile();\r
+               if (statusPathFile.exists() && statusPathFile.isDirectory()) {\r
+                       try (DirectoryStream<Path> stream = Files.newDirectoryStream(statusPath, killDateFilePattern)) {\r
+                               stream.forEach(p -> result.add(p));\r
+                       } catch (Exception e) {\r
+                               logger.catching(e);\r
+                       }\r
+               }\r
+               Collections.sort(result);\r
+               return result;\r
+       }\r
+\r
+       private Path getProjectRootPath(Path filePath) {\r
+               Path result = null;\r
+               if (filePath.getNameCount() > sourcePath.getNameCount()) {\r
+                       String dir = filePath.getName(sourcePath.getNameCount()).toString();\r
+                       String[] tokens = dir.split("-");\r
+                       if (tokens.length != 0 && MetadataTypeDetector.GuessMetadataType(tokens[0]) == MetadataType.TrafficPromo)\r
+                               result = Paths.get(sourcePath.toAbsolutePath().toString(), dir);\r
+               }\r
+               return result;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {\r
+               if (dir.equals(sourcePath))\r
+                       return FileVisitResult.CONTINUE;\r
+\r
+               Path parent = getProjectRootPath(dir);\r
+               if (parent == null) {\r
+                       System.out.println("Skipping " + dir);\r
+                       return FileVisitResult.SKIP_SUBTREE;\r
+               }\r
+\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       private boolean processPathItem(Path filePath) {\r
+               currentCount[0]++;\r
+               setProgress(currentCount[0] * 100 / allCount[0]);\r
+\r
+               if (filePath.toFile().isDirectory() || !filePath.toString().toUpperCase().endsWith(".EZP"))\r
+                       return false;\r
+\r
+               List<Path> killDateFiles = getKillDateFiles(filePath);\r
+               if (killDateFiles == null || killDateFiles.size() == 0) {\r
+                       logger.warn(marker, "A {} fájlhoz nem található 'killdate' állomány.", filePath);\r
+                       return false;\r
+               }\r
+\r
+               if (killDateFiles.size() != 1)\r
+                       logger.warn(marker, "A {} fájlhoz több 'killdate' állomány található, a legújabb dátum határozza meg a törlés időpontját.", filePath);\r
+\r
+               Date killDate = checkExpiration(killDateFiles);\r
+               if (killDate == null)\r
+                       return false;\r
+\r
+               Path parent = getProjectRootPath(filePath);\r
+               if (parent != null) {\r
+                       Path pathToDelete = Paths.get(sourcePath.toAbsolutePath().toString(), filePath.getName(sourcePath.getNameCount()).toString());\r
+                       //FileUtils.deleteDirectory(pathToDelete);\r
+                       logger.info(marker, "A {} mappa törölhető", pathToDelete);\r
+                       System.out.println(pathToDelete);\r
+               } else\r
+                       logger.warn(marker, "A {} fájlhoz nem határozható meg a törlendő szülőkönyvtár.", filePath);\r
+               return true;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
+               processPathItem(file);\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult visitFileFailed(Path file, IOException e) throws IOException {\r
+               logger.error(marker, "A {} fájl nem érhető el. A rendszer hibaüzenete: {}", file.toString(), e.getMessage());\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+}\r
index 3a671d1ae1e37ffff2a6733e361fd4a7d4a261e2..2c6beaedc45f923530c5f50bdd4f91f71b71caa3 100644 (file)
@@ -80,7 +80,7 @@
        <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.SearchModel')">\r
                <timer id="timer" delay="1" repeats="false" onTimer="@command('uiTick')" />\r
                <borderlayout width="100%" height="100%">\r
-                       <west border="none" size="60%" splittable="true" minsize="500">\r
+                       <west border="none" size="60%" splittable="true" minsize="500" onSize="@command('onWestResize', west=self)">\r
                                <div height="100%" width="100%">\r
                                        <groupbox vflex="min" closable="false">\r
                                                <vlayout>\r
index 79b8b9e7135976241dcb7769c6f5034cfc249cf8..fee97cd32769e39f97f39c954be71e7650b825e1 100644 (file)
@@ -19,7 +19,7 @@ import user.jobengine.server.IJobRuntime;
  */\r
 public class JobStep implements IJobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private IJobRuntime jobRuntime = null;\r
+       protected IJobRuntime jobRuntime = null;\r
 \r
        private Object[] addParameter(Method stepEntry, Object[] inputs, Class<?> type, Object parameter) {\r
                Object[] result = inputs;\r
@@ -93,6 +93,7 @@ public class JobStep implements IJobStep {
        }\r
 \r
        protected void setProgress(int progress) {\r
-               jobRuntime.incrementProgress(progress);\r
+               if (jobRuntime != null)\r
+                       jobRuntime.incrementProgress(progress);\r
        }\r
 }\r
index 171ab5eb2be4f86b9febb9cd0b126b8f56a8f2d5..238d533d906507ff8eae851e409abf8e8fbeadaf 100644 (file)
@@ -45,6 +45,7 @@ import org.zkoss.zul.Messagebox;
 import org.zkoss.zul.Paging;\r
 import org.zkoss.zul.Row;\r
 import org.zkoss.zul.Timer;\r
+import org.zkoss.zul.West;\r
 import org.zkoss.zul.Window;\r
 \r
 import user.commons.ListUtils;\r
@@ -63,12 +64,16 @@ public class SearchModel extends AsyncBaseModel {
        private static final String ARG = "arg";\r
        private static final String MEDIA_ID = "showMediaID";\r
        private static final String GENERIC = "Egyéb";\r
+       private static final String ECHO_RECORDING = "ECHO visszarögzített";\r
        private static final String RECORDING = "Visszarögzített";\r
        private static final String RAW_AD = "Reklám nyers";\r
+       private static final String ECHO_AD = "ECHO reklám";\r
        private static final String AD = "Reklám";\r
        private static final String RAW_PROMO = "Promo nyers";\r
+       private static final String ECHO_PROMO = "ECHO promo";\r
        private static final String PROMO = "Promo";\r
        private static final String RAW_MATERIAL = "Műsor nyers";\r
+       private static final String ECHO_MATERIAL = "ECHO műsor";\r
        private static final String MATERIAL = "Műsor";\r
        private static final String RAW_NEWS_MATERIAL = "Hír nyers";\r
        private static final String NEWS_MATERIAL = "Hír bejátszó";\r
@@ -79,7 +84,7 @@ public class SearchModel extends AsyncBaseModel {
        private Map<String, TypeFilter> typeFilters;\r
        private Map<String, String> columnHeaders;\r
        private String searchValue = null;\r
-       private CachedListModel searchResult = null;\r
+       private ListModelList<ArchivedMedia> searchResult = null;\r
        private ArchivedMedia selectedObject = null;\r
        private Validator allFilterCheckedValidator;\r
        private Validator itemSelectedValidator;\r
@@ -121,16 +126,20 @@ public class SearchModel extends AsyncBaseModel {
                addTypeFilter(TypeFilter.as(NEWS_MATERIAL, "RED200", "ic_language_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(RAW_NEWS_MATERIAL, "RED100", "ic_perm_camera_mic_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(MATERIAL, "TEAL200", "ic_theaters_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(ECHO_MATERIAL, "TEAL200", "ic_theaters_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(RAW_MATERIAL, "TEAL100", "ic_invert_colors_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(PROMO, "INDIGO200", "ic_picture_in_picture_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(ECHO_PROMO, "INDIGO200", "ic_picture_in_picture_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(RAW_PROMO, "INDIGO100", "ic_bug_report_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(AD, "BLUE200", "ic_picture_in_picture_alt_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(ECHO_AD, "BLUE200", "ic_picture_in_picture_alt_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(RAW_AD, "BLUE100", "ic_settings_brightness_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(RECORDING, "BROWN100", "ic_group_work_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(ECHO_RECORDING, "BROWN100", "ic_group_work_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(GENERIC, "YELLOW200", "ic_view_quilt_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(GENERIC_ORIGINAL, "YELLOW200", "ic_view_quilt_black_18dp.png"));\r
-               topTypeFilterNames = new String[] { NEWS_MATERIAL, RAW_NEWS_MATERIAL, RECORDING, GENERIC };\r
-               bottomTypeFilterNames = new String[] { MATERIAL, RAW_MATERIAL, PROMO, RAW_PROMO, AD, RAW_AD };\r
+               topTypeFilterNames = new String[] { NEWS_MATERIAL, RAW_NEWS_MATERIAL, ECHO_RECORDING, RECORDING, GENERIC };\r
+               bottomTypeFilterNames = new String[] { ECHO_MATERIAL, MATERIAL, RAW_MATERIAL, ECHO_PROMO, PROMO, RAW_PROMO, ECHO_AD, AD, RAW_AD };\r
 \r
                columnHeaders = new LinkedHashMap<>();\r
                columnHeaders.put("ID", "mediahouseid");\r
@@ -377,7 +386,7 @@ public class SearchModel extends AsyncBaseModel {
                return searchHistory;\r
        }\r
 \r
-       public CachedListModel getSearchResult() {\r
+       public ListModelList<ArchivedMedia> getSearchResult() {\r
                return searchResult;\r
        }\r
 \r
@@ -497,6 +506,11 @@ public class SearchModel extends AsyncBaseModel {
                logger.info("onPaging");\r
        }\r
 \r
+       @Command\r
+       public void onWestResize(@BindingParam("west") West _west) {\r
+               _west.invalidate();\r
+       }\r
+\r
        @Command\r
        public void openMetaDataDialog() {\r
                String template = "/pages/metadatadetails.zul";\r
index ceebf214149d65afb3b7a19848895eedd7990c9d..54619b602912c1717223e071778c648b2d47f63b 100644 (file)
@@ -30,6 +30,7 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;\r
 import org.junit.Test;\r
 \r
+import com.ibm.nosql.json.api.BasicDBList;\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 import com.ibm.nosql.json.api.DB;\r
 import com.ibm.nosql.json.api.DBCollection;\r
@@ -624,4 +625,32 @@ public class Support {
                        result = result.substring(0, result.lastIndexOf("."));\r
                System.out.println(result);\r
        }\r
+\r
+       @Test\r
+       public void updateClipRecordDate() {\r
+\r
+               DB db = NoSQLUtils.getNoSQLDB();\r
+               DBCollection collection = db.getCollection("nexioclips");\r
+               BasicDBList agencies = new BasicDBList(new Object[] { "schedule-rec" });\r
+\r
+               Calendar now = CalendarUtils.createZeroCalendar();\r
+               QueryBuilder dateQueryBuilder = QueryBuilder.start("recorddate").lessThan(now.getTime());\r
+               QueryBuilder queryBuilder = QueryBuilder.start("extagency").in(agencies).and(dateQueryBuilder.get());\r
+               DBCursor cursor = collection.find(queryBuilder.get()).sort("recorddate", -1);\r
+               if (!cursor.hasNext())\r
+                       return;\r
+               List<BasicDBObject> clips = ListUtils.cast(cursor.toArray());\r
+               for (BasicDBObject c : clips) {\r
+                       String name = c.getString("longnameid");\r
+                       Date recorddate = c.getDate("recorddate");\r
+                       if (name != null && name.toLowerCase().contains("_nodelete")) {\r
+                               //                              recorddate.setMonth(2);\r
+                               //                              recorddate.setDate(31);\r
+                               System.out.println(name + " " + recorddate);\r
+                               //                              collection.save(c);\r
+                       }\r
+\r
+               }\r
+\r
+       }\r
 }\r