protected virtual void GetName([NotNull] IParseContext context, [NotNull] ITextNode sourceTextNode, [NotNull] out string name, [NotNull] out ITextNode nameTextNode, [NotNull] string elementName, [NotNull] string nameAttribute) { name = sourceTextNode.Key; if (!string.Equals(name, elementName, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(name)) { nameTextNode = new AttributeNameTextNode(sourceTextNode); return; } name = sourceTextNode.Value; if (!string.IsNullOrEmpty(name)) { nameTextNode = sourceTextNode; return; } var attr = sourceTextNode.GetAttribute(nameAttribute); if (attr != null) { name = attr.Value; nameTextNode = attr; return; } name = context.ItemName; nameTextNode = new FileNameTextNode(context.ItemName, sourceTextNode.Snapshot); }
public override void Parse(ItemParseContext context, ITextNode textNode) { var itemNameTextNode = GetItemNameTextNode(context.ParseContext, textNode); var itemIdOrPath = PathHelper.CombineItemPath(context.ParentItemPath, itemNameTextNode.Value); var guid = StringHelper.GetGuid(context.ParseContext.Project, textNode.GetAttributeValue("Id", itemIdOrPath)); var databaseName = textNode.GetAttributeValue("Database", context.DatabaseName); var templateIdOrPathTextNode = textNode.GetAttribute("Template"); var templateIdOrPath = templateIdOrPathTextNode?.Value ?? string.Empty; var item = context.ParseContext.Factory.Item(context.ParseContext.Project, textNode, guid, databaseName, itemNameTextNode.Value, itemIdOrPath, templateIdOrPath); item.ItemNameProperty.AddSourceTextNode(itemNameTextNode); item.IsEmittable = !string.Equals(textNode.GetAttributeValue(Constants.Fields.IsEmittable), "False", StringComparison.OrdinalIgnoreCase); item.IsImport = string.Equals(textNode.GetAttributeValue(Constants.Fields.IsExtern, context.IsExtern.ToString()), "True", StringComparison.OrdinalIgnoreCase); if (templateIdOrPathTextNode != null) { item.TemplateIdOrPathProperty.AddSourceTextNode(templateIdOrPathTextNode); if (!item.IsImport) { item.References.AddRange(context.ParseContext.ReferenceParser.ParseReferences(item, item.TemplateIdOrPathProperty)); } } context.ParseContext.PipelineService.Resolve<ItemParserPipeline>().Execute(context, item, textNode); ParseChildNodes(context, item, textNode); context.ParseContext.Project.AddOrMerge(item); }
protected virtual void ParseField([NotNull] ItemParseContext context, [NotNull] Template template, [NotNull] TemplateSection templateSection, [NotNull] ITextNode templateFieldTextNode, ref int nextSortOrder) { SchemaService.ValidateTextNodeSchema(templateFieldTextNode, "TemplateField"); GetName(context.ParseContext, templateFieldTextNode, out var fieldName, out var fieldNameTextNode, "Field", "Name"); if (string.IsNullOrEmpty(fieldName)) { Trace.TraceError(Msg.P1005, Texts._Field__element_must_have_a__Name__attribute, templateFieldTextNode.Snapshot.SourceFile.AbsoluteFileName, templateFieldTextNode.TextSpan); return; } var templateField = templateSection.Fields.FirstOrDefault(f => string.Equals(f.FieldName, fieldName, StringComparison.OrdinalIgnoreCase)); if (templateField == null) { var itemIdOrPath = template.ItemIdOrPath + "/" + templateSection.SectionName + "/" + fieldName; var guid = StringHelper.GetGuid(template.Project, templateFieldTextNode.GetAttributeValue("Id", itemIdOrPath)); templateField = Factory.TemplateField(template, guid).With(templateFieldTextNode); templateSection.Fields.Add(templateField); templateField.FieldNameProperty.SetValue(fieldNameTextNode); templateField.FieldName = fieldName; } templateField.TypeProperty.Parse(templateFieldTextNode, "Single-Line Text"); templateField.Shared = string.Equals(templateFieldTextNode.GetAttributeValue("Sharing"), "Shared", StringComparison.OrdinalIgnoreCase); templateField.Unversioned = string.Equals(templateFieldTextNode.GetAttributeValue("Sharing"), "Unversioned", StringComparison.OrdinalIgnoreCase); templateField.SourceProperty.Parse(templateFieldTextNode); templateField.ShortHelpProperty.Parse(templateFieldTextNode); templateField.LongHelpProperty.Parse(templateFieldTextNode); templateField.SortorderProperty.Parse(templateFieldTextNode, nextSortOrder); nextSortOrder = templateField.Sortorder + 100; // set field standard value var standardValueTextNode = templateFieldTextNode.GetAttribute("StandardValue"); if (standardValueTextNode != null && !string.IsNullOrEmpty(standardValueTextNode.Value)) { if (template.StandardValuesItem == null) { Trace.TraceError(Msg.P1006, Texts.Template_does_not_a_standard_values_item, standardValueTextNode); } else { var field = template.StandardValuesItem.Fields.GetField(templateField.FieldName); if (field == null) { field = Factory.Field(template.StandardValuesItem).With(standardValueTextNode); field.FieldNameProperty.SetValue(fieldNameTextNode); template.StandardValuesItem.Fields.Add(field); } field.ValueProperty.SetValue(standardValueTextNode); } } template.References.AddRange(ReferenceParser.ParseReferences(template, templateField.SourceProperty)); }
protected override void ParseFieldTextNode(ItemParseContext context, Item item, LanguageVersionContext languageVersionContext, ITextNode textNode) { var fieldNameTextNode = string.IsNullOrEmpty(textNode.Value) ? textNode.GetAttribute("Name") : textNode; if (fieldNameTextNode == null) { context.ParseContext.Trace.TraceError(Msg.P1015, Texts.Expected__Name__attribute, textNode); return; } ParseFieldTextNode(context, item, languageVersionContext, textNode, fieldNameTextNode); }
public virtual bool ParseIfHasAttribute([NotNull] ITextNode textNode) { var attribute = textNode.GetAttribute(Key); if (attribute == null) { return(false); } Parse(textNode); return(true); }
public static string GetAttributeValue([NotNull] this ITextNode textNode, [NotNull] string attributeName, [NotNull] string defaultValue = "") { var attribute = textNode.GetAttribute(attributeName); if (attribute == null) { return(defaultValue); } var value = attribute.Value; return(!string.IsNullOrEmpty(value) ? value : defaultValue); }
public override void Parse(ItemParseContext context, ITextNode textNode) { var itemNameTextNode = GetItemNameTextNode(context.ParseContext, textNode); var itemIdOrPath = PathHelper.CombineItemPath(context.ParentItemPath, itemNameTextNode.Value); var guid = StringHelper.GetGuid(context.ParseContext.Project, textNode.GetAttributeValue("Id", itemIdOrPath)); var databaseName = textNode.GetAttributeValue("Database", context.DatabaseName); var template = context.ParseContext.Factory.Template(context.ParseContext.Project, guid, textNode, databaseName, itemNameTextNode.Value, itemIdOrPath); template.ItemNameProperty.AddSourceTextNode(itemNameTextNode); template.BaseTemplatesProperty.Parse(textNode, Constants.Templates.StandardTemplate); template.IconProperty.Parse(textNode); template.ShortHelpProperty.Parse(textNode); template.LongHelpProperty.Parse(textNode); template.IsEmittable = !string.Equals(textNode.GetAttributeValue(Constants.Fields.IsEmittable), "False", StringComparison.OrdinalIgnoreCase); template.IsImport = string.Equals(textNode.GetAttributeValue(Constants.Fields.IsExtern, context.IsExtern.ToString()), "True", StringComparison.OrdinalIgnoreCase); template.References.AddRange(context.ParseContext.ReferenceParser.ParseReferences(template, template.BaseTemplatesProperty)); // create standard values item var standardValuesItemIdOrPath = itemIdOrPath + "/__Standard Values"; var standardValuesGuid = StringHelper.GetGuid(context.ParseContext.Project, standardValuesItemIdOrPath); var standardValuesItem = context.ParseContext.Factory.Item(context.ParseContext.Project, textNode, standardValuesGuid, databaseName, "__Standard Values", standardValuesItemIdOrPath, itemIdOrPath); standardValuesItem.IsImport = template.IsImport; // todo: should be Uri template.StandardValuesItem = standardValuesItem; // parse fields and sections var sections = textNode.GetSnapshotLanguageSpecificChildNode("Sections"); if (sections != null) { foreach (var sectionTreeNode in sections.ChildNodes) { ParseSection(context, template, sectionTreeNode); } } // setup HtmlTemplate var htmlFileTextNode = textNode.GetAttribute("Layout.HtmlFile"); if (htmlFileTextNode != null && !string.IsNullOrEmpty(htmlFileTextNode.Value)) { var field = context.ParseContext.Factory.Field(template.StandardValuesItem, htmlFileTextNode); field.FieldNameProperty.SetValue("__Renderings"); field.ValueProperty.SetValue(htmlFileTextNode.Value); field.ValueHintProperty.SetValue("HtmlTemplate"); template.StandardValuesItem.Fields.Add(field); } context.ParseContext.Project.AddOrMerge(template); context.ParseContext.Project.AddOrMerge(standardValuesItem); }
protected override void ParseFieldTextNode(ItemParseContext context, Item item, LanguageVersionContext languageVersionContext, ITextNode textNode) { var fieldNameTextNode = textNode.Key == "Field" ? textNode.GetAttribute("Name") : new AttributeNameTextNode(textNode); if (fieldNameTextNode == null) { context.ParseContext.Trace.TraceError(Msg.P1014, Texts.Expected__Name__attribute, textNode); return; } if (textNode.Attributes.Any() || textNode.ChildNodes.Any()) { base.ParseFieldTextNode(context, item, languageVersionContext, textNode, fieldNameTextNode); return; } base.ParseFieldTextNode(context, item, languageVersionContext, textNode, fieldNameTextNode, textNode); }
public virtual void Parse([NotNull] ITextNode textNode, [CanBeNull] T defaultValue = default(T)) { if (Locking == Locking.ReadOnly) { throw new InvalidOperationException("SourceProperty cannot be modified as it is read only: " + Key); } var attribute = textNode.GetAttribute(Key); if (attribute != null) { SetValue(attribute); } else if (defaultValue != null) { SetValue(defaultValue); } else { SetValue(_defaultValue); } }
public static bool HasAttribute([NotNull] this ITextNode textNode, [NotNull] string attributeName) => textNode.GetAttribute(attributeName) != null;
protected virtual ITextNode GetItemNameTextNode([NotNull] IParseContext context, [NotNull] ITextNode textNode, [NotNull] string attributeName = "Name") { return(textNode.GetAttribute(attributeName) ?? new FileNameTextNode(context.ItemName, textNode.Snapshot)); }