From d79c366625d841bdfa165701b3c322a1db212bb0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Mon, 11 Dec 2017 21:10:24 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30797 --- ...-studio.json => configuration-studio.json} | 0 client/Maestro/Maestro.csproj | 2 +- .../META-INF/MANIFEST.MF | 3 +- .../config/scheduledjobs.json | 50 +++--- .../CopyForArchiveNEXIOMaterialsStep.java | 152 ++++++++++++++---- .../META-INF/MANIFEST.MF | 1 + .../src/user/commons/StoreUri.java | 1 + .../src/user/commons/nosql/NoSQLUtils.java | 16 +- .../src/user/commons/octopus/IOctopusAPI.java | 2 + .../commons/octopus/OctopusDataMiner.java | 54 +++---- .../remotestore/FtpDirectoryLister.java | 5 +- .../pages/index.zul | 2 +- .../server/steps/RundownArchive.java | 49 ++++++ .../jobengine/server/steps/StoryArchive.java | 45 ++++++ 14 files changed, 291 insertions(+), 91 deletions(-) rename client/Maestro/Configuration/{-configuration-studio.json => configuration-studio.json} (100%) create mode 100644 server/user.jobengine.osgi.server/src/user/jobengine/server/steps/RundownArchive.java create mode 100644 server/user.jobengine.osgi.server/src/user/jobengine/server/steps/StoryArchive.java diff --git a/client/Maestro/Configuration/-configuration-studio.json b/client/Maestro/Configuration/configuration-studio.json similarity index 100% rename from client/Maestro/Configuration/-configuration-studio.json rename to client/Maestro/Configuration/configuration-studio.json diff --git a/client/Maestro/Maestro.csproj b/client/Maestro/Maestro.csproj index 0f5f0ecd..16808a97 100644 --- a/client/Maestro/Maestro.csproj +++ b/client/Maestro/Maestro.csproj @@ -324,7 +324,7 @@ Always - + Always diff --git a/server/user.jobengine.executors/META-INF/MANIFEST.MF b/server/user.jobengine.executors/META-INF/MANIFEST.MF index a27b7ba9..27286a2e 100644 --- a/server/user.jobengine.executors/META-INF/MANIFEST.MF +++ b/server/user.jobengine.executors/META-INF/MANIFEST.MF @@ -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" diff --git a/server/user.jobengine.executors/config/scheduledjobs.json b/server/user.jobengine.executors/config/scheduledjobs.json index f12581bd..657888a1 100644 --- a/server/user.jobengine.executors/config/scheduledjobs.json +++ b/server/user.jobengine.executors/config/scheduledjobs.json @@ -1,10 +1,20 @@ {"joblist":[ { - "active": false, - "name" : "Felhasználói archiválás", + "active": true, + "name" : "OCTOPUS adatok szinkronizálása", + "template": "sync-octopus.xml", + "executeimmediate": false, + "cronexpression": "0/30 * * * * ?", + "parameters": [ + {"name": "forceFull", "value": true, "type": "java.lang.Boolean"} + ] + }, + { + "active": true, + "executeimmediate": false, + "name" : "Archiválás az ISILON/ARCHIVE mappából", "template": "archive-ondemand.xml", - "executeimmediate": true, - "cronexpression": "0 0 0/1 1/1 * ? *", + "cronexpression": "0 0 12 * * ?", "parameters": [ {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}, {"name": "globalSourcePath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"}, @@ -14,8 +24,18 @@ ] }, { + "active": true, + "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése", + "template": "delete-materials.xml", + "executeimmediate": false, + "cronexpression": "0 0 5 * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"} + ] + }, + { "active": false, - "name" : "Egy archiválás", + "name" : "Archiválás az ISILON/ARCHIVE/ONE mappából", "template": "archive-ondemand.xml", "executeimmediate": true, "cronexpression": "0 0 0/1 1/1 * ? *", @@ -55,16 +75,6 @@ ] }, { - "active": false, - "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése", - "template": "delete-materials.xml", - "executeimmediate": true, - "cronexpression": "0 0 0/1 1/1 * ? *", - "parameters": [ - {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"} - ] - }, - { "active": false, "name" : "Lejárt ISISLON/ARCHIVE_TEMP anyagok törlése", "template": "delete-materials.xml", @@ -88,16 +98,6 @@ ] }, { - "active": true, - "name" : "OCTOPUS adatok szinkronizálása", - "template": "sync-octopus.xml", - "executeimmediate": false, - "cronexpression": "0/30 * * * * ?", - "parameters": [ - {"name": "forceFull", "value": true, "type": "java.lang.Boolean"} - ] - }, - { "active": false, "name" : "Párhuzamosított teszt folyamat", "template": "fake-concurrent.xml", diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java index 115accfd..ec5b12bb 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java @@ -1,13 +1,17 @@ package user.jobengine.server.steps; import java.io.IOException; +import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPReply; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -21,6 +25,8 @@ import user.commons.StoreUri; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; import user.commons.octopus.OctopusAPI; +import user.commons.remotestore.FtpDirectoryLister; +import user.commons.remotestore.RemoteFileHandler; import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.IItemManager; import user.jobengine.server.IJobEngine; @@ -29,19 +35,6 @@ import user.jobengine.server.JobEngineException; import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; public class CopyForArchiveNEXIOMaterialsStep extends JobStep { - private class StoryArchive { - private String mediaHouseId; - private String mediaTitle; - private String mediaDesc; - private List fileNames; - - public void addFile(String fileName) { - if (fileNames == null) - fileNames = new ArrayList<>(); - fileNames.add(fileName); - } - } - private static final String MXFEXT = ".MXF"; private static final Logger logger = LogManager.getLogger(); private static final String NEXIOCLIPS = "nexioclips"; @@ -71,9 +64,51 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { return value; } - private BasicDBObject createMetadata(BasicDBObject rundown, BasicDBObject story, BasicDBObject mosObject) { - // TODO Auto-generated method stub - return null; + private void copy(RundownArchive rundownArchive) throws Exception { + for (StoryArchive storyArchive : rundownArchive.getStoryArchives()) { + for (String fileName : storyArchive.getFileNames()) { + copyFile(fileName, rundownArchive, storyArchive); + } + } + } + + private void copyFile(String fileName, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception { + FTPClient source = ((FtpDirectoryLister) RemoteFileHandler.createLister(sourceUri)).connect(); + FTPClient target = ((FtpDirectoryLister) RemoteFileHandler.createLister(sourceUri)).connect(); + transferFile(source, target, fileName); + BasicDBObject metadata = createMetadata(rundownArchive, storyArchive); + transferMetadata(target, metadata); + createTargetKillDateFile(target, fileName); + createSourceKillDateFile(source, fileName); + } + + private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive) { + // { + // "itemHouseId": "43", + // "itemTitle": "Hazahúzó", + // "itemDescription": null, + // "mediaHouseId": "002570", + // "mediaTitle": "2017.12.13", + // "mediaDescription": null, + // "ok": false, + // "userName": "echotest" + // } + BasicDBObject result = new BasicDBObject(); + result.put("itemHouseID", rundownArchive.getItemHouseId()); + result.put("itemTitle", rundownArchive.getItemTitle()); + result.put("itemDescription", rundownArchive.getItemDesc()); + result.put("userName", "mediacube"); + + result.put("mediaHouseId", storyArchive.getMediaHouseId()); + result.put("mediaTitle", storyArchive.getMediaTitle()); + result.put("mediaDescription", storyArchive.getMediaDesc()); + return result; + } + + private void createSourceKillDateFile(FTPClient source, String fileName) { + } + + private void createTargetKillDateFile(FTPClient target, String fileName) { } @StepEntry @@ -82,7 +117,7 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, jobEngine); octopusAPI = new OctopusAPI(); Calendar scheduledDate = Calendar.getInstance(); - // scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow); + scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow); List rundowns = octopusAPI.getRundowns(scheduledDate.getTime()); if (rundowns == null) { logger.warn(getMarker(), "Nem található adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate)); @@ -90,16 +125,14 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { } int index = 1; - List> rundownArchives = null; for (DBObject r : rundowns) { setProgress(index * 100 / rundowns.size()); try { - List storyArchive = processRundow(r); - if (storyArchive.size() > 0) { - if (rundownArchives == null) - rundownArchives = new ArrayList<>(); - rundownArchives.add(storyArchive); - } + RundownArchive rundownArchive = processRundow(r); + if (rundownArchive == null || rundownArchive.isEmpty()) + continue; + copy(rundownArchive); + } catch (Exception e) { logger.catching(e); logger.error(getMarker(), @@ -127,24 +160,41 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { return mosID + MXFEXT; } - private List processRundow(DBObject r) throws Exception { - //storyArchive = new ArrayList<>(); + private RundownArchive processRundow(DBObject r) throws Exception { BasicDBObject rundown = (BasicDBObject) r; long rundownID = rundown.getLong(ID); logger.info("Processing rundown {} {}", rundownID, rundown.getString(IOctopusAPI.NAME)); List stories = octopusAPI.getRundownFullStories(rundownID); if (stories == null) return null; - List storyArchives = null; + RundownArchive result = new RundownArchive(); + // { + // "id":22358752, + // "rundownType":{"name":"Híradó"}, + // "scheduledStart":{"$date":"2017-12-09T19:00:00.000Z"} + // } + + long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID); + if (id == 0) + return null; + String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME); + if (StringUtils.isBlank(name)) + return null; + Date scheduledStart = rundown.getDate(IOctopusAPI.SCHEDULED_START); + if (scheduledStart == null) + return null; + String start = CalendarUtils.toHunString(CalendarUtils.createCalendar(scheduledStart)); + + result.setItemHouseId(String.valueOf(id)); + result.setItemTitle(String.format("%s - %s", start, name)); + for (DBObject s : stories) { StoryArchive storyArchive = processStory(rundown, s); if (storyArchive == null) continue; - if (storyArchives == null) - storyArchives = new ArrayList<>(); - storyArchives.add(storyArchive); + result.addStoryArchive(storyArchive); } - return storyArchives; + return result; } private StoryArchive processStory(BasicDBObject rundown, DBObject s) throws Exception { @@ -163,8 +213,12 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { String fileName = processMosObject(rundown, story, mosObject); if (fileName == null) continue; - if (storyArchive == null) + if (storyArchive == null) { storyArchive = new StoryArchive(); + storyArchive.setMediaHouseId(parentStoryID); + storyArchive.setMediaTitle(story.getString(IOctopusAPI.NAME)); + storyArchive.setMediaDesc(story.getString(IOctopusAPI.SCRIPT_CONTENT)); + } storyArchive.addFile(fileName); } return null; @@ -211,4 +265,36 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { targetUri.setPassword(archivePassword); } + private void transferFile(FTPClient source, FTPClient target, String fileName) throws Exception { + int reply = 0; + + if (!target.enterRemotePassiveMode()) + throw new Exception("!PASV"); + + reply = source.port(InetAddress.getByName(target.getPassiveHost()), target.getPassivePort()); + if (!FTPReply.isPositiveCompletion(reply)) + throw new Exception("!PORT"); + + if (!source.setFileType(FTP.BINARY_FILE_TYPE)) + throw new Exception("!SOURCE TYPE"); + + if (!target.setFileType(FTP.BINARY_FILE_TYPE)) + throw new Exception("!TARGET TYPE"); + + source.retr(fileName); + target.stor(fileName); + + while (true) { + reply = source.stat(); + if (!FTPReply.isPositiveCompletion(reply)) + throw new Exception("!STAT"); + String replyText = source.getReplyString(); + if ("Transaction completed".equals(replyText)) + break; + } + } + + private void transferMetadata(FTPClient target, BasicDBObject metadata) { + } + } diff --git a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF index 41baf281..b684a1c0 100644 --- a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF @@ -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, diff --git a/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java b/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java index 0771926f..ef1cac88 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java @@ -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 diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java index 1649db72..f33996ee 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java @@ -31,7 +31,7 @@ public class NoSQLUtils { public static BasicDBObject asDBObject(BasicDBObject obj, String name) { BasicDBObject result = null; - if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBObject)) + if (obj != null && obj.containsKey(name) && (obj.get(name) instanceof BasicDBObject)) result = (BasicDBObject) obj.get(name); return result; } @@ -66,6 +66,20 @@ public class NoSQLUtils { return result; } + public static long asLong(BasicDBObject obj, String name) { + long result = 0; + if (obj != null && obj.containsKey(name)) + result = obj.getLong(name); + return result; + } + + public static String asString(BasicDBObject obj, String name) { + String result = null; + if (obj != null && obj.containsKey(name)) + result = obj.getString(name); + return result; + } + public static DB getNoSQLDB() { try { if (noSQLClient == null) diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java index e9951179..00a55210 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java @@ -10,6 +10,8 @@ public interface IOctopusAPI { static final String STORY_COLLECTION = "stories"; static final String FOLDER_COLLECTION = "story_folders"; static final String TIME_COLLECTION_NAME = "time"; + static final String SCRIPT_CONTENT = "script_content"; + static final String RUNDOWN_TYPE = "rundownType"; static final String LASTUPDATE_TIME = "lastUpdateTime"; static final String NEXIO_MOS = "NEXIO.MOS"; static final String PARENT_STORY_ID = "parentStoryId"; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java index 1d92376d..91aad6aa 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java @@ -39,15 +39,14 @@ public class OctopusDataMiner implements Runnable { private static final Logger logger = LogManager.getLogger(); private static final String LINEFEED = "\r\n"; private static final String SIMPLE_LINEFEED = "\n"; - private static final String SCRIPT_CONTENT = "script_content"; private static final String SAVING_STORY_ID = "Saving story {}"; private static final String SAVING_RUNDOWN = "Saving rundown : {} {}"; private static final String CHECKING_RUNDOWN = "Checking Rundown {} ({}/{})"; 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"; 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"; private static final String FIELDS_RUNDOWN_LIST = "id,name,modified,scheduledStart,rundownType,RundownType.name,slugs,Slug.storyId,Slug.position"; - // private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified,stories,Story.id"; - private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified"; + private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified,stories,Story.id"; + //private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified"; private static final String RUNDOWN = "Rundown"; private static final String OCTOPUS_DEVICE_NAME = "Octopus-Device-Name"; private static final String OCTOPUS_DEVICE_ID = "Octopus-Device-Id"; @@ -532,15 +531,15 @@ public class OctopusDataMiner implements Runnable { return rundowns; } - private BasicDBObject queryRundown(long id) { + private BasicDBObject queryRundown(BasicDBObject rundown) { logger.trace(ENTER); BasicDBObject result = null; - String fields = FIELDS_SLUGS; - Response response = query(String.format("%s/", RUNDOWN) + id, fields).get(); + long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID); + Response response = query(String.format("%s/", RUNDOWN) + id, FIELDS_SLUGS).get(); String json = response.readEntity(String.class); BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); if (resultObject == null) - logger.error("Rundown {} is not available", id); + logger.error("Rundown {} {} is not available", id, rundown.getString(IOctopusAPI.NAME)); else result = NoSQLUtils.asDBObject(resultObject, RESULT); logger.trace(EXIT); @@ -559,14 +558,16 @@ public class OctopusDataMiner implements Runnable { return result; } - private BasicDBObject queryStoryFolder(long id) { + private BasicDBObject queryStoryFolder(BasicDBObject storyFolder) { logger.trace(ENTER); BasicDBObject result = null; - String fields = FIELDS_STORIES; - Response response = query(String.format("%s/", STORY_FOLDER) + id, fields).get(); + long id = NoSQLUtils.asLong(storyFolder, IOctopusAPI.ID); + Response response = query(String.format("%s/", STORY_FOLDER) + id, FIELDS_STORIES).get(); String json = response.readEntity(String.class); BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject != null) + if (resultObject == null) + logger.error("StoryFolder {} {} is not available", id, storyFolder.getString(IOctopusAPI.NAME)); + else result = NoSQLUtils.asDBObject(resultObject, RESULT); logger.trace(EXIT); return result; @@ -666,10 +667,9 @@ public class OctopusDataMiner implements Runnable { private void storeRundown(BasicDBObject rundown, Date lastUpdateTime) { logger.trace(ENTER); - long rundownID = rundown.getLong(IOctopusAPI.ID); String name = rundown.containsKey(IOctopusAPI.NAME) ? rundown.getString(IOctopusAPI.NAME) : null; logger.debug("Storing rundown {} {}", name, rundown.get(IOctopusAPI.SCHEDULED_START)); - BasicDBObject rundownWithStories = queryRundown(rundownID); + BasicDBObject rundownWithStories = queryRundown(rundown); if (rundownWithStories != null) { BasicDBList stories = NoSQLUtils.asDBList(rundownWithStories, IOctopusAPI.SLUGS); if (stories != null) @@ -678,7 +678,7 @@ public class OctopusDataMiner implements Runnable { rundown.put(IOctopusAPI.MODIFIED, toDate(rundown, IOctopusAPI.MODIFIED)); DBCollection collection = db.getCollection(RUNDOWN_COLLECTION); if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, rundown))) { - logger.debug(SAVING_RUNDOWN, rundownID, name); + //logger.debug(SAVING_RUNDOWN, rundownID, name); collection.save(rundown); } } @@ -768,7 +768,7 @@ public class OctopusDataMiner implements Runnable { if (storyFolderRef != null) story.put(IOctopusAPI.REF_STORYFOLDER, storyFolderRef); String scriptContent = extractScriptContent(story); - story.put(SCRIPT_CONTENT, scriptContent); + story.put(IOctopusAPI.SCRIPT_CONTENT, scriptContent); if (modifiedMOS == null || modifiedMOS.isEmpty()) { if (story.containsKey(IOctopusAPI.MOS_OBJECTS)) story.remove(IOctopusAPI.MOS_OBJECTS); @@ -788,18 +788,18 @@ public class OctopusDataMiner implements Runnable { private void storeStoryFolder(BasicDBObject storyFolder, Date lastUpdateTime) { logger.trace(ENTER); - long storyFolderID = storyFolder.getLong(IOctopusAPI.ID); - - BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolderID); - BasicDBList stories = NoSQLUtils.asDBList(storyFoldersWithStories, IOctopusAPI.STORIES); - if (stories != null) - storeStoryFolderStories(stories, lastUpdateTime); - storyFolder.put(IOctopusAPI.MODIFIED, toDate(storyFolder, IOctopusAPI.MODIFIED)); - DBCollection collection = db.getCollection(FOLDER_COLLECTION); - if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) { - String name = storyFolder.getString(IOctopusAPI.NAME); - logger.debug("Storing story folder {}", name); - collection.save(storyFolder); + BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolder); + if (storyFoldersWithStories != null) { + BasicDBList stories = NoSQLUtils.asDBList(storyFoldersWithStories, IOctopusAPI.STORIES); + if (stories != null) + storeStoryFolderStories(stories, lastUpdateTime); + storyFolder.put(IOctopusAPI.MODIFIED, toDate(storyFolder, IOctopusAPI.MODIFIED)); + DBCollection collection = db.getCollection(FOLDER_COLLECTION); + if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) { + String name = storyFolder.getString(IOctopusAPI.NAME); + logger.debug("Storing story folder {}", name); + collection.save(storyFolder); + } } logger.trace(EXIT); } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java index 1dafa89e..4c8e088c 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java @@ -76,9 +76,9 @@ public class FtpDirectoryLister implements IDirectoryLister { } } - private void connect() throws Exception { + public FTPClient connect() throws Exception { if (ftpClient != null) - return; + return ftpClient; String path = storeUri.toString(true); String[] pathElements = path.split("/"); ftpClient = new FTPClient(); @@ -97,6 +97,7 @@ public class FtpDirectoryLister implements IDirectoryLister { } } + return ftpClient; } @Override diff --git a/server/user.jobengine.osgi.server/pages/index.zul b/server/user.jobengine.osgi.server/pages/index.zul index 853cce39..09f9b490 100644 --- a/server/user.jobengine.osgi.server/pages/index.zul +++ b/server/user.jobengine.osgi.server/pages/index.zul @@ -57,7 +57,7 @@ - +
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 index 00000000..8623c393 --- /dev/null +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/RundownArchive.java @@ -0,0 +1,49 @@ +package user.jobengine.server.steps; + +import java.util.ArrayList; +import java.util.List; + +class RundownArchive { + private String itemHouseId; + private String itemTitle; + private String itemDesc; + private List storyArchives; + + public void addStoryArchive(StoryArchive storyArchive) { + if (storyArchives == null) + storyArchives = new ArrayList<>(); + storyArchives.add(storyArchive); + } + + public String getItemDesc() { + return itemDesc; + } + + public String getItemHouseId() { + return itemHouseId; + } + + public String getItemTitle() { + return itemTitle; + } + + public List getStoryArchives() { + return storyArchives; + } + + public boolean isEmpty() { + return storyArchives == null || storyArchives.isEmpty(); + } + + public void setItemDesc(String itemDesc) { + this.itemDesc = itemDesc; + } + + public void setItemHouseId(String itemHouseId) { + this.itemHouseId = itemHouseId; + } + + public void setItemTitle(String itemTitle) { + this.itemTitle = itemTitle; + } +} \ 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 index 00000000..180b91c5 --- /dev/null +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/StoryArchive.java @@ -0,0 +1,45 @@ +package user.jobengine.server.steps; + +import java.util.ArrayList; +import java.util.List; + +class StoryArchive { + private String mediaHouseId; + private String mediaTitle; + private String mediaDesc; + private List fileNames; + + public void addFile(String fileName) { + if (fileNames == null) + fileNames = new ArrayList<>(); + fileNames.add(fileName); + } + + public List getFileNames() { + return fileNames; + } + + public String getMediaHouseId() { + return mediaHouseId; + } + + public void setMediaHouseId(String mediaHouseId) { + this.mediaHouseId = mediaHouseId; + } + + public String getMediaTitle() { + return mediaTitle; + } + + public void setMediaTitle(String mediaTitle) { + this.mediaTitle = mediaTitle; + } + + public String getMediaDesc() { + return mediaDesc; + } + + public void setMediaDesc(String mediaDesc) { + this.mediaDesc = mediaDesc; + } +} \ No newline at end of file -- 2.54.0