git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 11 Dec 2017 21:10:24 +0000 (21:10 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 11 Dec 2017 21:10:24 +0000 (21:10 +0000)
14 files changed:
client/Maestro/Configuration/configuration-studio.json [moved from client/Maestro/Configuration/-configuration-studio.json with 100% similarity]
client/Maestro/Maestro.csproj
server/user.jobengine.executors/META-INF/MANIFEST.MF
server/user.jobengine.executors/config/scheduledjobs.json
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java
server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF
server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java
server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java
server/user.jobengine.osgi.server/pages/index.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/RundownArchive.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/StoryArchive.java [new file with mode: 0644]

index 0f5f0ecd19c533f77afcf714a2818a21b75ef82a..16808a978fd89cf45826b04edf9a527ffaa33b54 100644 (file)
     <None Include="Configuration\-configuration-sxs.json">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </None>\r
-    <None Include="Configuration\-configuration-studio.json">\r
+    <None Include="Configuration\configuration-studio.json">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </None>\r
   </ItemGroup>\r
index a27b7ba9823baaaceba53273c01ef4d1d96f58c3..27286a2e66e89f18e4b26d253531bf5db1e1777f 100644 (file)
@@ -13,4 +13,5 @@ Require-Bundle: user.jobengine.osgi.commons;bundle-version="1.0.0",
  org.apache.logging.log4j.api;bundle-version="2.8.2"
 Bundle-ClassPath: .
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.apache.commons.io;version="2.2.0"
+Import-Package: org.apache.commons.io;version="2.2.0",
+ org.apache.commons.net.ftp;version="3.6.0"
index f12581bd57911a087f70c633d17d0bdd24ef6baf..657888a1ae07396fbe2454c14cb9d365537e2971 100644 (file)
@@ -1,10 +1,20 @@
 {"joblist":[\r
        {\r
-      "active": false,\r
-         "name" : "Felhasználói archiválás",\r
+      "active": true,\r
+         "name" : "OCTOPUS adatok szinkronizálása",\r
+      "template": "sync-octopus.xml",\r
+      "executeimmediate": false,\r
+      "cronexpression": "0/30 * * * * ?",\r
+      "parameters": [\r
+       {"name": "forceFull", "value": true, "type": "java.lang.Boolean"}\r
+      ]\r
+       },      \r
+       {\r
+      "active": true,\r
+      "executeimmediate": false,\r
+         "name" : "Archiválás az ISILON/ARCHIVE mappából",\r
       "template": "archive-ondemand.xml",\r
-      "executeimmediate": true,\r
-      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "cronexpression": "0 0 12 * * ?",\r
       "parameters": [ \r
        {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"},\r
        {"name": "globalSourcePath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"},\r
       ]\r
        },\r
        {\r
+      "active": true,\r
+         "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése",\r
+      "template": "delete-materials.xml",\r
+      "executeimmediate": false,\r
+      "cronexpression": "0 0 5 * * ?",\r
+      "parameters": [ \r
+       {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}\r
+      ]\r
+       },      \r
+       {\r
       "active": false,\r
-         "name" : "Egy archiválás",\r
+         "name" : "Archiválás az ISILON/ARCHIVE/ONE mappából",\r
       "template": "archive-ondemand.xml",\r
       "executeimmediate": true,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       ]\r
        },      \r
        {\r
-      "active": false,\r
-         "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése",\r
-      "template": "delete-materials.xml",\r
-      "executeimmediate": true,\r
-      "cronexpression": "0 0 0/1 1/1 * ? *",\r
-      "parameters": [ \r
-       {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}\r
-      ]\r
-       },      \r
-       {\r
       "active": false,\r
          "name" : "Lejárt ISISLON/ARCHIVE_TEMP anyagok törlése",\r
       "template": "delete-materials.xml",\r
       ]\r
        },      \r
        {\r
-      "active": true,\r
-         "name" : "OCTOPUS adatok szinkronizálása",\r
-      "template": "sync-octopus.xml",\r
-      "executeimmediate": false,\r
-      "cronexpression": "0/30 * * * * ?",\r
-      "parameters": [\r
-       {"name": "forceFull", "value": true, "type": "java.lang.Boolean"}\r
-      ]\r
-       },      \r
-       {\r
       "active": false,\r
          "name" : "Párhuzamosított teszt folyamat",\r
       "template": "fake-concurrent.xml",\r
index 115accfd49e21bf67560634b1332358da5c72963..ec5b12bb750b4a6d00b0f017dbd71d2f60de1ad6 100644 (file)
@@ -1,13 +1,17 @@
 package user.jobengine.server.steps;\r
 \r
 import java.io.IOException;\r
+import java.net.InetAddress;\r
 import java.net.URI;\r
 import java.net.URISyntaxException;\r
-import java.util.ArrayList;\r
 import java.util.Calendar;\r
+import java.util.Date;\r
 import java.util.List;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
+import org.apache.commons.net.ftp.FTP;\r
+import org.apache.commons.net.ftp.FTPClient;\r
+import org.apache.commons.net.ftp.FTPReply;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
@@ -21,6 +25,8 @@ import user.commons.StoreUri;
 import user.commons.nosql.NoSQLUtils;\r
 import user.commons.octopus.IOctopusAPI;\r
 import user.commons.octopus.OctopusAPI;\r
+import user.commons.remotestore.FtpDirectoryLister;\r
+import user.commons.remotestore.RemoteFileHandler;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.server.IJobEngine;\r
@@ -29,19 +35,6 @@ import user.jobengine.server.JobEngineException;
 import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
 \r
 public class CopyForArchiveNEXIOMaterialsStep extends JobStep {\r
-       private class StoryArchive {\r
-               private String mediaHouseId;\r
-               private String mediaTitle;\r
-               private String mediaDesc;\r
-               private List<String> fileNames;\r
-\r
-               public void addFile(String fileName) {\r
-                       if (fileNames == null)\r
-                               fileNames = new ArrayList<>();\r
-                       fileNames.add(fileName);\r
-               }\r
-       }\r
-\r
        private static final String MXFEXT = ".MXF";\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final String NEXIOCLIPS = "nexioclips";\r
@@ -71,9 +64,51 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                return value;\r
        }\r
 \r
-       private BasicDBObject createMetadata(BasicDBObject rundown, BasicDBObject story, BasicDBObject mosObject) {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
+       private void copy(RundownArchive rundownArchive) throws Exception {\r
+               for (StoryArchive storyArchive : rundownArchive.getStoryArchives()) {\r
+                       for (String fileName : storyArchive.getFileNames()) {\r
+                               copyFile(fileName, rundownArchive, storyArchive);\r
+                       }\r
+               }\r
+       }\r
+\r
+       private void copyFile(String fileName, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception {\r
+               FTPClient source = ((FtpDirectoryLister) RemoteFileHandler.createLister(sourceUri)).connect();\r
+               FTPClient target = ((FtpDirectoryLister) RemoteFileHandler.createLister(sourceUri)).connect();\r
+               transferFile(source, target, fileName);\r
+               BasicDBObject metadata = createMetadata(rundownArchive, storyArchive);\r
+               transferMetadata(target, metadata);\r
+               createTargetKillDateFile(target, fileName);\r
+               createSourceKillDateFile(source, fileName);\r
+       }\r
+\r
+       private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive) {\r
+               //              {\r
+               //                        "itemHouseId": "43",\r
+               //                        "itemTitle": "Hazahúzó",\r
+               //                        "itemDescription": null,\r
+               //                        "mediaHouseId": "002570",\r
+               //                        "mediaTitle": "2017.12.13",\r
+               //                        "mediaDescription": null,\r
+               //                        "ok": false,\r
+               //                        "userName": "echotest"\r
+               //              }\r
+               BasicDBObject result = new BasicDBObject();\r
+               result.put("itemHouseID", rundownArchive.getItemHouseId());\r
+               result.put("itemTitle", rundownArchive.getItemTitle());\r
+               result.put("itemDescription", rundownArchive.getItemDesc());\r
+               result.put("userName", "mediacube");\r
+\r
+               result.put("mediaHouseId", storyArchive.getMediaHouseId());\r
+               result.put("mediaTitle", storyArchive.getMediaTitle());\r
+               result.put("mediaDescription", storyArchive.getMediaDesc());\r
+               return result;\r
+       }\r
+\r
+       private void createSourceKillDateFile(FTPClient source, String fileName) {\r
+       }\r
+\r
+       private void createTargetKillDateFile(FTPClient target, String fileName) {\r
        }\r
 \r
        @StepEntry\r
@@ -82,7 +117,7 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, jobEngine);\r
                octopusAPI = new OctopusAPI();\r
                Calendar scheduledDate = Calendar.getInstance();\r
-               //              scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow);\r
+               scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow);\r
                List<DBObject> rundowns = octopusAPI.getRundowns(scheduledDate.getTime());\r
                if (rundowns == null) {\r
                        logger.warn(getMarker(), "Nem található adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate));\r
@@ -90,16 +125,14 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                }\r
                int index = 1;\r
 \r
-               List<List<StoryArchive>> rundownArchives = null;\r
                for (DBObject r : rundowns) {\r
                        setProgress(index * 100 / rundowns.size());\r
                        try {\r
-                               List<StoryArchive> storyArchive = processRundow(r);\r
-                               if (storyArchive.size() > 0) {\r
-                                       if (rundownArchives == null)\r
-                                               rundownArchives = new ArrayList<>();\r
-                                       rundownArchives.add(storyArchive);\r
-                               }\r
+                               RundownArchive rundownArchive = processRundow(r);\r
+                               if (rundownArchive == null || rundownArchive.isEmpty())\r
+                                       continue;\r
+                               copy(rundownArchive);\r
+\r
                        } catch (Exception e) {\r
                                logger.catching(e);\r
                                logger.error(getMarker(),\r
@@ -127,24 +160,41 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                return mosID + MXFEXT;\r
        }\r
 \r
-       private List<StoryArchive> processRundow(DBObject r) throws Exception {\r
-               //storyArchive = new ArrayList<>();\r
+       private RundownArchive processRundow(DBObject r) throws Exception {\r
                BasicDBObject rundown = (BasicDBObject) r;\r
                long rundownID = rundown.getLong(ID);\r
                logger.info("Processing rundown {} {}", rundownID, rundown.getString(IOctopusAPI.NAME));\r
                List<DBObject> stories = octopusAPI.getRundownFullStories(rundownID);\r
                if (stories == null)\r
                        return null;\r
-               List<StoryArchive> storyArchives = null;\r
+               RundownArchive result = new RundownArchive();\r
+               //              {\r
+               //                      "id":22358752,\r
+               //                      "rundownType":{"name":"Híradó"},\r
+               //                      "scheduledStart":{"$date":"2017-12-09T19:00:00.000Z"}\r
+               //              }\r
+\r
+               long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID);\r
+               if (id == 0)\r
+                       return null;\r
+               String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME);\r
+               if (StringUtils.isBlank(name))\r
+                       return null;\r
+               Date scheduledStart = rundown.getDate(IOctopusAPI.SCHEDULED_START);\r
+               if (scheduledStart == null)\r
+                       return null;\r
+               String start = CalendarUtils.toHunString(CalendarUtils.createCalendar(scheduledStart));\r
+\r
+               result.setItemHouseId(String.valueOf(id));\r
+               result.setItemTitle(String.format("%s - %s", start, name));\r
+\r
                for (DBObject s : stories) {\r
                        StoryArchive storyArchive = processStory(rundown, s);\r
                        if (storyArchive == null)\r
                                continue;\r
-                       if (storyArchives == null)\r
-                               storyArchives = new ArrayList<>();\r
-                       storyArchives.add(storyArchive);\r
+                       result.addStoryArchive(storyArchive);\r
                }\r
-               return storyArchives;\r
+               return result;\r
        }\r
 \r
        private StoryArchive processStory(BasicDBObject rundown, DBObject s) throws Exception {\r
@@ -163,8 +213,12 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                        String fileName = processMosObject(rundown, story, mosObject);\r
                        if (fileName == null)\r
                                continue;\r
-                       if (storyArchive == null)\r
+                       if (storyArchive == null) {\r
                                storyArchive = new StoryArchive();\r
+                               storyArchive.setMediaHouseId(parentStoryID);\r
+                               storyArchive.setMediaTitle(story.getString(IOctopusAPI.NAME));\r
+                               storyArchive.setMediaDesc(story.getString(IOctopusAPI.SCRIPT_CONTENT));\r
+                       }\r
                        storyArchive.addFile(fileName);\r
                }\r
                return null;\r
@@ -211,4 +265,36 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                targetUri.setPassword(archivePassword);\r
        }\r
 \r
+       private void transferFile(FTPClient source, FTPClient target, String fileName) throws Exception {\r
+               int reply = 0;\r
+\r
+               if (!target.enterRemotePassiveMode())\r
+                       throw new Exception("!PASV");\r
+\r
+               reply = source.port(InetAddress.getByName(target.getPassiveHost()), target.getPassivePort());\r
+               if (!FTPReply.isPositiveCompletion(reply))\r
+                       throw new Exception("!PORT");\r
+\r
+               if (!source.setFileType(FTP.BINARY_FILE_TYPE))\r
+                       throw new Exception("!SOURCE TYPE");\r
+\r
+               if (!target.setFileType(FTP.BINARY_FILE_TYPE))\r
+                       throw new Exception("!TARGET TYPE");\r
+\r
+               source.retr(fileName);\r
+               target.stor(fileName);\r
+\r
+               while (true) {\r
+                       reply = source.stat();\r
+                       if (!FTPReply.isPositiveCompletion(reply))\r
+                               throw new Exception("!STAT");\r
+                       String replyText = source.getReplyString();\r
+                       if ("Transaction completed".equals(replyText))\r
+                               break;\r
+               }\r
+       }\r
+\r
+       private void transferMetadata(FTPClient target, BasicDBObject metadata) {\r
+       }\r
+\r
 }\r
index 41baf281cdc3c4588badde7e04f4b35e1fbf1f49..b684a1c027d9ef13e25429457a05bd1940c3f63d 100644 (file)
@@ -19,6 +19,7 @@ DynamicImport-Package: *
 Bundle-ClassPath: .
 Service-Component: OSGI-INF/nexioAPI.xml, OSGI-INF/octopusAPI.xml
 Export-Package: user.commons,
+ user.commons.ftp,
  user.commons.logging,
  user.commons.nexio,
  user.commons.nosql,
index 0771926ffd07fb63848649740af459a692635ccf..ef1cac889a5f92c509d3a4b7d6429a1507d58dc0 100644 (file)
@@ -348,4 +348,5 @@ public class StoreUri extends EntityBase implements Serializable {
                        throw new Exception("OutputLister is null.");
                return copy(lister, outputLister, remoteFile, targetName);
        }
+
 }
\ No newline at end of file
index 1649db72d0107c73d3e77d90d1a8f7ee1652c5fd..f33996eefd4358c22fff80cb31a307b12560f586 100644 (file)
@@ -31,7 +31,7 @@ public class NoSQLUtils {
 \r
        public static BasicDBObject asDBObject(BasicDBObject obj, String name) {\r
                BasicDBObject result = null;\r
-               if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBObject))\r
+               if (obj != null && obj.containsKey(name) && (obj.get(name) instanceof BasicDBObject))\r
                        result = (BasicDBObject) obj.get(name);\r
                return result;\r
        }\r
@@ -66,6 +66,20 @@ public class NoSQLUtils {
                return result;\r
        }\r
 \r
+       public static long asLong(BasicDBObject obj, String name) {\r
+               long result = 0;\r
+               if (obj != null && obj.containsKey(name))\r
+                       result = obj.getLong(name);\r
+               return result;\r
+       }\r
+\r
+       public static String asString(BasicDBObject obj, String name) {\r
+               String result = null;\r
+               if (obj != null && obj.containsKey(name))\r
+                       result = obj.getString(name);\r
+               return result;\r
+       }\r
+\r
        public static DB getNoSQLDB() {\r
                try {\r
                        if (noSQLClient == null)\r
index e995117946fe5430ba3b6b02b1b05fed21f9d9b9..00a55210039a70e4f6ef7a013157f0aa8aeaa5c2 100644 (file)
@@ -10,6 +10,8 @@ public interface IOctopusAPI {
        static final String STORY_COLLECTION = "stories";\r
        static final String FOLDER_COLLECTION = "story_folders";\r
        static final String TIME_COLLECTION_NAME = "time";\r
+       static final String SCRIPT_CONTENT = "script_content";\r
+       static final String RUNDOWN_TYPE = "rundownType";\r
        static final String LASTUPDATE_TIME = "lastUpdateTime";\r
        static final String NEXIO_MOS = "NEXIO.MOS";\r
        static final String PARENT_STORY_ID = "parentStoryId";\r
index 1d92376d5bc650a2c2cac97d8b47077866b41403..91aad6aab4aa28ff05591c027ef0f4d3f56a4668 100644 (file)
@@ -39,15 +39,14 @@ public class OctopusDataMiner implements Runnable {
        private static final Logger logger = LogManager.getLogger();\r
        private static final String LINEFEED = "\r\n";\r
        private static final String SIMPLE_LINEFEED = "\n";\r
-       private static final String SCRIPT_CONTENT = "script_content";\r
        private static final String SAVING_STORY_ID = "Saving story {}";\r
        private static final String SAVING_RUNDOWN = "Saving rundown : {} {}";\r
        private static final String CHECKING_RUNDOWN = "Checking Rundown {} ({}/{})";\r
        private static final String FIELDS_STORIES = "stories,Story.modified,Story.name,Story.id,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value";\r
        private static final String FIELDS_SLUGS = "slugs,Slug.story,Slug.position,Story.name,Story.id,Story.modified,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value";\r
        private static final String FIELDS_RUNDOWN_LIST = "id,name,modified,scheduledStart,rundownType,RundownType.name,slugs,Slug.storyId,Slug.position";\r
-       //      private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified,stories,Story.id";\r
-       private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified";\r
+       private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified,stories,Story.id";\r
+       //private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified";\r
        private static final String RUNDOWN = "Rundown";\r
        private static final String OCTOPUS_DEVICE_NAME = "Octopus-Device-Name";\r
        private static final String OCTOPUS_DEVICE_ID = "Octopus-Device-Id";\r
@@ -532,15 +531,15 @@ public class OctopusDataMiner implements Runnable {
                return rundowns;\r
        }\r
 \r
-       private BasicDBObject queryRundown(long id) {\r
+       private BasicDBObject queryRundown(BasicDBObject rundown) {\r
                logger.trace(ENTER);\r
                BasicDBObject result = null;\r
-               String fields = FIELDS_SLUGS;\r
-               Response response = query(String.format("%s/", RUNDOWN) + id, fields).get();\r
+               long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID);\r
+               Response response = query(String.format("%s/", RUNDOWN) + id, FIELDS_SLUGS).get();\r
                String json = response.readEntity(String.class);\r
                BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
                if (resultObject == null)\r
-                       logger.error("Rundown {} is not available", id);\r
+                       logger.error("Rundown {} {} is not available", id, rundown.getString(IOctopusAPI.NAME));\r
                else\r
                        result = NoSQLUtils.asDBObject(resultObject, RESULT);\r
                logger.trace(EXIT);\r
@@ -559,14 +558,16 @@ public class OctopusDataMiner implements Runnable {
                return result;\r
        }\r
 \r
-       private BasicDBObject queryStoryFolder(long id) {\r
+       private BasicDBObject queryStoryFolder(BasicDBObject storyFolder) {\r
                logger.trace(ENTER);\r
                BasicDBObject result = null;\r
-               String fields = FIELDS_STORIES;\r
-               Response response = query(String.format("%s/", STORY_FOLDER) + id, fields).get();\r
+               long id = NoSQLUtils.asLong(storyFolder, IOctopusAPI.ID);\r
+               Response response = query(String.format("%s/", STORY_FOLDER) + id, FIELDS_STORIES).get();\r
                String json = response.readEntity(String.class);\r
                BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
-               if (resultObject != null)\r
+               if (resultObject == null)\r
+                       logger.error("StoryFolder {} {} is not available", id, storyFolder.getString(IOctopusAPI.NAME));\r
+               else\r
                        result = NoSQLUtils.asDBObject(resultObject, RESULT);\r
                logger.trace(EXIT);\r
                return result;\r
@@ -666,10 +667,9 @@ public class OctopusDataMiner implements Runnable {
 \r
        private void storeRundown(BasicDBObject rundown, Date lastUpdateTime) {\r
                logger.trace(ENTER);\r
-               long rundownID = rundown.getLong(IOctopusAPI.ID);\r
                String name = rundown.containsKey(IOctopusAPI.NAME) ? rundown.getString(IOctopusAPI.NAME) : null;\r
                logger.debug("Storing rundown {} {}", name, rundown.get(IOctopusAPI.SCHEDULED_START));\r
-               BasicDBObject rundownWithStories = queryRundown(rundownID);\r
+               BasicDBObject rundownWithStories = queryRundown(rundown);\r
                if (rundownWithStories != null) {\r
                        BasicDBList stories = NoSQLUtils.asDBList(rundownWithStories, IOctopusAPI.SLUGS);\r
                        if (stories != null)\r
@@ -678,7 +678,7 @@ public class OctopusDataMiner implements Runnable {
                        rundown.put(IOctopusAPI.MODIFIED, toDate(rundown, IOctopusAPI.MODIFIED));\r
                        DBCollection collection = db.getCollection(RUNDOWN_COLLECTION);\r
                        if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, rundown))) {\r
-                               logger.debug(SAVING_RUNDOWN, rundownID, name);\r
+                               //logger.debug(SAVING_RUNDOWN, rundownID, name);\r
                                collection.save(rundown);\r
                        }\r
                }\r
@@ -768,7 +768,7 @@ public class OctopusDataMiner implements Runnable {
                if (storyFolderRef != null)\r
                        story.put(IOctopusAPI.REF_STORYFOLDER, storyFolderRef);\r
                String scriptContent = extractScriptContent(story);\r
-               story.put(SCRIPT_CONTENT, scriptContent);\r
+               story.put(IOctopusAPI.SCRIPT_CONTENT, scriptContent);\r
                if (modifiedMOS == null || modifiedMOS.isEmpty()) {\r
                        if (story.containsKey(IOctopusAPI.MOS_OBJECTS))\r
                                story.remove(IOctopusAPI.MOS_OBJECTS);\r
@@ -788,18 +788,18 @@ public class OctopusDataMiner implements Runnable {
 \r
        private void storeStoryFolder(BasicDBObject storyFolder, Date lastUpdateTime) {\r
                logger.trace(ENTER);\r
-               long storyFolderID = storyFolder.getLong(IOctopusAPI.ID);\r
-\r
-               BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolderID);\r
-               BasicDBList stories = NoSQLUtils.asDBList(storyFoldersWithStories, IOctopusAPI.STORIES);\r
-               if (stories != null)\r
-                       storeStoryFolderStories(stories, lastUpdateTime);\r
-               storyFolder.put(IOctopusAPI.MODIFIED, toDate(storyFolder, IOctopusAPI.MODIFIED));\r
-               DBCollection collection = db.getCollection(FOLDER_COLLECTION);\r
-               if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) {\r
-                       String name = storyFolder.getString(IOctopusAPI.NAME);\r
-                       logger.debug("Storing story folder {}", name);\r
-                       collection.save(storyFolder);\r
+               BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolder);\r
+               if (storyFoldersWithStories != null) {\r
+                       BasicDBList stories = NoSQLUtils.asDBList(storyFoldersWithStories, IOctopusAPI.STORIES);\r
+                       if (stories != null)\r
+                               storeStoryFolderStories(stories, lastUpdateTime);\r
+                       storyFolder.put(IOctopusAPI.MODIFIED, toDate(storyFolder, IOctopusAPI.MODIFIED));\r
+                       DBCollection collection = db.getCollection(FOLDER_COLLECTION);\r
+                       if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) {\r
+                               String name = storyFolder.getString(IOctopusAPI.NAME);\r
+                               logger.debug("Storing story folder {}", name);\r
+                               collection.save(storyFolder);\r
+                       }\r
                }\r
                logger.trace(EXIT);\r
        }\r
index 1dafa89ed675f2f687971c53f72fb2716266dccb..4c8e088c5d320798f53d15c4caf715d27cc5fbe3 100644 (file)
@@ -76,9 +76,9 @@ public class FtpDirectoryLister implements IDirectoryLister {
                }\r
        }\r
 \r
-       private void connect() throws Exception {\r
+       public FTPClient connect() throws Exception {\r
                if (ftpClient != null)\r
-                       return;\r
+                       return ftpClient;\r
                String path = storeUri.toString(true);\r
                String[] pathElements = path.split("/");\r
                ftpClient = new FTPClient();\r
@@ -97,6 +97,7 @@ public class FtpDirectoryLister implements IDirectoryLister {
                        }\r
                }\r
 \r
+               return ftpClient;\r
        }\r
 \r
        @Override\r
index 853cce3935b4424ea1c727a63752acc6887f8988..09f9b4907ab84025fb18cb9e73e6c923331a3506 100644 (file)
@@ -57,7 +57,7 @@
                                                                <image src="/img/mediacube_logo_v2_50x50.png">\r
 <!--                                                           <custom-attributes org.zkoss.zul.image.preload="true" /> -->\r
                                                                </image>\r
-                                                               <label style="color:#e3e3e3;font-size:20px;font-weight:bold">MediaCube v2.1.6</label>\r
+                                                               <label style="color:#e3e3e3;font-size:20px;font-weight:bold">MediaCube v2.1.7</label>\r
                                                        </div>\r
                                                </west>\r
                                                <center border="0">\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/RundownArchive.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/RundownArchive.java
new file mode 100644 (file)
index 0000000..8623c39
--- /dev/null
@@ -0,0 +1,49 @@
+package user.jobengine.server.steps;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+class RundownArchive {\r
+       private String itemHouseId;\r
+       private String itemTitle;\r
+       private String itemDesc;\r
+       private List<StoryArchive> storyArchives;\r
+\r
+       public void addStoryArchive(StoryArchive storyArchive) {\r
+               if (storyArchives == null)\r
+                       storyArchives = new ArrayList<>();\r
+               storyArchives.add(storyArchive);\r
+       }\r
+\r
+       public String getItemDesc() {\r
+               return itemDesc;\r
+       }\r
+\r
+       public String getItemHouseId() {\r
+               return itemHouseId;\r
+       }\r
+\r
+       public String getItemTitle() {\r
+               return itemTitle;\r
+       }\r
+\r
+       public List<StoryArchive> getStoryArchives() {\r
+               return storyArchives;\r
+       }\r
+\r
+       public boolean isEmpty() {\r
+               return storyArchives == null || storyArchives.isEmpty();\r
+       }\r
+\r
+       public void setItemDesc(String itemDesc) {\r
+               this.itemDesc = itemDesc;\r
+       }\r
+\r
+       public void setItemHouseId(String itemHouseId) {\r
+               this.itemHouseId = itemHouseId;\r
+       }\r
+\r
+       public void setItemTitle(String itemTitle) {\r
+               this.itemTitle = itemTitle;\r
+       }\r
+}
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/StoryArchive.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/StoryArchive.java
new file mode 100644 (file)
index 0000000..180b91c
--- /dev/null
@@ -0,0 +1,45 @@
+package user.jobengine.server.steps;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+class StoryArchive {\r
+       private String mediaHouseId;\r
+       private String mediaTitle;\r
+       private String mediaDesc;\r
+       private List<String> fileNames;\r
+\r
+       public void addFile(String fileName) {\r
+               if (fileNames == null)\r
+                       fileNames = new ArrayList<>();\r
+               fileNames.add(fileName);\r
+       }\r
+\r
+       public List<String> getFileNames() {\r
+               return fileNames;\r
+       }\r
+\r
+       public String getMediaHouseId() {\r
+               return mediaHouseId;\r
+       }\r
+\r
+       public void setMediaHouseId(String mediaHouseId) {\r
+               this.mediaHouseId = mediaHouseId;\r
+       }\r
+\r
+       public String getMediaTitle() {\r
+               return mediaTitle;\r
+       }\r
+\r
+       public void setMediaTitle(String mediaTitle) {\r
+               this.mediaTitle = mediaTitle;\r
+       }\r
+\r
+       public String getMediaDesc() {\r
+               return mediaDesc;\r
+       }\r
+\r
+       public void setMediaDesc(String mediaDesc) {\r
+               this.mediaDesc = mediaDesc;\r
+       }\r
+}
\ No newline at end of file