git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Thu, 16 Sep 2021 19:06:35 +0000 (19:06 +0000)
committervasary.daniel <TFS\vasary.daniel>
Thu, 16 Sep 2021 19:06:35 +0000 (19:06 +0000)
12 files changed:
server/-configuration/run-mediacube-server-mv.launch
server/-product/production/HIRTV/jobs/schedules.json
server/-product/production/MEDIAVIVANTIS/jobs/executors.xml
server/-product/production/MEDIAVIVANTIS/jobs/schedules.json
server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml [new file with mode: 0644]
server/hu.user.mediacube.executors.tests/settings/application.yaml
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java [new file with mode: 0644]
server/user.jobengine.executors/META-INF/MANIFEST.MF
server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java
server/user.mediacube.gui/src/user/jobengine/zk/model/JobSelectorModel.java

index 5e4df1ae4e8da4bcabb9ebd475f6aff06ab0f621..f08e5a1f94bea4634d9bd1204b139e95b96fb7da 100644 (file)
@@ -21,7 +21,7 @@
     <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;-Dlog4j.configurationFile=settings/log4j2.xml&#13;&#10;-Djetty.home=settings&#13;&#10;-Djetty.etc.config.urls=jetty.xml&#13;&#10;-Dgosh.home=configuration&#13;&#10;-Djava.io.tmpdir=tmp"/>\r
-    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="C:\_workspace\USER\MediaCube\server\-product\production\MEDIAVIVANTIS"/>\r
+    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}\-product\production\MEDIAVIVANTIS"/>\r
     <stringAttribute key="pde.version" value="3.3"/>\r
     <setAttribute key="selected_target_bundles">\r
         <setEntry value="cglib@default:default"/>\r
index f6428f7e633eebedce62ce9f6617b8e6623bb36a..05dbfadd775e8b7b0d8cde2385c75893ac415c3c 100644 (file)
                                }\r
                        ]\r
                },\r
+               {\r
+                       "active": false,\r
+                       "cronexpression": "0/2 * * * * ?",\r
+                       "template": "cancelable.xml",\r
+                       "parameters": [\r
+                               {\r
+                                       "name": "param",\r
+                                       "value": 200,\r
+                                       "type": "java.lang.Integer"\r
+                               }\r
+                       ]\r
+               },\r
                {\r
                        "active": false,\r
                        "template": "test-fork-cancelable.xml",\r
index 22205fbbe20d7e21e61395cef3bf7c02e2f74566..a0541aaea84f8a4764fa3836000122dc5dd8fe8b 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <executors>\r
+       <executor className="MetadataUpdater.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="SafeDeleteRecursive.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="SaveMediaProxy.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="DeleteFile.java" maxConcurrent="1" isRemote="false" />\r
index f9cae31a81e9802001566d1ad5a2a0deedf20e45..87d4c2ddff096b7551394975f064fa976b5ffdcb 100644 (file)
@@ -1,12 +1,15 @@
 {"joblist":[\r
        {\r
+      "template": "metadata-updater.xml"\r
+       },\r
+       {\r
       "active": false,\r
       "executeimmediate": false,\r
          "name" : "Rekurzív törlés /mnt/POLC/FINISHED_SHOWS (DEMO)",\r
       "template": "safe-delete-recursive.xml",\r
       "cronexpression": "0 */1 * * * ?",\r
       "parameters": [ \r
-               {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"},\r
+               {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"}\r
          ]\r
        },\r
        {\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java
new file mode 100644 (file)
index 0000000..681618a
--- /dev/null
@@ -0,0 +1,297 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.sql.ResultSet;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.ibatis.jdbc.SQL;\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 com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.server.steps.shared.MetadataTypeDetector;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+import user.mediacube.metadata.interfaces.MetadataType;\r
+import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions;\r
+\r
+public class MetadataUpdater extends JobStep {\r
+       private static final String EMPTY = "";\r
+       private static final String DOT = ".";\r
+       private static final Logger logger = LogManager.getLogger(MetadataUpdater.class);\r
+       private Marker csvMarker = MarkerManager.getMarker("METADATA-UPDATER-CSV");\r
+\r
+       private static final String ITEM_TITLE = "itemTitle";\r
+       private static final String ITEM_HOUSEID = "itemHouseId";\r
+       private static final String MEDIA_HOUSEID = "mediaHouseId";\r
+       private static final String MEDIA_TITLE = "mediaTitle";\r
+       private static final String MEDIA_DESCRIPTION = "mediaDescription";\r
+       private static final String MEDIA_TYPE = "mediaType";\r
+       private static final String MEDIAFILE_HOUSEID = "mediaFileHouseId";\r
+\r
+       private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
+       private Set<String> includeList;\r
+\r
+       public String createQuery() {\r
+               SQL isql = new SQL();\r
+               isql.SELECT("id");\r
+               isql.FROM("STORE");\r
+               isql.WHERE("name = 'TSM'");\r
+\r
+               SQL sql = new SQL();\r
+               sql.SELECT("i.id          AS itemId");\r
+               sql.SELECT("i.houseid     AS itemHouseId");\r
+               sql.SELECT("i.title       AS itemTitle");\r
+               //sql.SELECT("i.description AS itemdescription");\r
+               sql.SELECT("m.id          AS mediaId");\r
+               sql.SELECT("m.houseid     AS mediaHouseId");\r
+               sql.SELECT("m.title       AS mediaTitle");\r
+               sql.SELECT("m.description AS mediaDescription");\r
+               sql.SELECT("mf.houseid    AS mediaFileHouseId");\r
+               sql.FROM("MEDIAFILE mf");\r
+               sql.LEFT_OUTER_JOIN("MEDIA m ON (m.id = mf.mediaid)");\r
+               sql.LEFT_OUTER_JOIN("ITEM i ON (i.id = m.itemid)");\r
+               sql.WHERE(String.format("mf.storeid = (%s)", isql.toString()));\r
+               return sql.toString();\r
+       }\r
+\r
+       public String createCountQuery() {\r
+               SQL sql = new SQL();\r
+               sql.SELECT("COUNT(*) as count");\r
+               sql.FROM("MEDIA");\r
+               return sql.toString();\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute() throws Exception {\r
+               try {\r
+\r
+                       String location = "/opt/test-mediacube/file_list_original.txt";\r
+                       includeList = loadIncludeList(location);\r
+\r
+                       IItemManager manager = getManager();\r
+                       String sql = createCountQuery();\r
+                       long[] count = new long[1];\r
+                       count[0] = 0;\r
+                       manager.executeQuery(sql, rs -> {\r
+                               try {\r
+                                       count[0] = rs.getLong("count");\r
+                                       logger.info(getSessionMarker(), "Processing rs");\r
+                               } catch (Exception e) {\r
+                                       logger.error(getMarker(), e.getMessage());\r
+                               }\r
+                               return true;\r
+                       }, null);\r
+\r
+                       logger.info(getSessionMarker(), "Count {}", count[0]);\r
+\r
+                       long[] current = new long[1];\r
+                       current[0] = 0;\r
+\r
+                       logger.info(csvMarker, "Date;Name;isProgramById;includeContains;isMetadataEquals;itemHouseId;P itemHouseId;itemHouseIdEquals;itemTitle;P itemTitle;itemTitleEquals;mediaHouseId;"\r
+                                       + "P mediaHouseId;mediaHouseIdEquals;mediaTitle;P mediaTitle;mediaTitleEquals;"\r
+                                       + "mediaDescription;P mediaDescription;mediaDescriptionEquals;");\r
+                       \r
+                       \r
+                       sql = createQuery();\r
+                       manager.executeQuery(sql, rs -> {\r
+\r
+                               if (getJobRuntime().isWaitingCancel())\r
+                                       return false;\r
+\r
+                               current[0]++;\r
+                               processRecord(rs);\r
+                               int p = (int) current[0] * 100 / (int) count[0];\r
+                               setProgress(p);\r
+                               return true;\r
+                       }, null);\r
+\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), e.getMessage());\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private String set(String value) {\r
+               return value == null ? EMPTY : value;\r
+       }\r
+\r
+       private void processRecord(ResultSet rs) {\r
+               try {\r
+                       String itemHouseId = set(rs.getString(ITEM_TITLE));\r
+                       String itemTitle = set(rs.getString(ITEM_TITLE));\r
+                       String mediaHouseId = set(rs.getString(MEDIA_HOUSEID));\r
+                       String mediaTitle = set(rs.getString(MEDIA_TITLE));\r
+                       String mediaDescription = set(rs.getString(MEDIA_DESCRIPTION));\r
+                       String pitemHouseId = EMPTY;\r
+                       String pitemTitle = EMPTY;\r
+                       String pmediaHouseId = EMPTY;\r
+                       String pmediaTitle = EMPTY;\r
+                       String pmediaDescription = EMPTY;\r
+\r
+                       String fileName = rs.getString(MEDIAFILE_HOUSEID);\r
+                       String mediaFileHouseId = fileName;\r
+                       if (mediaFileHouseId.contains(DOT))\r
+                               mediaFileHouseId = mediaFileHouseId.substring(0, mediaFileHouseId.lastIndexOf(DOT));\r
+\r
+                       user.jobengine.server.steps.shared.MetadataType metadataType = MetadataTypeDetector\r
+                                       .GuessMetadataType(mediaFileHouseId);\r
+\r
+                       boolean isProgramById = false;\r
+                       boolean includeContains = includeList.contains(fileName);\r
+                       boolean itemHouseIdEquals = false;\r
+                       boolean itemTitleEquals = false;\r
+                       boolean mediaHouseIdEquals = false;\r
+                       boolean mediaTitleEquals = false;\r
+                       boolean mediaDescriptionEquals = false;\r
+\r
+                       logger.info(getMarker(), "{} {}", mediaFileHouseId, metadataType);\r
+                       ArchiveItem archiveItem = getPlanAirMetadata(mediaFileHouseId);\r
+                       if (archiveItem != null) {\r
+                               isProgramById = true;\r
+\r
+                               if (isProgramById) {\r
+\r
+                                       pitemHouseId = set(archiveItem.getItemHouseId());\r
+                                       itemHouseIdEquals = pitemHouseId.equals(itemHouseId);\r
+\r
+                                       pitemTitle = set(archiveItem.getItemTitle());\r
+                                       itemTitleEquals = pitemTitle.equals(itemTitle);\r
+\r
+                                       pmediaHouseId = set(archiveItem.getMediaHouseId());\r
+                                       mediaHouseIdEquals = pmediaHouseId.equals(mediaHouseId);\r
+\r
+                                       pmediaTitle = set(archiveItem.getMediaTitle());\r
+                                       mediaTitleEquals = pmediaTitle.equals(mediaTitle);\r
+\r
+                                       pmediaDescription = set(archiveItem.getMediaDescription());\r
+                                       mediaDescriptionEquals = pmediaDescription.equals(mediaDescription);\r
+\r
+                                       boolean isMetadataEquals = itemHouseIdEquals && itemTitleEquals && mediaHouseIdEquals\r
+                                                       && mediaTitleEquals && mediaDescriptionEquals;\r
+\r
+                                       Date now = new Date(System.currentTimeMillis());\r
+                                       logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now),\r
+                                                       fileName, YN(isProgramById), YN(includeContains), YN(isMetadataEquals), itemHouseId,\r
+                                                       pitemHouseId, itemHouseIdEquals, itemTitle, pitemTitle, itemTitleEquals, mediaHouseId,\r
+                                                       pmediaHouseId, mediaHouseIdEquals, mediaTitle, pmediaTitle, mediaTitleEquals,\r
+                                                       mediaDescription, pmediaDescription, mediaDescriptionEquals);\r
+\r
+                                       logger.info(getSessionMarker(), "Processed {} {}{}{}", fileName, YN(isProgramById),\r
+                                                       YN(includeContains), YN(isMetadataEquals));\r
+                               }\r
+                       }\r
+\r
+               } catch (\r
+\r
+               Exception e) {\r
+                       logger.error(getSessionMarker(), e.getMessage());\r
+               }\r
+\r
+       }\r
+\r
+       private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception {\r
+               PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();\r
+               opt.setSearch(mediaHouseId);\r
+               opt.setType(MetadataType.Material);\r
+\r
+               BasicDBObject json = null;\r
+               List<IMetadata> data = null;\r
+\r
+               IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProviderFactory is null");\r
+\r
+               IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+               if (planairProvider == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProvider is null");\r
+\r
+               ArchiveItem result = null;\r
+               data = planairProvider.list(opt);\r
+               if (data.size() != 0)\r
+                       json = data.get(0).asJSON();\r
+               else {\r
+                       opt.setType(MetadataType.Promo);\r
+                       data = planairProvider.list(opt);\r
+                       if (data.size() != 0)\r
+                               json = data.get(0).asJSON();\r
+                       else {\r
+                               opt.setType(MetadataType.AD);\r
+                               data = planairProvider.list(opt);\r
+                               if (data.size() != 0)\r
+                                       json = data.get(0).asJSON();\r
+                       }\r
+               }\r
+               if (json != null) {\r
+                       result = new ArchiveItem();\r
+                       result.setItemHouseId(json.getString(ITEM_HOUSEID));\r
+                       result.setItemTitle(json.getString(ITEM_TITLE));\r
+                       result.setMediaHouseId(json.getString(MEDIA_HOUSEID));\r
+                       result.setMediaTitle(json.getString(MEDIA_TITLE));\r
+                       result.setMediaDescription(json.getString(MEDIA_DESCRIPTION));\r
+                       result.setMediaType(json.getString(MEDIA_TYPE));\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private char YN(boolean value) {\r
+               return value ? 'Y' : 'N';\r
+       }\r
+\r
+       private String D(Date value) {\r
+               return value == null ? EMPTY : df.format(value);\r
+       }\r
+\r
+       private Set<String> loadIncludeList(String location) throws IOException {\r
+               logger.info(getSessionMarker(), "Loading include list {}", location);\r
+               Set<String> result = new LinkedHashSet<>();\r
+\r
+               Path path = Paths.get(location);\r
+               List<String> lines = FileUtils.readLines(path.toFile());\r
+\r
+               String lastDir = null;\r
+               for (String line : lines) {\r
+                       line = line.trim();\r
+                       if (line.startsWith("Directory of")) {\r
+                               lastDir = line;\r
+                               lastDir = lastDir.replace("Directory of", EMPTY);\r
+                               lastDir = lastDir.replace("X:", EMPTY);\r
+                               lastDir = lastDir.replace("\\", "/");\r
+                               lastDir = lastDir.trim();\r
+                       }\r
+\r
+                       if (lastDir != null && lastDir.endsWith(".STATUS"))\r
+                               continue;\r
+\r
+                       if (line.startsWith("2") && line.length() > 39) {\r
+                               String file = line.substring(39).trim();\r
+\r
+                               if (file.equals(DOT) || file.equals(".."))\r
+                                       continue;\r
+\r
+                               String len = line.substring(21, 39).trim();\r
+                               if (len.length() != 0) {\r
+                                       String fullpath = "/mnt/POLC/FINISHED_SHOWS" + lastDir + "/" + file;\r
+                                       result.add(Paths.get(fullpath).getFileName().toString());\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+}\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml
new file mode 100644 (file)
index 0000000..f516c3e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Metaadat szinkronizálás">\r
+       <commands>\r
+               <calljobstep type="MetadataUpdater.java" />\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index bb5f8c7b1e6e8f6d47ba63732760d0b82861c24d..55e5eedb82cb3f14a5b7d196907ff26231ab698b 100644 (file)
@@ -1,6 +1,6 @@
 datasource:\r
    mediacube:\r
-      url: jdbc:db2://10.10.1.27:50000/mc\r
+      url: jdbc:db2://10.11.1.90:50000/mc\r
       user: db2admin\r
       password: password\r
       external-indexer: false\r
@@ -8,7 +8,7 @@ datasource:
       login-timeout: 3\r
       pool-size: 10\r
    mediacube-nosql:\r
-      url: jdbc:db2://10.10.1.27:50000/mc\r
+      url: jdbc:db2://10.11.1.90:50000/mc\r
       user: db2admin\r
       password: password\r
       schema: test\r
diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java
new file mode 100644 (file)
index 0000000..30125b2
--- /dev/null
@@ -0,0 +1,67 @@
+package hu.user.mediacube.executors.tests;\r
+\r
+import org.apache.ibatis.jdbc.SQL;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.ItemManager;\r
+\r
+/***\r
+ * MediaVivantis delete-materials.log-bol kepzett file vizsgalata\r
+ * pl. cat delete-materials-12-30-2020-1.log delete-materials-04-16-2021-1.log | grep 'killdate bejegyzés alapján sikeresen' > deleted_finished_shows.txt\r
+ * @author elgekko\r
+ */\r
+public class SupportSelectAll {\r
+       Logger logger = LogManager.getLogger();\r
+\r
+       protected static IItemManager manager = null;\r
+\r
+       @BeforeClass\r
+       static public void setUpConnection() throws Exception {\r
+               manager = new ItemManager();\r
+               manager.connect();\r
+       }\r
+\r
+       @AfterClass\r
+       static public void tearDownConnection() throws Exception {\r
+               manager.disconnect();\r
+       }\r
+\r
+       public String createQuery() {\r
+               SQL isql = new SQL();\r
+               isql.SELECT("id");\r
+               isql.FROM("STORE");\r
+               isql.WHERE("name = 'TSM'");\r
+\r
+               SQL sql = new SQL();\r
+               sql.SELECT("i.id          AS itemid");\r
+               sql.SELECT("i.houseid     AS itemhouseid");\r
+               sql.SELECT("i.title       AS itemtitle");\r
+               sql.SELECT("i.description AS itemdescription");\r
+               sql.SELECT("m.id          AS mediaid");\r
+               sql.SELECT("m.houseid     AS mediahouseid");\r
+               sql.SELECT("m.title       AS mediatitle");\r
+               sql.SELECT("m.description AS mediadescription");\r
+               sql.SELECT("mf.houseid    AS mediafilehouseid");\r
+               sql.FROM("MEDIAFILE mf");\r
+               sql.LEFT_OUTER_JOIN("MEDIA m ON (m.id = mf.mediaid)");\r
+               sql.LEFT_OUTER_JOIN("ITEM i ON (i.id = m.itemid)");\r
+               sql.WHERE(String.format("mf.storeid = (%s)", isql.toString()));\r
+               sql.FETCH_FIRST_ROWS_ONLY(10);\r
+               return sql.toString();\r
+       }\r
+\r
+       @Test\r
+       public void checkDeletedFinishedShows() throws Exception {\r
+               String sql = createQuery();\r
+               manager.executeQuery(sql, rs -> {\r
+                       logger.info("ID {}", rs.getLong("itemid"));\r
+                       return true;\r
+               }, null);\r
+\r
+       }\r
+}\r
index 48c567382bc9ea3e1fea5b2ca8640f0583e1fe32..0a05cc27a8c053c3ed4cc7a7a6ae317a64ed0787 100644 (file)
@@ -41,6 +41,7 @@ Import-Package: groovy.lang;version="3.0.3",
  org.apache.http.message,
  org.apache.http.params,
  org.apache.http.protocol,
+ org.apache.ibatis.jdbc;version="3.5.2",
  org.apache.logging.log4j;version="2.8.2",
  org.apache.logging.log4j.message;version="2.8.2",
  org.joda.time;version="2.2.0",
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java
new file mode 100644 (file)
index 0000000..681618a
--- /dev/null
@@ -0,0 +1,297 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.sql.ResultSet;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.ibatis.jdbc.SQL;\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 com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.server.steps.shared.MetadataTypeDetector;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+import user.mediacube.metadata.interfaces.MetadataType;\r
+import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions;\r
+\r
+public class MetadataUpdater extends JobStep {\r
+       private static final String EMPTY = "";\r
+       private static final String DOT = ".";\r
+       private static final Logger logger = LogManager.getLogger(MetadataUpdater.class);\r
+       private Marker csvMarker = MarkerManager.getMarker("METADATA-UPDATER-CSV");\r
+\r
+       private static final String ITEM_TITLE = "itemTitle";\r
+       private static final String ITEM_HOUSEID = "itemHouseId";\r
+       private static final String MEDIA_HOUSEID = "mediaHouseId";\r
+       private static final String MEDIA_TITLE = "mediaTitle";\r
+       private static final String MEDIA_DESCRIPTION = "mediaDescription";\r
+       private static final String MEDIA_TYPE = "mediaType";\r
+       private static final String MEDIAFILE_HOUSEID = "mediaFileHouseId";\r
+\r
+       private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
+       private Set<String> includeList;\r
+\r
+       public String createQuery() {\r
+               SQL isql = new SQL();\r
+               isql.SELECT("id");\r
+               isql.FROM("STORE");\r
+               isql.WHERE("name = 'TSM'");\r
+\r
+               SQL sql = new SQL();\r
+               sql.SELECT("i.id          AS itemId");\r
+               sql.SELECT("i.houseid     AS itemHouseId");\r
+               sql.SELECT("i.title       AS itemTitle");\r
+               //sql.SELECT("i.description AS itemdescription");\r
+               sql.SELECT("m.id          AS mediaId");\r
+               sql.SELECT("m.houseid     AS mediaHouseId");\r
+               sql.SELECT("m.title       AS mediaTitle");\r
+               sql.SELECT("m.description AS mediaDescription");\r
+               sql.SELECT("mf.houseid    AS mediaFileHouseId");\r
+               sql.FROM("MEDIAFILE mf");\r
+               sql.LEFT_OUTER_JOIN("MEDIA m ON (m.id = mf.mediaid)");\r
+               sql.LEFT_OUTER_JOIN("ITEM i ON (i.id = m.itemid)");\r
+               sql.WHERE(String.format("mf.storeid = (%s)", isql.toString()));\r
+               return sql.toString();\r
+       }\r
+\r
+       public String createCountQuery() {\r
+               SQL sql = new SQL();\r
+               sql.SELECT("COUNT(*) as count");\r
+               sql.FROM("MEDIA");\r
+               return sql.toString();\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute() throws Exception {\r
+               try {\r
+\r
+                       String location = "/opt/test-mediacube/file_list_original.txt";\r
+                       includeList = loadIncludeList(location);\r
+\r
+                       IItemManager manager = getManager();\r
+                       String sql = createCountQuery();\r
+                       long[] count = new long[1];\r
+                       count[0] = 0;\r
+                       manager.executeQuery(sql, rs -> {\r
+                               try {\r
+                                       count[0] = rs.getLong("count");\r
+                                       logger.info(getSessionMarker(), "Processing rs");\r
+                               } catch (Exception e) {\r
+                                       logger.error(getMarker(), e.getMessage());\r
+                               }\r
+                               return true;\r
+                       }, null);\r
+\r
+                       logger.info(getSessionMarker(), "Count {}", count[0]);\r
+\r
+                       long[] current = new long[1];\r
+                       current[0] = 0;\r
+\r
+                       logger.info(csvMarker, "Date;Name;isProgramById;includeContains;isMetadataEquals;itemHouseId;P itemHouseId;itemHouseIdEquals;itemTitle;P itemTitle;itemTitleEquals;mediaHouseId;"\r
+                                       + "P mediaHouseId;mediaHouseIdEquals;mediaTitle;P mediaTitle;mediaTitleEquals;"\r
+                                       + "mediaDescription;P mediaDescription;mediaDescriptionEquals;");\r
+                       \r
+                       \r
+                       sql = createQuery();\r
+                       manager.executeQuery(sql, rs -> {\r
+\r
+                               if (getJobRuntime().isWaitingCancel())\r
+                                       return false;\r
+\r
+                               current[0]++;\r
+                               processRecord(rs);\r
+                               int p = (int) current[0] * 100 / (int) count[0];\r
+                               setProgress(p);\r
+                               return true;\r
+                       }, null);\r
+\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), e.getMessage());\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private String set(String value) {\r
+               return value == null ? EMPTY : value;\r
+       }\r
+\r
+       private void processRecord(ResultSet rs) {\r
+               try {\r
+                       String itemHouseId = set(rs.getString(ITEM_TITLE));\r
+                       String itemTitle = set(rs.getString(ITEM_TITLE));\r
+                       String mediaHouseId = set(rs.getString(MEDIA_HOUSEID));\r
+                       String mediaTitle = set(rs.getString(MEDIA_TITLE));\r
+                       String mediaDescription = set(rs.getString(MEDIA_DESCRIPTION));\r
+                       String pitemHouseId = EMPTY;\r
+                       String pitemTitle = EMPTY;\r
+                       String pmediaHouseId = EMPTY;\r
+                       String pmediaTitle = EMPTY;\r
+                       String pmediaDescription = EMPTY;\r
+\r
+                       String fileName = rs.getString(MEDIAFILE_HOUSEID);\r
+                       String mediaFileHouseId = fileName;\r
+                       if (mediaFileHouseId.contains(DOT))\r
+                               mediaFileHouseId = mediaFileHouseId.substring(0, mediaFileHouseId.lastIndexOf(DOT));\r
+\r
+                       user.jobengine.server.steps.shared.MetadataType metadataType = MetadataTypeDetector\r
+                                       .GuessMetadataType(mediaFileHouseId);\r
+\r
+                       boolean isProgramById = false;\r
+                       boolean includeContains = includeList.contains(fileName);\r
+                       boolean itemHouseIdEquals = false;\r
+                       boolean itemTitleEquals = false;\r
+                       boolean mediaHouseIdEquals = false;\r
+                       boolean mediaTitleEquals = false;\r
+                       boolean mediaDescriptionEquals = false;\r
+\r
+                       logger.info(getMarker(), "{} {}", mediaFileHouseId, metadataType);\r
+                       ArchiveItem archiveItem = getPlanAirMetadata(mediaFileHouseId);\r
+                       if (archiveItem != null) {\r
+                               isProgramById = true;\r
+\r
+                               if (isProgramById) {\r
+\r
+                                       pitemHouseId = set(archiveItem.getItemHouseId());\r
+                                       itemHouseIdEquals = pitemHouseId.equals(itemHouseId);\r
+\r
+                                       pitemTitle = set(archiveItem.getItemTitle());\r
+                                       itemTitleEquals = pitemTitle.equals(itemTitle);\r
+\r
+                                       pmediaHouseId = set(archiveItem.getMediaHouseId());\r
+                                       mediaHouseIdEquals = pmediaHouseId.equals(mediaHouseId);\r
+\r
+                                       pmediaTitle = set(archiveItem.getMediaTitle());\r
+                                       mediaTitleEquals = pmediaTitle.equals(mediaTitle);\r
+\r
+                                       pmediaDescription = set(archiveItem.getMediaDescription());\r
+                                       mediaDescriptionEquals = pmediaDescription.equals(mediaDescription);\r
+\r
+                                       boolean isMetadataEquals = itemHouseIdEquals && itemTitleEquals && mediaHouseIdEquals\r
+                                                       && mediaTitleEquals && mediaDescriptionEquals;\r
+\r
+                                       Date now = new Date(System.currentTimeMillis());\r
+                                       logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now),\r
+                                                       fileName, YN(isProgramById), YN(includeContains), YN(isMetadataEquals), itemHouseId,\r
+                                                       pitemHouseId, itemHouseIdEquals, itemTitle, pitemTitle, itemTitleEquals, mediaHouseId,\r
+                                                       pmediaHouseId, mediaHouseIdEquals, mediaTitle, pmediaTitle, mediaTitleEquals,\r
+                                                       mediaDescription, pmediaDescription, mediaDescriptionEquals);\r
+\r
+                                       logger.info(getSessionMarker(), "Processed {} {}{}{}", fileName, YN(isProgramById),\r
+                                                       YN(includeContains), YN(isMetadataEquals));\r
+                               }\r
+                       }\r
+\r
+               } catch (\r
+\r
+               Exception e) {\r
+                       logger.error(getSessionMarker(), e.getMessage());\r
+               }\r
+\r
+       }\r
+\r
+       private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception {\r
+               PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();\r
+               opt.setSearch(mediaHouseId);\r
+               opt.setType(MetadataType.Material);\r
+\r
+               BasicDBObject json = null;\r
+               List<IMetadata> data = null;\r
+\r
+               IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProviderFactory is null");\r
+\r
+               IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+               if (planairProvider == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProvider is null");\r
+\r
+               ArchiveItem result = null;\r
+               data = planairProvider.list(opt);\r
+               if (data.size() != 0)\r
+                       json = data.get(0).asJSON();\r
+               else {\r
+                       opt.setType(MetadataType.Promo);\r
+                       data = planairProvider.list(opt);\r
+                       if (data.size() != 0)\r
+                               json = data.get(0).asJSON();\r
+                       else {\r
+                               opt.setType(MetadataType.AD);\r
+                               data = planairProvider.list(opt);\r
+                               if (data.size() != 0)\r
+                                       json = data.get(0).asJSON();\r
+                       }\r
+               }\r
+               if (json != null) {\r
+                       result = new ArchiveItem();\r
+                       result.setItemHouseId(json.getString(ITEM_HOUSEID));\r
+                       result.setItemTitle(json.getString(ITEM_TITLE));\r
+                       result.setMediaHouseId(json.getString(MEDIA_HOUSEID));\r
+                       result.setMediaTitle(json.getString(MEDIA_TITLE));\r
+                       result.setMediaDescription(json.getString(MEDIA_DESCRIPTION));\r
+                       result.setMediaType(json.getString(MEDIA_TYPE));\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private char YN(boolean value) {\r
+               return value ? 'Y' : 'N';\r
+       }\r
+\r
+       private String D(Date value) {\r
+               return value == null ? EMPTY : df.format(value);\r
+       }\r
+\r
+       private Set<String> loadIncludeList(String location) throws IOException {\r
+               logger.info(getSessionMarker(), "Loading include list {}", location);\r
+               Set<String> result = new LinkedHashSet<>();\r
+\r
+               Path path = Paths.get(location);\r
+               List<String> lines = FileUtils.readLines(path.toFile());\r
+\r
+               String lastDir = null;\r
+               for (String line : lines) {\r
+                       line = line.trim();\r
+                       if (line.startsWith("Directory of")) {\r
+                               lastDir = line;\r
+                               lastDir = lastDir.replace("Directory of", EMPTY);\r
+                               lastDir = lastDir.replace("X:", EMPTY);\r
+                               lastDir = lastDir.replace("\\", "/");\r
+                               lastDir = lastDir.trim();\r
+                       }\r
+\r
+                       if (lastDir != null && lastDir.endsWith(".STATUS"))\r
+                               continue;\r
+\r
+                       if (line.startsWith("2") && line.length() > 39) {\r
+                               String file = line.substring(39).trim();\r
+\r
+                               if (file.equals(DOT) || file.equals(".."))\r
+                                       continue;\r
+\r
+                               String len = line.substring(21, 39).trim();\r
+                               if (len.length() != 0) {\r
+                                       String fullpath = "/mnt/POLC/FINISHED_SHOWS" + lastDir + "/" + file;\r
+                                       result.add(Paths.get(fullpath).getFileName().toString());\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+}\r
index 7f71708819958c1617308bd3115256781516ed97..a82cd32e91af51bef9d6ad9b9b64ae91d48bc6fe 100644 (file)
@@ -329,6 +329,8 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
 \r
        @Override\r
        public void loadSchedules() throws Exception {\r
+\r
+               //a kulcs nem lehet a template, mert kulonbozo parameterekkel is benne lehet!\r
                schedules.clear();\r
                String configFilePath = systemConfig.getConfig(JobEngineConfiguration.CONF_SCHEDULES);\r
                logger.info("Loading scheduler configuration file {}", configFilePath);\r
@@ -356,7 +358,9 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                                        && file.getFileName().toString().endsWith(".java");\r
                        try (Stream<Path> stream = Files.list(path)) {\r
                                stream.filter(filter).forEach(p -> {\r
-                                       if (excludeFileName != null && !excludeFileName.equals(p.getFileName().toString()))\r
+                                       if (excludeFileName == null)\r
+                                               result.add(p.toFile());\r
+                                       else if (!excludeFileName.equals(p.getFileName().toString()))\r
                                                result.add(p.toFile());\r
 \r
                                });\r
index d6a5919d9af3b92dad08c1d8299525a1621c523c..fa8ca9e8361cb46cf9f02a522e4563f954e42927 100644 (file)
@@ -58,7 +58,11 @@ public class JobSelectorModel extends BaseModel {
                if (selectedJob == null)\r
                        return;\r
                String template = selectedJob.getString("template");\r
+\r
+               //ez bugos, az azonos template mas parameterekkel elnyelodik\r
                ScheduledJob scheduledJob = jobEngine.getScheduledJob(template);\r
+\r
+               //ScheduledJob scheduledJob = jobEngine.getJobEngineConfiguration().createScheduledJob(selectedJob, jobEngine);\r
                try {\r
                        scheduledJob.doManualJob();\r
                } catch (Exception e) {\r
@@ -87,7 +91,8 @@ public class JobSelectorModel extends BaseModel {
        }\r
 \r
        private void initJobList() {\r
-               List<BasicDBObject> jobsCollection = new ArrayList<>(jobEngine.getJobEngineConfiguration().getSchedules().values());\r
+               List<BasicDBObject> jobsCollection = new ArrayList<>(\r
+                               jobEngine.getJobEngineConfiguration().getSchedules().values());\r
                Collections.sort(jobsCollection, (a, b) -> {\r
                        String aName = a.getString("name");\r
                        if (aName == null)\r