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); } }
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); } } }
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); } } }
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); }
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); } }