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