Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
 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;
 }