public virtual IImportRecord Read(XPathNavigator navigator) { if (navigator == null) { throw new ArgumentNullException("navigator"); } ReadingJournal journal = new ReadingJournal(); foreach (XPathNavigator itemElement in EnumerateChildren(navigator)) { try { ContentItem item = ReadSingleItem(itemElement, journal); journal.Report(item); } catch (DefinitionNotFoundException ex) { journal.Error(ex); if (!_ignoreMissingTypes) { throw; } } } return(journal); }
internal ContentDetail ReadMultipleValue(XPathNavigator navigator, ContentItem item, ReadingJournal journal, string name) { var multiDetail = ContentDetail.Multi(name); foreach (XPathNavigator valueElement in EnumerateChildren(navigator)) { switch (valueElement.GetAttribute("key", "")) { case ContentDetail.TypeKeys.BoolType: multiDetail.BoolValue = (bool)Parse(valueElement.Value, typeof(bool)); break; case ContentDetail.TypeKeys.DateTimeType: multiDetail.DateTimeValue = (DateTime)Parse(valueElement.Value, typeof(DateTime)); break; case ContentDetail.TypeKeys.DoubleType: multiDetail.DoubleValue = (double)Parse(valueElement.Value, typeof(double)); break; case ContentDetail.TypeKeys.IntType: multiDetail.IntValue = (int)Parse(valueElement.Value, typeof(int)); break; case ContentDetail.TypeKeys.LinkType: SetLinkedItem(valueElement.Value, journal, (referencedItem) => multiDetail.LinkedItem = referencedItem); break; case ContentDetail.TypeKeys.MultiType: journal.Error(new InvalidOperationException("Nested multi types not supported")); break; case ContentDetail.TypeKeys.ObjectType: multiDetail.ObjectValue = Parse(valueElement.Value, typeof(object)); break; case ContentDetail.TypeKeys.StringType: multiDetail.StringValue = (string)PrepareStringDetail(item, name, valueElement.Value); break; } } return multiDetail; }
internal ContentDetail ReadMultipleValue(XPathNavigator navigator, ContentItem item, ReadingJournal journal, string name) { var multiDetail = ContentDetail.Multi(name); foreach (XPathNavigator valueElement in EnumerateChildren(navigator)) { switch (valueElement.GetAttribute("key", "")) { case ContentDetail.TypeKeys.BoolType: multiDetail.BoolValue = (bool)Parse(valueElement.Value, typeof(bool)); break; case ContentDetail.TypeKeys.DateTimeType: multiDetail.DateTimeValue = (DateTime)Parse(valueElement.Value, typeof(DateTime)); break; case ContentDetail.TypeKeys.DoubleType: multiDetail.DoubleValue = (double)Parse(valueElement.Value, typeof(double)); break; case ContentDetail.TypeKeys.IntType: multiDetail.IntValue = (int)Parse(valueElement.Value, typeof(int)); break; case ContentDetail.TypeKeys.LinkType: SetLinkedItem(valueElement.Value, journal, (referencedItem) => multiDetail.LinkedItem = referencedItem, valueElement.GetAttribute("versionKey", "")); break; case ContentDetail.TypeKeys.MultiType: journal.Error(new InvalidOperationException("Nested multi types not supported")); break; case ContentDetail.TypeKeys.ObjectType: multiDetail.ObjectValue = Parse(valueElement.Value, typeof(object)); break; case ContentDetail.TypeKeys.EnumType: /* TODO: May need special treatment here as well (see other TODO). */ case ContentDetail.TypeKeys.StringType: Dictionary <string, string> attributes = GetAttributes(navigator); multiDetail.StringValue = PrepareStringDetail(item, name, valueElement.Value, attributes.ContainsKey("encoded") && Convert.ToBoolean(attributes["encoded"])); break; default: throw new Exception("Failed to read MultipleValue"); } } return(multiDetail); }
internal ContentDetail ReadMultipleValue(XPathNavigator navigator, ContentItem item, ReadingJournal journal, string name) { var multiDetail = ContentDetail.Multi(name); foreach (XPathNavigator valueElement in EnumerateChildren(navigator)) { switch (valueElement.GetAttribute("key", "")) { case ContentDetail.TypeKeys.BoolType: multiDetail.BoolValue = (bool)Parse(valueElement.Value, typeof(bool)); break; case ContentDetail.TypeKeys.DateTimeType: multiDetail.DateTimeValue = (DateTime)Parse(valueElement.Value, typeof(DateTime)); break; case ContentDetail.TypeKeys.DoubleType: multiDetail.DoubleValue = (double)Parse(valueElement.Value, typeof(double)); break; case ContentDetail.TypeKeys.IntType: multiDetail.IntValue = (int)Parse(valueElement.Value, typeof(int)); break; case ContentDetail.TypeKeys.LinkType: SetLinkedItem(valueElement.Value, journal, (referencedItem) => multiDetail.LinkedItem = referencedItem); break; case ContentDetail.TypeKeys.MultiType: journal.Error(new InvalidOperationException("Nested multi types not supported")); break; case ContentDetail.TypeKeys.ObjectType: multiDetail.ObjectValue = Parse(valueElement.Value, typeof(object)); break; case ContentDetail.TypeKeys.StringType: multiDetail.StringValue = (string)PrepareStringDetail(item, name, valueElement.Value); break; } } return(multiDetail); }
public virtual IImportRecord Read(XPathNavigator navigator) { if (navigator == null) throw new ArgumentNullException("navigator"); ReadingJournal journal = new ReadingJournal(); foreach (XPathNavigator itemElement in EnumerateChildren(navigator)) { try { ContentItem item = ReadSingleItem(itemElement, journal); journal.Report(item); } catch (DefinitionNotFoundException ex) { journal.Error(ex); if (!ignoreMissingTypes) throw; } } return journal; }
internal ContentDetail ReadMultipleValue(XPathNavigator navigator, ContentItem item, ReadingJournal journal, string name) { var multiDetail = ContentDetail.Multi(name); foreach (XPathNavigator valueElement in EnumerateChildren(navigator)) { switch (valueElement.GetAttribute("key", "")) { case ContentDetail.TypeKeys.BoolType: multiDetail.BoolValue = (bool)Parse(valueElement.Value, typeof(bool)); break; case ContentDetail.TypeKeys.DateTimeType: multiDetail.DateTimeValue = (DateTime)Parse(valueElement.Value, typeof(DateTime)); break; case ContentDetail.TypeKeys.DoubleType: multiDetail.DoubleValue = (double)Parse(valueElement.Value, typeof(double)); break; case ContentDetail.TypeKeys.IntType: multiDetail.IntValue = (int)Parse(valueElement.Value, typeof(int)); break; case ContentDetail.TypeKeys.LinkType: SetLinkedItem(valueElement.Value, journal, (referencedItem) => multiDetail.LinkedItem = referencedItem, valueElement.GetAttribute("versionKey", "")); break; case ContentDetail.TypeKeys.MultiType: journal.Error(new InvalidOperationException("Nested multi types not supported")); break; case ContentDetail.TypeKeys.ObjectType: multiDetail.ObjectValue = Parse(valueElement.Value, typeof(object)); break; case ContentDetail.TypeKeys.EnumType: /* TODO: May need special treatment here as well (see other TODO). */ case ContentDetail.TypeKeys.StringType: Dictionary<string, string> attributes = GetAttributes(navigator); multiDetail.StringValue = PrepareStringDetail(item, name, valueElement.Value, attributes.ContainsKey("encoded") && Convert.ToBoolean(attributes["encoded"])); break; default: throw new Exception("Failed to read MultipleValue"); } } return multiDetail; }