using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; using Newtonsoft.Json; using Umbraco.Core.Models; namespace Umbraco.Web.Models.ContentEditing { /// /// A model representing a basic content item /// [DataContract(Name = "content", Namespace = "")] public class ContentItemBasic where T: ContentPropertyBasic { public ContentItemBasic() { //ensure its not null _properties = new List(); } private IEnumerable _properties; [DataMember(Name = "id", IsRequired = true)] [Required] public int Id { get; set; } [DataMember(Name = "name", IsRequired = true)] [Required(AllowEmptyStrings = false)] public string Name { get; set; } [DataMember(Name = "properties")] public virtual IEnumerable Properties { get { return _properties; } set { _properties = value; } } [DataMember(Name = "updateDate")] public DateTime UpdateDate { get; set; } [DataMember(Name = "createDate")] public DateTime CreateDate { get; set; } [DataMember(Name = "parentId", IsRequired = true)] [Required] public int ParentId { get; set; } [DataMember(Name = "owner")] public UserBasic Owner { get; set; } [DataMember(Name = "updator")] public UserBasic Updator { get; set; } [DataMember(Name = "contentTypeAlias", IsRequired = true)] [Required(AllowEmptyStrings = false)] public string ContentTypeAlias { get; set; } /// /// The real persisted content object /// [JsonIgnore] internal IContent PersistedContent { get; set; } /// /// The DTO object used to gather all required content data including data type information etc... for use with validation /// /// /// We basically use this object to hydrate all required data from the database into one object so we can validate everything we need /// instead of having to look up all the data individually. /// [JsonIgnore] internal ContentItemDto ContentDto { get; set; } protected bool Equals(ContentItemBasic other) { return Id == other.Id; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; var other = obj as ContentItemBasic; return other != null && Equals(other); } public override int GetHashCode() { return Id; } } }