using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.Serialization; namespace GitHub.Build.WebApi.Internals { /// /// For back-compat with extensions that use the old Steps format instead of Process and Phases /// [DataContract] [EditorBrowsable(EditorBrowsableState.Never)] public class BuildDefinitionTemplate3_2 { public BuildDefinitionTemplate3_2() { Category = "Custom"; } [DataMember(IsRequired = true)] public String Id { get; set; } [DataMember(IsRequired = true)] public String Name { get; set; } [DataMember(EmitDefaultValue = true)] public Boolean CanDelete { get; set; } [DataMember(EmitDefaultValue = true)] public String Category { get; set; } [DataMember(EmitDefaultValue = true)] public String DefaultHostedQueue { get; set; } [DataMember(EmitDefaultValue = false)] public Guid IconTaskId { get; set; } [DataMember(EmitDefaultValue = false)] public String Description { get; set; } [DataMember(EmitDefaultValue = false)] public BuildDefinition3_2 Template { get; set; } public IDictionary Icons { get { if (m_icons == null) { m_icons = new Dictionary(StringComparer.Ordinal); } return m_icons; } } [DataMember(EmitDefaultValue = false, Name = "Icons")] private Dictionary m_icons; } internal static class BuildDefinitionTemplate3_2Extensions { public static BuildDefinitionTemplate ToBuildDefinitionTemplate( this BuildDefinitionTemplate3_2 source) { if (source == null) { return null; } var result = new BuildDefinitionTemplate() { CanDelete = source.CanDelete, Category = source.Category, DefaultHostedQueue = source.DefaultHostedQueue, Description = source.Description, IconTaskId = source.IconTaskId, Id = source.Id, Name = source.Name, Template = source.Template.ToBuildDefinition() }; foreach (var iconPair in source.Icons) { result.Icons.Add(iconPair.Key, iconPair.Value); } return result; } } }