protected virtual void ReadDetail(XPathNavigator navigator, PropertyCollection collection, ReadingJournal journal) { Dictionary<string, string> attributes = GetAttributes(navigator); Type type = attributes["typeName"].ToType(); if (type != typeof(ContentItem)) { collection.Add(Parse(navigator.Value, type)); } else { int referencedItemID = int.Parse(navigator.Value); ContentItem referencedItem = journal.Find(referencedItemID); if (referencedItem != null) collection.Add(referencedItem); else journal.ItemAdded += (sender, e) => { if (e.AffectedItem.ID == referencedItemID) { collection.Add(e.AffectedItem); } }; } }
protected virtual void ReadDetail(XPathNavigator navigator, ContentItem item, ReadingJournal journal) { Dictionary<string, string> attributes = GetAttributes(navigator); Type type = attributes["typeName"].ToType(); string name = attributes["name"]; if (!typeof(ContentItem).IsAssignableFrom(type)) { item[name] = Parse(navigator.Value, type); } else { int referencedItemID = int.Parse(navigator.Value); ContentItem referencedItem = journal.Find(referencedItemID); if (referencedItem != null) item[name] = referencedItem; else journal.ItemAdded += (sender, e) => { if (e.AffectedItem.ID == referencedItemID) item[name] = e.AffectedItem; }; } }
protected virtual void HandleParentRelation(ContentItem item, string parent, ReadingJournal journal) { if (!string.IsNullOrEmpty(parent)) { int parentID = int.Parse(parent); ContentItem parentItem = journal.Find(parentID); item.AddTo(parentItem); } }
protected virtual void HandleTranslationRelation(ContentItem item, string translationOf, ReadingJournal journal) { if (!string.IsNullOrEmpty(translationOf)) { int translationOfID = int.Parse(translationOf); ContentItem masterItem = journal.Find(translationOfID); item.TranslationOf = masterItem; } }