package user.commons.octopus;\r
\r
import java.util.Date;\r
+import java.util.HashMap;\r
import java.util.HashSet;\r
import java.util.List;\r
+import java.util.Map;\r
\r
import javax.swing.event.EventListenerList;\r
import javax.ws.rs.client.Invocation.Builder;\r
import com.ibm.nosql.json.api.BasicDBObject;\r
import com.ibm.nosql.json.api.DB;\r
import com.ibm.nosql.json.api.DBCollection;\r
+import com.ibm.nosql.json.api.DBCursor;\r
import com.ibm.nosql.json.api.DBObject;\r
import com.ibm.nosql.json.api.NoSQLClient;\r
import com.ibm.nosql.json.api.QueryBuilder;\r
import user.commons.remotestore.ProgressEvent;\r
\r
public class OctopusDataMiner implements Runnable {\r
+ private static final String LABEL = "label";\r
+ private static final String SIMPLE_LINEFEED = "\n";\r
+ private static final String MOSOBJECT = "Bejátszó: ";\r
+ private static final String OBJ_ID = "objId";\r
+ private static final String OBJECT = "object";\r
+ private static final String LINEFEED = "\r\n";\r
+ private static final String MOS = "mos";\r
+ private static final String TEXT = "text";\r
+ private static final String TYPE = "type";\r
+ private static final String CONTENT = "content";\r
+ private static final String BODY = "body";\r
+ private static final String SCRIPT = "script";\r
+ private static final String SCRIPT_CONTENT = "script_content";\r
private static final Logger logger = LogManager.getLogger();\r
- private static final String SAVING_STORY_D = "Saving story %d";\r
+ private static final String SAVING_STORY_ID = "Saving story {}";\r
private static final String SAVEING_RUNDOWN_D = "Saveing rundown : %d";\r
- private static final String ACTUAL_MODIFIED_STRING_IS_NULL = "actualModifiedString is null";\r
- private static final String PROCESSING_MULTI_REFERENCED_STORY_ID = "Processing multi referenced StoryID ";\r
- private static final String RUNDOWN2 = "rundown";\r
+ private static final String REF_RUNDOWN = "rundown";\r
+ private static final String REF_STORYFOLDER = "story_folder";\r
private static final String POSITION = "position";\r
private static final String STORY = "story";\r
private static final String SCHEDULED_START = "scheduledStart";\r
private static final String SLUGS = "slugs";\r
private static final String CHECKING_RUNDOWN_S_D_D = "Checking Rundown %s (%d/%d)";\r
- private static final String STORIES_FIELDS = "stories, Story.modified, Story.name, Story.id,Story.mosObjects,Story.script,Story.type,customColumns,CustomColumn.label,CustomColumn.value";\r
- 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";\r
+ private static final String FIELDS_STORIES = "stories,Story.modified,Story.name,Story.id,Story.mosObjects,Story.script,Story.type,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.customColumns,CustomColumn.label,CustomColumn.value";\r
private static final String RUNDOWN = "Rundown";\r
- private static final String ID_NAME_MODIFIED_SCHEDULED_START = "id,name,modified,scheduledStart";\r
+ private static final String FIELDS_RUNDOWN_LIST = "id,name,modified,scheduledStart,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 OCTOPUS_DEVICE_NAME = "Octopus-Device-Name";\r
private static final String OCTOPUS_DEVICE_ID = "Octopus-Device-Id";\r
private static final String FIELDS = "fields";\r
- private static final String STORYFOLDER = "story_folder";\r
private static final String MODIFIED = "modified";\r
private static final String STORIES = "stories";\r
private static final String ID = "id";\r
private static final String EXIT = "Exit";\r
private static final String RESULT = "result";\r
private static final String STORY_FOLDER = "StoryFolder";\r
- private static final String ID_NAME_MODIFIED = "id,name,modified";\r
private static final String ENTER = "Enter";\r
private static final String FINISHED = "Finished";\r
private static final String STARTING = "Starting";\r
+ private static final String STORYID = "storyId";\r
\r
public static final String RUNDOWN_COLLECTION_NAME = "rundowns";\r
- public static final String STORY_COLLECTION_NAME = STORIES;\r
+ public static final String STORY_COLLECTION_NAME = "stories";\r
public static final String STORY_FOLDER_COLLECTION_NAME = "story_folders";\r
public static final String TIME_COLLECTION_NAME = "time";\r
public static final String LASTUPDATE_TIME = "lastUpdateTime";\r
private HashSet<Long> storyIDs = new HashSet<>();\r
private EventListenerList progressListenerList;\r
private ProgressEvent progressEvent = new ProgressEvent(this, 0);\r
+ private Map<Long, BasicDBList> storyRundowns;\r
+ private Map<Long, BasicDBList> storyStoryFolders;\r
+ private Map<Long, BasicDBList> storedStoryRundowns;\r
+ private Map<Long, BasicDBList> storedStoryStoryFolders;\r
\r
public OctopusDataMiner() {\r
String jdbcUrl = System.getProperty("jobengine.nosql.db.url");\r
return result;\r
}\r
\r
- private void checkAndStoreStory(BasicDBObject modifiedStory, Date lastUpdateTime, long storyID, int position, long referenceID, String referenceName,\r
- DBCollection collection) {\r
- boolean isContains = storyIDs.contains(storyID);\r
- if (!isContains)\r
- storyIDs.add(storyID);\r
- if (lastUpdateTime != null && !isModified(lastUpdateTime, modifiedStory))\r
- return;\r
- if (isContains) {\r
- logger.trace(PROCESSING_MULTI_REFERENCED_STORY_ID + storyID);\r
- modifiedStory = (BasicDBObject) collection.findOne(new BasicDBObject(ID, storyID));\r
+ private Map<Long, BasicDBList> buildRundownReferences(BasicDBList rundowns) {\r
+ Map<Long, BasicDBList> result = new HashMap<>();\r
+ List<BasicDBObject> rundownsList = NoSQLUtils.asList(rundowns);\r
+ for (BasicDBObject rundown : rundownsList) {\r
+ long rundownId = rundown.getLong(ID);\r
+ List<BasicDBObject> slugs = NoSQLUtils.asList(asDBList(rundown, SLUGS));\r
+ for (BasicDBObject slug : slugs) {\r
+ if (!slug.containsKey(STORYID))\r
+ continue;\r
+ long storyId = slug.getLong(STORYID);\r
+ BasicDBList references = result.get(storyId);\r
+ if (references == null) {\r
+ references = new BasicDBList();\r
+ result.put(storyId, references);\r
+ }\r
+ long position = slug.getLong(POSITION);\r
+ references.add(new BasicDBObject(ID, rundownId).append(POSITION, position));\r
+ }\r
}\r
- BasicDBList references = asDBList(modifiedStory, referenceName);\r
- if (references == null) {\r
- references = new BasicDBList();\r
- modifiedStory.append(referenceName, references);\r
+ return result;\r
+ }\r
+\r
+ private void buildStoriesReferences() {\r
+ DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+ DBCursor cursor = collection.find(null, new BasicDBObject(ID, 1).append(REF_RUNDOWN, 1).append(REF_STORYFOLDER, 1));\r
+ //DBCursor find = collection.find(QueryBuilder.start(ID).greaterThan(0).get());\r
+ List<DBObject> stories = null;\r
+ try {\r
+\r
+ while (cursor.hasNext()) {\r
+ BasicDBObject story = (BasicDBObject) cursor.next();\r
+ long storyId = story.getLong(ID);\r
+ BasicDBList rundownRef = asDBList(story, REF_RUNDOWN);\r
+ if (rundownRef != null) {\r
+ if (storedStoryRundowns == null)\r
+ storedStoryRundowns = new HashMap<>();\r
+ storedStoryRundowns.put(storyId, rundownRef);\r
+ }\r
+ BasicDBList storyFolderRef = asDBList(story, REF_STORYFOLDER);\r
+ if (storyFolderRef != null) {\r
+ if (storedStoryStoryFolders == null)\r
+ storedStoryStoryFolders = new HashMap<>();\r
+ storedStoryStoryFolders.put(storyId, storyFolderRef);\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+\r
}\r
- references.add(new BasicDBObject(ID, referenceID).append(POSITION, position));\r
- String scriptContent = GetScriptContent(modifiedStory);\r
- modifiedStory.append("script_content", scriptContent);\r
- logger.info(String.format(SAVING_STORY_D, storyID));\r
- collection.save(modifiedStory);\r
+ }\r
+\r
+ private Map<Long, BasicDBList> buildStoryFolderReferences(BasicDBList storyFolders) {\r
+ Map<Long, BasicDBList> result = new HashMap<>();\r
+ List<BasicDBObject> storyFolderList = NoSQLUtils.asList(storyFolders);\r
+ for (BasicDBObject storyFolder : storyFolderList) {\r
+ long storyFolderId = storyFolder.getLong(ID);\r
+ List<BasicDBObject> stories = NoSQLUtils.asList(asDBList(storyFolder, STORIES));\r
+ long position = 1;\r
+ for (BasicDBObject story : stories) {\r
+ long storyId = story.getLong(ID);\r
+ BasicDBList references = result.get(storyId);\r
+ if (references == null) {\r
+ references = new BasicDBList();\r
+ result.put(storyId, references);\r
+ }\r
+ references.add(new BasicDBObject(ID, storyFolderId).append(POSITION, position++));\r
+ }\r
+ }\r
+ return result;\r
}\r
\r
public void clear() {\r
}\r
}\r
\r
- private String GetContent(BasicDBObject actualDBContent) {\r
- String type = actualDBContent.getString("type");\r
+ private String GetContent(BasicDBObject content) {\r
String scriptContent = "";\r
+ if (!content.containsKey(TYPE))\r
+ return scriptContent;\r
+ String type = content.getString(TYPE);\r
switch (type) {\r
- case "text": {\r
- String text = actualDBContent.getString("text");\r
- if (text != null)\r
- scriptContent += String.format("%s: %s\r\n", type, text.replaceAll("\n", "\r\n"));\r
+ case TEXT: {\r
+ if (content.containsKey(TEXT)) {\r
+ String text = content.getString(TEXT);\r
+ if (text != null)\r
+ scriptContent += String.format("%s%s", text.replaceAll(SIMPLE_LINEFEED, LINEFEED), LINEFEED);\r
+ }\r
break;\r
}\r
- case "mos": {\r
- BasicDBObject mosObject = (BasicDBObject) actualDBContent.get("object");\r
+ case MOS: {\r
+ BasicDBObject mosObject = asDBObject(content, OBJECT);\r
if (mosObject != null && !mosObject.isEmpty()) {\r
- String objID = mosObject.getString("objId");\r
- scriptContent += String.format("%s %s\r\n", type.toUpperCase(), objID);\r
+ if (mosObject.containsKey(OBJ_ID)) {\r
+ String objID = mosObject.getString(OBJ_ID);\r
+ scriptContent += String.format("%s %s%s", MOSOBJECT, objID, LINEFEED);\r
+ }\r
}\r
break;\r
}\r
default: {\r
- BasicDBList innerContents = (BasicDBList) actualDBContent.get("content");\r
- if (innerContents != null && !innerContents.isEmpty())\r
- for (Object actualInnerContent : innerContents) {\r
- BasicDBObject actualDBInnerContent = (BasicDBObject) actualInnerContent;\r
- if (actualDBInnerContent != null && actualDBInnerContent.isEmpty())\r
- scriptContent += GetContent(actualDBInnerContent);\r
+ if (content.containsKey(CONTENT)) {\r
+ List<BasicDBObject> innerContents = NoSQLUtils.asList(asDBList(content, CONTENT));\r
+ for (BasicDBObject actualInnerContent : innerContents) {\r
+ if (actualInnerContent != null && actualInnerContent.isEmpty())\r
+ scriptContent += GetContent(actualInnerContent);\r
}\r
+ }\r
break;\r
}\r
}\r
return scriptContent;\r
}\r
\r
+ // private boolean isModified(Date date, BasicDBObject object, String name) {\r
+ // Date actualModifiedString = toDate(object, name);\r
+ // if (actualModifiedString == null)\r
+ // logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL);\r
+ // int result = date.compareTo(actualModifiedString);\r
+ // return result <= 0;\r
+ // }\r
+\r
private Date getLastUpdateTime() {\r
Date result = null;\r
DBCollection collection = db.getCollection(TIME_COLLECTION_NAME);\r
}\r
\r
private String GetScriptContent(BasicDBObject story) {\r
- BasicDBObject script = (BasicDBObject) story.get("script");\r
- String scriptContent = "text: ";\r
- if (script != null && !script.isEmpty()) {\r
- BasicDBList body = (BasicDBList) script.get("body");\r
- if (body != null && !body.isEmpty())\r
- for (Object actualBody : body) {\r
- BasicDBObject actualDBBody = (BasicDBObject) actualBody;\r
- BasicDBList contents = (BasicDBList) actualDBBody.get("content");\r
- if (contents != null && !contents.isEmpty())\r
- for (Object actualContent : contents) {\r
- BasicDBObject actualDBContent = (BasicDBObject) actualContent;\r
- scriptContent += GetContent(actualDBContent);\r
- }\r
- }\r
+ BasicDBObject script = asDBObject(story, SCRIPT);\r
+ if (script == null || script.isEmpty())\r
+ return null;\r
+\r
+ List<BasicDBObject> body = NoSQLUtils.asList(asDBList(script, BODY));\r
+ if (body.size() == 0)\r
+ return null;\r
+\r
+ StringBuilder sb = new StringBuilder();\r
+\r
+ for (BasicDBObject bodyItem : body) {\r
+ if (bodyItem.containsKey(LABEL)) {\r
+ sb.append(bodyItem.getString(LABEL));\r
+ sb.append(LINEFEED);\r
+ }\r
+ List<BasicDBObject> contents = NoSQLUtils.asList(asDBList(bodyItem, CONTENT));\r
+ for (BasicDBObject content : contents) {\r
+ sb.append(GetContent(content));\r
+ }\r
}\r
- return scriptContent;\r
+ return sb.length() == 0 ? null : sb.toString();\r
}\r
\r
- // private boolean isModified(Date date, BasicDBObject object, String name) {\r
- // Date actualModifiedString = toDate(object, name);\r
- // if (actualModifiedString == null)\r
- // logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL);\r
- // int result = date.compareTo(actualModifiedString);\r
- // return result <= 0;\r
- // }\r
-\r
private boolean isModified(Date date, BasicDBObject object) {\r
+ if (date == null)\r
+ return true;\r
Date modified = (Date) object.get(MODIFIED);\r
int result = date.compareTo(modified);\r
return result <= 0;\r
private BasicDBObject queryRundown(long id) {\r
logger.trace(ENTER);\r
BasicDBObject result = null;\r
- String fields = SLUGS_FIELDS;\r
+ String fields = FIELDS_SLUGS;\r
Response response = query(String.format("%s/", RUNDOWN) + id, fields).get();\r
String json = response.readEntity(String.class);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
return result;\r
}\r
\r
- private BasicDBList queryRundowns(Date lastUpdateTime) {\r
+ private BasicDBList queryRundowns() {\r
logger.trace(ENTER);\r
BasicDBList result = null;\r
- String fields = ID_NAME_MODIFIED_SCHEDULED_START;\r
- Response response = query(RUNDOWN, fields).get();\r
+ Response response = query(RUNDOWN, FIELDS_RUNDOWN_LIST).get();\r
String json = response.readEntity(String.class);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
if (resultObject != null)\r
private BasicDBObject queryStoryFolder(long id) {\r
logger.trace(ENTER);\r
BasicDBObject result = null;\r
- String fields = STORIES_FIELDS;\r
+ String fields = FIELDS_STORIES;\r
Response response = query(String.format("%s/", STORY_FOLDER) + id, fields).get();\r
String json = response.readEntity(String.class);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
return result;\r
}\r
\r
- private BasicDBList queryStoryFolders(Date lastUpdateTime) {\r
+ private BasicDBList queryStoryFolders() {\r
logger.trace(ENTER);\r
BasicDBList result = null;\r
- String fields = ID_NAME_MODIFIED;\r
- Response response = query(STORY_FOLDER, fields).get();\r
+ Response response = query(STORY_FOLDER, FIELDS_STORY_FOLDER_LIST).get();\r
String json = response.readEntity(String.class);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
if (resultObject != null)\r
List<BasicDBObject> list = NoSQLUtils.asList(result);\r
for (BasicDBObject actual : list) {\r
String fullName = concatParentsToStoryFolder(actual, actual.getString("name"));\r
- logger.info(String.format("fullname %s", fullName));\r
+ //logger.info("Checking StoryFolder {}", fullName);\r
actual.remove("name");\r
actual.append("name", fullName);\r
}\r
ensureIndexes();\r
Date lastUpdateTime = getLastUpdateTime();\r
setLastUpdateTime(new Date());\r
- BasicDBList rundowns = queryRundowns(lastUpdateTime);\r
- if (rundowns != null)\r
- storeRundowns(rundowns, lastUpdateTime);\r
- else {\r
+\r
+ buildStoriesReferences();\r
+\r
+ BasicDBList rundowns = queryRundowns();\r
+ storyRundowns = buildRundownReferences(rundowns);\r
+\r
+ BasicDBList storyFolders = queryStoryFolders();\r
+ storyStoryFolders = buildStoryFolderReferences(storyFolders);\r
+\r
+ if (rundowns == null || rundowns.size() == 0) {\r
progressEvent.setProgress(50);\r
fireProgressEvent(progressEvent);\r
+ } else {\r
+ storeRundowns(rundowns, lastUpdateTime);\r
}\r
\r
- BasicDBList storyFolders = queryStoryFolders(lastUpdateTime);\r
- if (storyFolders != null)\r
- storeStoryFolders(storyFolders, lastUpdateTime);\r
- else {\r
+ if (storyFolders == null || storyFolders.size() == 0) {\r
progressEvent.setProgress(100);\r
fireProgressEvent(progressEvent);\r
+ } else {\r
+ storeStoryFolders(storyFolders, lastUpdateTime);\r
}\r
deleteOrphanStories();\r
} catch (Exception e) {\r
- logger.error(e);\r
+ logger.catching(e);\r
+ throw e;\r
}\r
logger.trace(FINISHED);\r
}\r
BasicDBObject rundownWithStories = queryRundown(rundownID);\r
BasicDBList stories = asDBList(rundownWithStories, SLUGS);\r
if (stories != null)\r
- storeRundownStories(stories, rundownID, lastUpdateTime);\r
+ storeRundownStories(stories, lastUpdateTime);\r
rundown.put(SCHEDULED_START, toDate(rundown, SCHEDULED_START));\r
rundown.put(MODIFIED, toDate(rundown, MODIFIED));\r
DBCollection collection = db.getCollection(RUNDOWN_COLLECTION_NAME);\r
logger.trace(EXIT);\r
}\r
\r
- private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) {\r
- logger.trace(ENTER);\r
- List<BasicDBObject> rundownsList = NoSQLUtils.asList(rundowns);\r
- int idx = 1;\r
- for (BasicDBObject rundown : rundownsList) {\r
- logger.info(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx));\r
- storeRundown(rundown, lastUpdateTime);\r
- int progress = idx * 50 / rundownsList.size();\r
- if (progress - progressEvent.getProgress() > 0) {\r
- progressEvent.setProgress(progress);\r
- fireProgressEvent(progressEvent);\r
- }\r
-\r
- idx++;\r
- }\r
- logger.trace(EXIT);\r
- }\r
-\r
// private void insertStoryFoldersToDB2() {\r
// DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
// Set<String> storyKeys = storyFolders.keySet();\r
// storyFolders = converter.convertBasicDBObjectFromJson(result);\r
// }\r
\r
- private void storeRundownStories(BasicDBList slugs, long referenceID, Date lastUpdateTime) {\r
+ private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) {\r
+ logger.trace(ENTER);\r
+ List<BasicDBObject> rundownsList = NoSQLUtils.asList(rundowns);\r
+ int idx = 1;\r
+ for (BasicDBObject rundown : rundownsList) {\r
+ logger.info(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx));\r
+ storeRundown(rundown, lastUpdateTime);\r
+ int progress = idx * 50 / rundownsList.size();\r
+ if (progress - progressEvent.getProgress() > 0) {\r
+ progressEvent.setProgress(progress);\r
+ fireProgressEvent(progressEvent);\r
+ }\r
+\r
+ idx++;\r
+ }\r
+ logger.trace(EXIT);\r
+ }\r
+\r
+ private void storeRundownStories(BasicDBList slugs, Date lastUpdateTime) {\r
logger.trace(ENTER);\r
List<BasicDBObject> slugsList = NoSQLUtils.asList(slugs);\r
for (BasicDBObject slug : slugsList) {\r
if (slug.containsKey(STORY))\r
- storeStory((BasicDBObject) slug.get(STORY), slug.getInt(POSITION), referenceID, RUNDOWN2, lastUpdateTime);\r
+ storeStory((BasicDBObject) slug.get(STORY), lastUpdateTime);\r
}\r
logger.trace(EXIT);\r
}\r
\r
- private void storeStory(BasicDBObject story, int position, long referenceID, String referenceName, Date lastUpdateTime) {\r
+ private void storeStory(BasicDBObject story, Date lastUpdateTime) {\r
logger.trace(ENTER);\r
- try {\r
- // a run v�g�n lek�rj�k az �sszes storyID-t az adatb�zisb�l\r
- // �s ha van olyan eleme annak a list�nak, ami nincs benne a\r
- // mem�ri�ban t�rolt storyIDs setben, t�r�lj�k adatb�zisb�l\r
- long storyID = story.getLong(ID);\r
- DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
- BasicDBObject modifiedStory = story;\r
- // boolean trashed = story.getBoolean(TRASHED);\r
- // modifiedStory.remove(TRASHED);\r
- // nem m�k�dik\r
- /*\r
- * if (trashed) { modifiedStory = (BasicDBObject)\r
- * collection.findOne(new BasicDBObject(ID, storyID), new\r
- * BasicDBObject(_ID, 1)); collection.remove(modifiedStory); } else\r
- */\r
- checkAndStoreStory(modifiedStory, lastUpdateTime, storyID, position, referenceID, referenceName, collection);\r
- } catch (Exception e) {\r
- logger.error(e);\r
- throw e;\r
+ long storyID = story.getLong(ID);\r
+ boolean isContains = storyIDs.contains(storyID);\r
+ if (isContains)\r
+ return;\r
+ storyIDs.add(storyID);\r
+ story.put(MODIFIED, toDate(story, MODIFIED));\r
+ BasicDBList rundownRef = storyRundowns.get(storyID);\r
+ rundownRef = (rundownRef == null) ? new BasicDBList() : rundownRef;\r
+ BasicDBList storyFolderRef = storyStoryFolders.get(storyID);\r
+ storyFolderRef = (storyFolderRef == null) ? new BasicDBList() : storyFolderRef;\r
+\r
+ boolean uptodate = true;\r
+ if (!isModified(lastUpdateTime, story)) {\r
+ BasicDBList storedRundownRef = storedStoryRundowns.get(storyID);\r
+ storedRundownRef = (storedRundownRef == null) ? new BasicDBList() : storedRundownRef;\r
+ uptodate = storedRundownRef.equals(rundownRef);\r
+\r
+ if (uptodate) {\r
+ BasicDBList storedStoryFolderRef = storedStoryStoryFolders.get(storyID);\r
+ storedStoryFolderRef = (storedStoryFolderRef == null) ? new BasicDBList() : storedStoryFolderRef;\r
+ uptodate = storedStoryFolderRef.equals(storyFolderRef);\r
+ }\r
+ if (uptodate)\r
+ return;\r
+ }\r
+\r
+ DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+ if (lastUpdateTime != null) {\r
+ BasicDBObject orig = (BasicDBObject) collection.findOne(new BasicDBObject(ID, storyID), new BasicDBObject(ID, 1));\r
+ story.put("_id", orig.getID());\r
}\r
+ if (rundownRef != null)\r
+ story.put(REF_RUNDOWN, rundownRef);\r
+ if (storyFolderRef != null)\r
+ story.put(REF_STORYFOLDER, storyFolderRef);\r
+ String scriptContent = GetScriptContent(story);\r
+ story.put(SCRIPT_CONTENT, scriptContent);\r
+ logger.info(SAVING_STORY_ID, storyID);\r
+ collection.save(story);\r
logger.trace(EXIT);\r
}\r
\r
BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolderID);\r
BasicDBList stories = asDBList(storyFoldersWithStories, STORIES);\r
if (stories != null)\r
- storeStoryFolderStories(stories, storyFolderID, storyFolderID, lastUpdateTime);\r
+ storeStoryFolderStories(stories, lastUpdateTime);\r
storyFolder.put(MODIFIED, toDate(storyFolder, MODIFIED));\r
DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) {\r
logger.trace(EXIT);\r
}\r
\r
- private void storeStoryFolderStories(BasicDBList stories, long storyFolderID, long referenceID, Date lastUpdateTime) {\r
+ private void storeStoryFolderStories(BasicDBList stories, Date lastUpdateTime) {\r
logger.trace(ENTER);\r
List<BasicDBObject> list = NoSQLUtils.asList(stories);\r
for (BasicDBObject story : list)\r
- storeStory(story, 0, referenceID, STORYFOLDER, lastUpdateTime);\r
+ storeStory(story, lastUpdateTime);\r
logger.trace(EXIT);\r
}\r
\r