using System; using System.Runtime.Serialization; using Umbraco.Core.Strings; namespace Umbraco.Core.Models { /// /// Represents a Template file. /// [Serializable] [DataContract(IsReference = true)] public class Template : File, ITemplate { private string _alias; private string _name; private string _masterTemplateAlias; private Lazy _masterTemplateId; public Template(string name, string alias) : this(name, alias, (Func) null) { } internal Template(string name, string alias, Func getFileContent) : base(string.Empty, getFileContent) { _name = name; _alias = alias.ToCleanString(CleanStringType.UnderscoreAlias); _masterTemplateId = new Lazy(() => -1); } [DataMember] public Lazy MasterTemplateId { get => _masterTemplateId; set => SetPropertyValueAndDetectChanges(value, ref _masterTemplateId, nameof(MasterTemplateId)); } public string MasterTemplateAlias { get => _masterTemplateAlias; set => SetPropertyValueAndDetectChanges(value, ref _masterTemplateAlias, nameof(MasterTemplateAlias)); } [DataMember] public new string Name { get => _name; set => SetPropertyValueAndDetectChanges(value, ref _name, nameof(Name)); } [DataMember] public new string Alias { get => _alias; set => SetPropertyValueAndDetectChanges(value.ToCleanString(CleanStringType.UnderscoreAlias), ref _alias, nameof(Alias)); } /// /// Returns true if the template is used as a layout for other templates (i.e. it has 'children') /// public bool IsMasterTemplate { get; internal set; } public void SetMasterTemplate(ITemplate masterTemplate) { if (masterTemplate == null) { MasterTemplateId = new Lazy(() => -1); MasterTemplateAlias = null; } else { MasterTemplateId = new Lazy(() => masterTemplate.Id); MasterTemplateAlias = masterTemplate.Alias; } } protected override void DeepCloneNameAndAlias(File clone) { // do nothing - prevents File from doing its stuff } } }