コード例 #1
0
        private void ParseFields([NotNull] Item item, [NotNull] ITextNode textNode, [NotNull] LanguageVersionContext fieldContext)
        {
            foreach (var fieldNode in textNode.ChildNodes.Where(n => n.Key == "ID"))
            {
                var fieldName = fieldNode.GetAttribute("Hint");
                if (fieldName == null)
                {
                    Trace.TraceError(Msg.P1038, "'Hint' attribute expected", fieldNode);
                    continue;
                }

                var fieldValue = fieldNode.GetAttribute("Value");
                if (fieldValue == null)
                {
                    Trace.TraceError(Msg.P1039, "'Value' attribute expected", fieldNode);
                    continue;
                }

                var field = Factory.Field(item).With(fieldNode);
                field.FieldNameProperty.SetValue(fieldName);
                field.ValueProperty.SetValue(fieldValue);
                field.LanguageProperty.SetValue(fieldContext.LanguageProperty);
                field.VersionProperty.SetValue(fieldContext.VersionProperty);

                item.Fields.Add(field);
            }
        }
コード例 #2
0
        protected override void ParseFieldsTextNode(ItemParseContext context, Item item, ITextNode fieldsTextNode)
        {
            // parse shared fields
            var fieldContext = new LanguageVersionContext();

            ParseAttributes(context, item, fieldContext, fieldsTextNode);

            // parse unversioned and versioned fields
            foreach (var languageChildNode in fieldsTextNode.ChildNodes)
            {
                var languageVersionContext = new LanguageVersionContext();
                languageVersionContext.LanguageProperty.SetValue(new AttributeNameTextNode(languageChildNode));

                ParseAttributes(context, item, languageVersionContext, languageChildNode);
                ParseFields(context, item, languageVersionContext, languageChildNode);

                foreach (var childNode in languageChildNode.ChildNodes.Where(c => c.Key == "Version"))
                {
                    var versionVersionContext = new LanguageVersionContext();
                    versionVersionContext.LanguageProperty.SetValue(languageVersionContext.LanguageProperty);
                    versionVersionContext.VersionProperty.Parse(childNode);

                    ParseAttributes(context, item, versionVersionContext, childNode);
                    ParseFields(context, item, languageVersionContext, childNode);
                }
            }
        }
コード例 #3
0
        protected override void ParseFieldsTextNode(ItemParseContext context, Item item, ITextNode fieldsTextNode)
        {
            // parse shared fields
            var fieldContext = new LanguageVersionContext();

            ParseAttributes(context, item, fieldContext, fieldsTextNode);

            // parse unversioned and versioned fields
            foreach (var languageChildNode in fieldsTextNode.ChildNodes)
            {
                var languageVersionContext = new LanguageVersionContext();
                languageVersionContext.LanguageProperty.SetValue(new AttributeNameTextNode(languageChildNode));

                ParseAttributes(context, item, languageVersionContext, languageChildNode);

                foreach (var versionChildNode in languageChildNode.ChildNodes)
                {
                    if (!int.TryParse(versionChildNode.Key, out var _))
                    {
                        Trace.TraceError(Msg.C1136, "Version element is not a valid number", versionChildNode);
                        continue;
                    }

                    var versionVersionContext = new LanguageVersionContext();
                    versionVersionContext.LanguageProperty.SetValue(languageVersionContext.LanguageProperty);

                    versionVersionContext.VersionProperty.SetValue(new AttributeNameTextNode(versionChildNode));

                    ParseAttributes(context, item, versionVersionContext, versionChildNode);
                }
            }
        }
コード例 #4
0
        public override void Parse(ItemParseContext context, ITextNode textNode)
        {
            var guid = GetGuid(textNode, "ID");

            if (guid == Guid.Empty)
            {
                Trace.TraceError(Msg.P1035, "'ID' attribute is missing or invalid", textNode);
                return;
            }

            var templateGuid = GetGuid(textNode, "Template");

            if (templateGuid == Guid.Empty)
            {
                Trace.TraceError(Msg.P1036, "'Template' attribute is missing or invalid", textNode);
                return;
            }

            var databaseName     = textNode.GetAttributeValue("DB", context.Database.DatabaseName);
            var database         = context.ParseContext.Project.GetDatabase(databaseName);
            var itemIdOrPath     = textNode.GetAttributeValue("Path");
            var itemName         = Path.GetFileName(itemIdOrPath);
            var templateIdOrPath = templateGuid.Format();

            var item = Factory.Item(database, guid, itemName, itemIdOrPath, templateIdOrPath).With(textNode);

            var sharedFieldContext = new LanguageVersionContext();

            ParseFields(item, textNode, sharedFieldContext);

            foreach (var languageNode in textNode.ChildNodes.Where(n => n.Key == "Language"))
            {
                var unversionedFieldContext = new LanguageVersionContext();
                unversionedFieldContext.LanguageProperty.SetValue(languageNode);

                ParseFields(item, languageNode, unversionedFieldContext);

                foreach (var versionNode in languageNode.ChildNodes.Where(n => n.Key == "Version"))
                {
                    if (!int.TryParse(versionNode.Value, out var _))
                    {
                        Trace.TraceError(Msg.P1037, "Version number must be an integer", versionNode);
                        continue;
                    }

                    var versionedFieldContext = new LanguageVersionContext();
                    versionedFieldContext.LanguageProperty.SetValue(languageNode);
                    versionedFieldContext.VersionProperty.SetValue(versionNode);

                    ParseFields(item, versionNode, versionedFieldContext);
                }
            }

            context.ParseContext.Project.AddOrMerge(item);
        }
コード例 #5
0
 protected void ParseFields([NotNull] ItemParseContext context, [NotNull] Item item, [NotNull] LanguageVersionContext languageVersionContext, [NotNull] ITextNode parentTextNode)
 {
     foreach (var childNode in parentTextNode.ChildNodes.Where(c => c.Key != "Version"))
     {
         ParseFieldTextNode(context, item, languageVersionContext, childNode);
     }
 }