From 4aa588a3949fb5dd3265de61519363778f26f216 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Fri, 27 Oct 2017 08:06:29 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30677 --- client/Maestro/MaestroForm.Designer.cs | 1 + client/Maestro/MaestroForm.Metadata.cs | 35 +- client/Maestro/MaestroForm.Source.cs | 2 +- client/Maestro/MaestroForm.Target.cs | 2 +- client/Maestro/Metadata/MetaDataInfo.cs | 1 - client/Maestro/Metadata/MetadataType.cs | 2 +- .../PlanAIRClient/Workers/MaterialWorker.cs | 11 +- .../commons/octopus/OctopusDataMiner.java | 367 +++++++++++------- 8 files changed, 271 insertions(+), 150 deletions(-) diff --git a/client/Maestro/MaestroForm.Designer.cs b/client/Maestro/MaestroForm.Designer.cs index 6f3803fa..f7a220ab 100644 --- a/client/Maestro/MaestroForm.Designer.cs +++ b/client/Maestro/MaestroForm.Designer.cs @@ -219,6 +219,7 @@ namespace Maestro { this.textSelectedSource.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); this.textSelectedSource.Location = new System.Drawing.Point(3, 28); this.textSelectedSource.Name = "textSelectedSource"; + this.textSelectedSource.ReadOnly = true; this.textSelectedSource.Size = new System.Drawing.Size(292, 26); this.textSelectedSource.TabIndex = 10; // diff --git a/client/Maestro/MaestroForm.Metadata.cs b/client/Maestro/MaestroForm.Metadata.cs index 47cd215a..7cd744d3 100644 --- a/client/Maestro/MaestroForm.Metadata.cs +++ b/client/Maestro/MaestroForm.Metadata.cs @@ -36,7 +36,7 @@ namespace Maestro { movieSegments = null; segments = null; textSelectedMetadata.Text = value?.ID; - ttMetadata.SetToolTip(textSelectedMetadata, value?.Tooltip); + ttMetadata.SetToolTip(textSelectedMetadata, GetMetadataTypeTooltip(value?.Kind)); } } @@ -259,11 +259,11 @@ namespace Maestro { if (String.IsNullOrEmpty(textSelectedMetadata.Text)) { SelectedMetadata = null; } else { - if (SelectedMetadata == null || !textSelectedMetadata.Text.Equals(SelectedMetadata.ID)) { + string text = textSelectedMetadata.Text; + if (SelectedMetadata == null || !text.Equals(SelectedMetadata.ID)) { SelectedMetadata = new MetadataInfo() { - Kind = MetadataType.MediaCube, - ID = textSelectedMetadata.Text, - Tooltip = "MediaCube azonosító" + Kind = GuessMetadataType(text), + ID = text }; } } @@ -284,7 +284,6 @@ namespace Maestro { } SelectedMetadata = new MetadataInfo() { Kind = MetadataType.OctopusPlaceHolder, - Tooltip = "Octopus azonosító", ID = id, VariantID = int.Parse(id) }; @@ -298,6 +297,16 @@ namespace Maestro { return; } MetadataType metadataType = GuessMetadataType(selectedID); + SelectedMetadata = new MetadataInfo() { + Kind = metadataType, + ID = selectedID, + VariantID = variantID + }; + } + + private static string GetMetadataTypeTooltip(MetadataType? metadataType) { + if (metadataType == null) + return null; string tooltip = null; switch (metadataType) { case MetadataType.TrafficAD: @@ -309,13 +318,15 @@ namespace Maestro { case MetadataType.TrafficPromo: tooltip = "Traffic promó azonosító"; break; + case MetadataType.OctopusPlaceHolder: + tooltip = "Octopus azonosító"; + break; + case MetadataType.MediaCube: + tooltip = "MediaCube azonosító"; + break; } - SelectedMetadata = new MetadataInfo() { - Kind = metadataType, - Tooltip = tooltip, - ID = selectedID, - VariantID = variantID - }; + + return tooltip; } private void UpdateEditArchiveMetadataEnabled() { diff --git a/client/Maestro/MaestroForm.Source.cs b/client/Maestro/MaestroForm.Source.cs index e0f3958c..82455b05 100644 --- a/client/Maestro/MaestroForm.Source.cs +++ b/client/Maestro/MaestroForm.Source.cs @@ -305,7 +305,7 @@ namespace Maestro { private void UpdateLookupMetadataEnabled() { MetadataType metadataType = GuessMetadataType(SelectedSource?.Prefix); - buttonMetadata.Enabled = !String.IsNullOrEmpty(SelectedSource?.Prefix) && metadataType != MetadataType.MediaCube && metadataType != MetadataType.None; + buttonMetadata.Enabled = metadataType != MetadataType.MediaCube && metadataType != MetadataType.None; } } diff --git a/client/Maestro/MaestroForm.Target.cs b/client/Maestro/MaestroForm.Target.cs index bae458b5..47ce78a0 100644 --- a/client/Maestro/MaestroForm.Target.cs +++ b/client/Maestro/MaestroForm.Target.cs @@ -208,7 +208,7 @@ namespace Maestro { private void UpdateProcessorButtonsEnabled() { ClearSelectedProcessors(); - if (!String.IsNullOrEmpty(textSelectedMetadata.Text) && !String.IsNullOrEmpty(textSelectedMetadata.Text)) { + if (!String.IsNullOrEmpty(textSelectedSource.Text) && !String.IsNullOrEmpty(textSelectedMetadata.Text)) { ChangeProcessButtonsState(true); } else { ChangeProcessButtonsState(false); diff --git a/client/Maestro/Metadata/MetaDataInfo.cs b/client/Maestro/Metadata/MetaDataInfo.cs index d0afc234..bf0b4c19 100644 --- a/client/Maestro/Metadata/MetaDataInfo.cs +++ b/client/Maestro/Metadata/MetaDataInfo.cs @@ -1,7 +1,6 @@ namespace Maestro.Metadata { public class MetadataInfo { public string ID { get; set; } - public string Tooltip { get; set; } public MetadataType Kind { get; set; } public int VariantID { get; set; } diff --git a/client/Maestro/Metadata/MetadataType.cs b/client/Maestro/Metadata/MetadataType.cs index 184ae174..67a96adf 100644 --- a/client/Maestro/Metadata/MetadataType.cs +++ b/client/Maestro/Metadata/MetadataType.cs @@ -2,6 +2,6 @@ namespace Maestro.Metadata { public enum MetadataType { - None, MediaCube, OctopusStory, OctopusPlaceHolder, TrafficMaterial = TrafficMetadataType.TrafficMaterial, TrafficPromo = TrafficMetadataType.TrafficPromo, TrafficAD = TrafficMetadataType.TrafficAD + None = 6, MediaCube = 5, OctopusStory = 4, OctopusPlaceHolder = 3, TrafficMaterial = TrafficMetadataType.TrafficMaterial, TrafficPromo = TrafficMetadataType.TrafficPromo, TrafficAD = TrafficMetadataType.TrafficAD } } diff --git a/client/PlanAIRClient/Workers/MaterialWorker.cs b/client/PlanAIRClient/Workers/MaterialWorker.cs index 2003a177..8f3f47f8 100644 --- a/client/PlanAIRClient/Workers/MaterialWorker.cs +++ b/client/PlanAIRClient/Workers/MaterialWorker.cs @@ -38,7 +38,7 @@ namespace TrafficClient.Workers { }; } - public List GetMaterials(string strParam, bool problematic, DateTime? from, DateTime? to) { + public List GetMaterials(string search, bool problematic, DateTime? from, DateTime? to) { List result = null; try { TryConnect(); @@ -51,9 +51,12 @@ namespace TrafficClient.Workers { else cmd.Parameters.AddWithValue("@@@Options", 0); - cmd.Parameters.AddWithValue("@@StrParam1", strParam); - cmd.Parameters.AddWithValue("@@DateParam1", from.Value.Date); - cmd.Parameters.AddWithValue("@@DateParam2", to.Value.Date); + if (!String.IsNullOrEmpty(search)) + cmd.Parameters.AddWithValue("@@StrParam1", search); + if (from != null) + cmd.Parameters.AddWithValue("@@DateParam1", from.Value.Date); + if (to != null) + cmd.Parameters.AddWithValue("@@DateParam2", to.Value.Date); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { 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 7da25a28..e1183b2b 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 @@ -1,8 +1,10 @@ package user.commons.octopus; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import javax.swing.event.EventListenerList; import javax.ws.rs.client.Invocation.Builder; @@ -21,6 +23,7 @@ import com.ibm.nosql.json.api.BasicDBList; import com.ibm.nosql.json.api.BasicDBObject; import com.ibm.nosql.json.api.DB; import com.ibm.nosql.json.api.DBCollection; +import com.ibm.nosql.json.api.DBCursor; import com.ibm.nosql.json.api.DBObject; import com.ibm.nosql.json.api.NoSQLClient; import com.ibm.nosql.json.api.QueryBuilder; @@ -31,25 +34,37 @@ import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.ProgressEvent; public class OctopusDataMiner implements Runnable { + private static final String LABEL = "label"; + private static final String SIMPLE_LINEFEED = "\n"; + private static final String MOSOBJECT = "Bejátszó: "; + private static final String OBJ_ID = "objId"; + private static final String OBJECT = "object"; + private static final String LINEFEED = "\r\n"; + private static final String MOS = "mos"; + private static final String TEXT = "text"; + private static final String TYPE = "type"; + private static final String CONTENT = "content"; + private static final String BODY = "body"; + private static final String SCRIPT = "script"; + private static final String SCRIPT_CONTENT = "script_content"; private static final Logger logger = LogManager.getLogger(); - private static final String SAVING_STORY_D = "Saving story %d"; + private static final String SAVING_STORY_ID = "Saving story {}"; private static final String SAVEING_RUNDOWN_D = "Saveing rundown : %d"; - private static final String ACTUAL_MODIFIED_STRING_IS_NULL = "actualModifiedString is null"; - private static final String PROCESSING_MULTI_REFERENCED_STORY_ID = "Processing multi referenced StoryID "; - private static final String RUNDOWN2 = "rundown"; + private static final String REF_RUNDOWN = "rundown"; + private static final String REF_STORYFOLDER = "story_folder"; private static final String POSITION = "position"; private static final String STORY = "story"; private static final String SCHEDULED_START = "scheduledStart"; private static final String SLUGS = "slugs"; private static final String CHECKING_RUNDOWN_S_D_D = "Checking Rundown %s (%d/%d)"; - private static final String STORIES_FIELDS = "stories, Story.modified, Story.name, Story.id,Story.mosObjects,Story.script,Story.type,customColumns,CustomColumn.label,CustomColumn.value"; - private static final String SLUGS_FIELDS = "slugs,Slug.story,Slug.position,Story.name,Story.id,Story.modified,Story.mosObjects,Story.script,Story.type,Story.customColumns,CustomColumn.label,CustomColumn.value"; + private static final String FIELDS_STORIES = "stories,Story.modified,Story.name,Story.id,Story.mosObjects,Story.script,Story.type,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.customColumns,CustomColumn.label,CustomColumn.value"; private static final String RUNDOWN = "Rundown"; - private static final String ID_NAME_MODIFIED_SCHEDULED_START = "id,name,modified,scheduledStart"; + private static final String FIELDS_RUNDOWN_LIST = "id,name,modified,scheduledStart,slugs,Slug.storyId,Slug.position"; + private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified,stories,Story.id"; private static final String OCTOPUS_DEVICE_NAME = "Octopus-Device-Name"; private static final String OCTOPUS_DEVICE_ID = "Octopus-Device-Id"; private static final String FIELDS = "fields"; - private static final String STORYFOLDER = "story_folder"; private static final String MODIFIED = "modified"; private static final String STORIES = "stories"; private static final String ID = "id"; @@ -57,13 +72,13 @@ public class OctopusDataMiner implements Runnable { private static final String EXIT = "Exit"; private static final String RESULT = "result"; private static final String STORY_FOLDER = "StoryFolder"; - private static final String ID_NAME_MODIFIED = "id,name,modified"; private static final String ENTER = "Enter"; private static final String FINISHED = "Finished"; private static final String STARTING = "Starting"; + private static final String STORYID = "storyId"; public static final String RUNDOWN_COLLECTION_NAME = "rundowns"; - public static final String STORY_COLLECTION_NAME = STORIES; + public static final String STORY_COLLECTION_NAME = "stories"; public static final String STORY_FOLDER_COLLECTION_NAME = "story_folders"; public static final String TIME_COLLECTION_NAME = "time"; public static final String LASTUPDATE_TIME = "lastUpdateTime"; @@ -75,6 +90,10 @@ public class OctopusDataMiner implements Runnable { private HashSet storyIDs = new HashSet<>(); private EventListenerList progressListenerList; private ProgressEvent progressEvent = new ProgressEvent(this, 0); + private Map storyRundowns; + private Map storyStoryFolders; + private Map storedStoryRundowns; + private Map storedStoryStoryFolders; public OctopusDataMiner() { String jdbcUrl = System.getProperty("jobengine.nosql.db.url"); @@ -111,27 +130,77 @@ public class OctopusDataMiner implements Runnable { return result; } - private void checkAndStoreStory(BasicDBObject modifiedStory, Date lastUpdateTime, long storyID, int position, long referenceID, String referenceName, - DBCollection collection) { - boolean isContains = storyIDs.contains(storyID); - if (!isContains) - storyIDs.add(storyID); - if (lastUpdateTime != null && !isModified(lastUpdateTime, modifiedStory)) - return; - if (isContains) { - logger.trace(PROCESSING_MULTI_REFERENCED_STORY_ID + storyID); - modifiedStory = (BasicDBObject) collection.findOne(new BasicDBObject(ID, storyID)); + private Map buildRundownReferences(BasicDBList rundowns) { + Map result = new HashMap<>(); + List rundownsList = NoSQLUtils.asList(rundowns); + for (BasicDBObject rundown : rundownsList) { + long rundownId = rundown.getLong(ID); + List slugs = NoSQLUtils.asList(asDBList(rundown, SLUGS)); + for (BasicDBObject slug : slugs) { + if (!slug.containsKey(STORYID)) + continue; + long storyId = slug.getLong(STORYID); + BasicDBList references = result.get(storyId); + if (references == null) { + references = new BasicDBList(); + result.put(storyId, references); + } + long position = slug.getLong(POSITION); + references.add(new BasicDBObject(ID, rundownId).append(POSITION, position)); + } } - BasicDBList references = asDBList(modifiedStory, referenceName); - if (references == null) { - references = new BasicDBList(); - modifiedStory.append(referenceName, references); + return result; + } + + private void buildStoriesReferences() { + DBCollection collection = db.getCollection(STORY_COLLECTION_NAME); + DBCursor cursor = collection.find(null, new BasicDBObject(ID, 1).append(REF_RUNDOWN, 1).append(REF_STORYFOLDER, 1)); + //DBCursor find = collection.find(QueryBuilder.start(ID).greaterThan(0).get()); + List stories = null; + try { + + while (cursor.hasNext()) { + BasicDBObject story = (BasicDBObject) cursor.next(); + long storyId = story.getLong(ID); + BasicDBList rundownRef = asDBList(story, REF_RUNDOWN); + if (rundownRef != null) { + if (storedStoryRundowns == null) + storedStoryRundowns = new HashMap<>(); + storedStoryRundowns.put(storyId, rundownRef); + } + BasicDBList storyFolderRef = asDBList(story, REF_STORYFOLDER); + if (storyFolderRef != null) { + if (storedStoryStoryFolders == null) + storedStoryStoryFolders = new HashMap<>(); + storedStoryStoryFolders.put(storyId, storyFolderRef); + } + } + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + } - references.add(new BasicDBObject(ID, referenceID).append(POSITION, position)); - String scriptContent = GetScriptContent(modifiedStory); - modifiedStory.append("script_content", scriptContent); - logger.info(String.format(SAVING_STORY_D, storyID)); - collection.save(modifiedStory); + } + + private Map buildStoryFolderReferences(BasicDBList storyFolders) { + Map result = new HashMap<>(); + List storyFolderList = NoSQLUtils.asList(storyFolders); + for (BasicDBObject storyFolder : storyFolderList) { + long storyFolderId = storyFolder.getLong(ID); + List stories = NoSQLUtils.asList(asDBList(storyFolder, STORIES)); + long position = 1; + for (BasicDBObject story : stories) { + long storyId = story.getLong(ID); + BasicDBList references = result.get(storyId); + if (references == null) { + references = new BasicDBList(); + result.put(storyId, references); + } + references.add(new BasicDBObject(ID, storyFolderId).append(POSITION, position++)); + } + } + return result; } public void clear() { @@ -193,38 +262,52 @@ public class OctopusDataMiner implements Runnable { } } - private String GetContent(BasicDBObject actualDBContent) { - String type = actualDBContent.getString("type"); + private String GetContent(BasicDBObject content) { String scriptContent = ""; + if (!content.containsKey(TYPE)) + return scriptContent; + String type = content.getString(TYPE); switch (type) { - case "text": { - String text = actualDBContent.getString("text"); - if (text != null) - scriptContent += String.format("%s: %s\r\n", type, text.replaceAll("\n", "\r\n")); + case TEXT: { + if (content.containsKey(TEXT)) { + String text = content.getString(TEXT); + if (text != null) + scriptContent += String.format("%s%s", text.replaceAll(SIMPLE_LINEFEED, LINEFEED), LINEFEED); + } break; } - case "mos": { - BasicDBObject mosObject = (BasicDBObject) actualDBContent.get("object"); + case MOS: { + BasicDBObject mosObject = asDBObject(content, OBJECT); if (mosObject != null && !mosObject.isEmpty()) { - String objID = mosObject.getString("objId"); - scriptContent += String.format("%s %s\r\n", type.toUpperCase(), objID); + if (mosObject.containsKey(OBJ_ID)) { + String objID = mosObject.getString(OBJ_ID); + scriptContent += String.format("%s %s%s", MOSOBJECT, objID, LINEFEED); + } } break; } default: { - BasicDBList innerContents = (BasicDBList) actualDBContent.get("content"); - if (innerContents != null && !innerContents.isEmpty()) - for (Object actualInnerContent : innerContents) { - BasicDBObject actualDBInnerContent = (BasicDBObject) actualInnerContent; - if (actualDBInnerContent != null && actualDBInnerContent.isEmpty()) - scriptContent += GetContent(actualDBInnerContent); + if (content.containsKey(CONTENT)) { + List innerContents = NoSQLUtils.asList(asDBList(content, CONTENT)); + for (BasicDBObject actualInnerContent : innerContents) { + if (actualInnerContent != null && actualInnerContent.isEmpty()) + scriptContent += GetContent(actualInnerContent); } + } break; } } return scriptContent; } + // private boolean isModified(Date date, BasicDBObject object, String name) { + // Date actualModifiedString = toDate(object, name); + // if (actualModifiedString == null) + // logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL); + // int result = date.compareTo(actualModifiedString); + // return result <= 0; + // } + private Date getLastUpdateTime() { Date result = null; DBCollection collection = db.getCollection(TIME_COLLECTION_NAME); @@ -235,33 +318,32 @@ public class OctopusDataMiner implements Runnable { } private String GetScriptContent(BasicDBObject story) { - BasicDBObject script = (BasicDBObject) story.get("script"); - String scriptContent = "text: "; - if (script != null && !script.isEmpty()) { - BasicDBList body = (BasicDBList) script.get("body"); - if (body != null && !body.isEmpty()) - for (Object actualBody : body) { - BasicDBObject actualDBBody = (BasicDBObject) actualBody; - BasicDBList contents = (BasicDBList) actualDBBody.get("content"); - if (contents != null && !contents.isEmpty()) - for (Object actualContent : contents) { - BasicDBObject actualDBContent = (BasicDBObject) actualContent; - scriptContent += GetContent(actualDBContent); - } - } + BasicDBObject script = asDBObject(story, SCRIPT); + if (script == null || script.isEmpty()) + return null; + + List body = NoSQLUtils.asList(asDBList(script, BODY)); + if (body.size() == 0) + return null; + + StringBuilder sb = new StringBuilder(); + + for (BasicDBObject bodyItem : body) { + if (bodyItem.containsKey(LABEL)) { + sb.append(bodyItem.getString(LABEL)); + sb.append(LINEFEED); + } + List contents = NoSQLUtils.asList(asDBList(bodyItem, CONTENT)); + for (BasicDBObject content : contents) { + sb.append(GetContent(content)); + } } - return scriptContent; + return sb.length() == 0 ? null : sb.toString(); } - // private boolean isModified(Date date, BasicDBObject object, String name) { - // Date actualModifiedString = toDate(object, name); - // if (actualModifiedString == null) - // logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL); - // int result = date.compareTo(actualModifiedString); - // return result <= 0; - // } - private boolean isModified(Date date, BasicDBObject object) { + if (date == null) + return true; Date modified = (Date) object.get(MODIFIED); int result = date.compareTo(modified); return result <= 0; @@ -276,7 +358,7 @@ public class OctopusDataMiner implements Runnable { private BasicDBObject queryRundown(long id) { logger.trace(ENTER); BasicDBObject result = null; - String fields = SLUGS_FIELDS; + String fields = FIELDS_SLUGS; Response response = query(String.format("%s/", RUNDOWN) + id, fields).get(); String json = response.readEntity(String.class); BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); @@ -286,11 +368,10 @@ public class OctopusDataMiner implements Runnable { return result; } - private BasicDBList queryRundowns(Date lastUpdateTime) { + private BasicDBList queryRundowns() { logger.trace(ENTER); BasicDBList result = null; - String fields = ID_NAME_MODIFIED_SCHEDULED_START; - Response response = query(RUNDOWN, fields).get(); + Response response = query(RUNDOWN, FIELDS_RUNDOWN_LIST).get(); String json = response.readEntity(String.class); BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); if (resultObject != null) @@ -302,7 +383,7 @@ public class OctopusDataMiner implements Runnable { private BasicDBObject queryStoryFolder(long id) { logger.trace(ENTER); BasicDBObject result = null; - String fields = STORIES_FIELDS; + String fields = FIELDS_STORIES; Response response = query(String.format("%s/", STORY_FOLDER) + id, fields).get(); String json = response.readEntity(String.class); BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); @@ -312,11 +393,10 @@ public class OctopusDataMiner implements Runnable { return result; } - private BasicDBList queryStoryFolders(Date lastUpdateTime) { + private BasicDBList queryStoryFolders() { logger.trace(ENTER); BasicDBList result = null; - String fields = ID_NAME_MODIFIED; - Response response = query(STORY_FOLDER, fields).get(); + Response response = query(STORY_FOLDER, FIELDS_STORY_FOLDER_LIST).get(); String json = response.readEntity(String.class); BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); if (resultObject != null) @@ -326,7 +406,7 @@ public class OctopusDataMiner implements Runnable { List list = NoSQLUtils.asList(result); for (BasicDBObject actual : list) { String fullName = concatParentsToStoryFolder(actual, actual.getString("name")); - logger.info(String.format("fullname %s", fullName)); + //logger.info("Checking StoryFolder {}", fullName); actual.remove("name"); actual.append("name", fullName); } @@ -346,24 +426,32 @@ public class OctopusDataMiner implements Runnable { ensureIndexes(); Date lastUpdateTime = getLastUpdateTime(); setLastUpdateTime(new Date()); - BasicDBList rundowns = queryRundowns(lastUpdateTime); - if (rundowns != null) - storeRundowns(rundowns, lastUpdateTime); - else { + + buildStoriesReferences(); + + BasicDBList rundowns = queryRundowns(); + storyRundowns = buildRundownReferences(rundowns); + + BasicDBList storyFolders = queryStoryFolders(); + storyStoryFolders = buildStoryFolderReferences(storyFolders); + + if (rundowns == null || rundowns.size() == 0) { progressEvent.setProgress(50); fireProgressEvent(progressEvent); + } else { + storeRundowns(rundowns, lastUpdateTime); } - BasicDBList storyFolders = queryStoryFolders(lastUpdateTime); - if (storyFolders != null) - storeStoryFolders(storyFolders, lastUpdateTime); - else { + if (storyFolders == null || storyFolders.size() == 0) { progressEvent.setProgress(100); fireProgressEvent(progressEvent); + } else { + storeStoryFolders(storyFolders, lastUpdateTime); } deleteOrphanStories(); } catch (Exception e) { - logger.error(e); + logger.catching(e); + throw e; } logger.trace(FINISHED); } @@ -385,7 +473,7 @@ public class OctopusDataMiner implements Runnable { BasicDBObject rundownWithStories = queryRundown(rundownID); BasicDBList stories = asDBList(rundownWithStories, SLUGS); if (stories != null) - storeRundownStories(stories, rundownID, lastUpdateTime); + storeRundownStories(stories, lastUpdateTime); rundown.put(SCHEDULED_START, toDate(rundown, SCHEDULED_START)); rundown.put(MODIFIED, toDate(rundown, MODIFIED)); DBCollection collection = db.getCollection(RUNDOWN_COLLECTION_NAME); @@ -396,24 +484,6 @@ public class OctopusDataMiner implements Runnable { logger.trace(EXIT); } - private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) { - logger.trace(ENTER); - List rundownsList = NoSQLUtils.asList(rundowns); - int idx = 1; - for (BasicDBObject rundown : rundownsList) { - logger.info(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx)); - storeRundown(rundown, lastUpdateTime); - int progress = idx * 50 / rundownsList.size(); - if (progress - progressEvent.getProgress() > 0) { - progressEvent.setProgress(progress); - fireProgressEvent(progressEvent); - } - - idx++; - } - logger.trace(EXIT); - } - // private void insertStoryFoldersToDB2() { // DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME); // Set storyKeys = storyFolders.keySet(); @@ -483,38 +553,75 @@ public class OctopusDataMiner implements Runnable { // storyFolders = converter.convertBasicDBObjectFromJson(result); // } - private void storeRundownStories(BasicDBList slugs, long referenceID, Date lastUpdateTime) { + private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) { + logger.trace(ENTER); + List rundownsList = NoSQLUtils.asList(rundowns); + int idx = 1; + for (BasicDBObject rundown : rundownsList) { + logger.info(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx)); + storeRundown(rundown, lastUpdateTime); + int progress = idx * 50 / rundownsList.size(); + if (progress - progressEvent.getProgress() > 0) { + progressEvent.setProgress(progress); + fireProgressEvent(progressEvent); + } + + idx++; + } + logger.trace(EXIT); + } + + private void storeRundownStories(BasicDBList slugs, Date lastUpdateTime) { logger.trace(ENTER); List slugsList = NoSQLUtils.asList(slugs); for (BasicDBObject slug : slugsList) { if (slug.containsKey(STORY)) - storeStory((BasicDBObject) slug.get(STORY), slug.getInt(POSITION), referenceID, RUNDOWN2, lastUpdateTime); + storeStory((BasicDBObject) slug.get(STORY), lastUpdateTime); } logger.trace(EXIT); } - private void storeStory(BasicDBObject story, int position, long referenceID, String referenceName, Date lastUpdateTime) { + private void storeStory(BasicDBObject story, Date lastUpdateTime) { logger.trace(ENTER); - try { - // a run v�g�n lek�rj�k az �sszes storyID-t az adatb�zisb�l - // �s ha van olyan eleme annak a list�nak, ami nincs benne a - // mem�ri�ban t�rolt storyIDs setben, t�r�lj�k adatb�zisb�l - long storyID = story.getLong(ID); - DBCollection collection = db.getCollection(STORY_COLLECTION_NAME); - BasicDBObject modifiedStory = story; - // boolean trashed = story.getBoolean(TRASHED); - // modifiedStory.remove(TRASHED); - // nem m�k�dik - /* - * if (trashed) { modifiedStory = (BasicDBObject) - * collection.findOne(new BasicDBObject(ID, storyID), new - * BasicDBObject(_ID, 1)); collection.remove(modifiedStory); } else - */ - checkAndStoreStory(modifiedStory, lastUpdateTime, storyID, position, referenceID, referenceName, collection); - } catch (Exception e) { - logger.error(e); - throw e; + long storyID = story.getLong(ID); + boolean isContains = storyIDs.contains(storyID); + if (isContains) + return; + storyIDs.add(storyID); + story.put(MODIFIED, toDate(story, MODIFIED)); + BasicDBList rundownRef = storyRundowns.get(storyID); + rundownRef = (rundownRef == null) ? new BasicDBList() : rundownRef; + BasicDBList storyFolderRef = storyStoryFolders.get(storyID); + storyFolderRef = (storyFolderRef == null) ? new BasicDBList() : storyFolderRef; + + boolean uptodate = true; + if (!isModified(lastUpdateTime, story)) { + BasicDBList storedRundownRef = storedStoryRundowns.get(storyID); + storedRundownRef = (storedRundownRef == null) ? new BasicDBList() : storedRundownRef; + uptodate = storedRundownRef.equals(rundownRef); + + if (uptodate) { + BasicDBList storedStoryFolderRef = storedStoryStoryFolders.get(storyID); + storedStoryFolderRef = (storedStoryFolderRef == null) ? new BasicDBList() : storedStoryFolderRef; + uptodate = storedStoryFolderRef.equals(storyFolderRef); + } + if (uptodate) + return; + } + + DBCollection collection = db.getCollection(STORY_COLLECTION_NAME); + if (lastUpdateTime != null) { + BasicDBObject orig = (BasicDBObject) collection.findOne(new BasicDBObject(ID, storyID), new BasicDBObject(ID, 1)); + story.put("_id", orig.getID()); } + if (rundownRef != null) + story.put(REF_RUNDOWN, rundownRef); + if (storyFolderRef != null) + story.put(REF_STORYFOLDER, storyFolderRef); + String scriptContent = GetScriptContent(story); + story.put(SCRIPT_CONTENT, scriptContent); + logger.info(SAVING_STORY_ID, storyID); + collection.save(story); logger.trace(EXIT); } @@ -525,7 +632,7 @@ public class OctopusDataMiner implements Runnable { BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolderID); BasicDBList stories = asDBList(storyFoldersWithStories, STORIES); if (stories != null) - storeStoryFolderStories(stories, storyFolderID, storyFolderID, lastUpdateTime); + storeStoryFolderStories(stories, lastUpdateTime); storyFolder.put(MODIFIED, toDate(storyFolder, MODIFIED)); DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME); if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) { @@ -552,11 +659,11 @@ public class OctopusDataMiner implements Runnable { logger.trace(EXIT); } - private void storeStoryFolderStories(BasicDBList stories, long storyFolderID, long referenceID, Date lastUpdateTime) { + private void storeStoryFolderStories(BasicDBList stories, Date lastUpdateTime) { logger.trace(ENTER); List list = NoSQLUtils.asList(stories); for (BasicDBObject story : list) - storeStory(story, 0, referenceID, STORYFOLDER, lastUpdateTime); + storeStory(story, lastUpdateTime); logger.trace(EXIT); } -- 2.54.0