using System; using System.IO; using System.Runtime.Serialization; using Umbraco.Core.Models.EntityBase; namespace Umbraco.Core.Models { /// /// Represents an abstract file which provides basic functionality for a File with an Alias and Name /// [Serializable] [DataContract(IsReference = true)] public abstract class File : Entity, IFile { protected File(string path) { Path = path; } /// /// Gets or sets the Name of the File including extension /// [DataMember] public virtual string Name { get { return new FileInfo(Path).Name; } } /// /// Gets or sets the Alias of the File, which is the name without the extension /// [DataMember] public virtual string Alias { get { var fileInfo = new FileInfo(Path); var name = fileInfo.Name; int lastIndexOf = name.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase); return name.Substring(0, lastIndexOf); } } /// /// Gets or sets the Path to the File from the root of the site /// [DataMember] public virtual string Path { get; set; } /// /// Gets or sets the Content of a File /// [DataMember] public virtual string Content { get; set; } /// /// Boolean indicating whether the file could be validated /// /// True if file is valid, otherwise false public abstract bool IsValid(); /// /// Indicates whether the current entity has an identity, which in this case is a path/name. /// /// /// Overrides the default Entity identity check. /// public override bool HasIdentity { get { return string.IsNullOrEmpty(Path) == false; } } } }