using System; using System.Collections.Generic; using System.Linq; namespace Umbraco.Core.Models { /// /// Represents a folder for organizing entities such as content types and data types. /// public sealed class EntityContainer : UmbracoEntity { private readonly Guid _containedObjectType; private static readonly Dictionary ObjectTypeMap = new Dictionary { { Constants.ObjectTypes.DataTypeGuid, Constants.ObjectTypes.DataTypeContainerGuid }, { Constants.ObjectTypes.DocumentTypeGuid, Constants.ObjectTypes.DocumentTypeContainerGuid }, { Constants.ObjectTypes.MediaTypeGuid, Constants.ObjectTypes.MediaTypeContainerGuid } }; /// /// Initializes a new instance of an class. /// public EntityContainer(Guid containedObjectType) { if (ObjectTypeMap.ContainsKey(containedObjectType) == false) throw new ArgumentException("Not a contained object type.", "containedObjectType"); _containedObjectType = containedObjectType; ParentId = -1; Path = "-1"; Level = 0; SortOrder = 0; } /// /// Initializes a new instance of an class. /// internal EntityContainer(int id, Guid uniqueId, int parentId, string path, int level, int sortOrder, Guid containedObjectType, string name, int userId) : this(containedObjectType) { Id = id; Key = uniqueId; ParentId = parentId; Name = name; Path = path; Level = level; SortOrder = sortOrder; CreatorId = userId; } /// /// Gets or sets the node object type of the contained objects. /// public Guid ContainedObjectType { get { return _containedObjectType; } } /// /// Gets the node object type of the container objects. /// public Guid ContainerObjectType { get { return ObjectTypeMap[_containedObjectType]; } } /// /// Gets the container object type corresponding to a contained object type. /// /// The contained object type. /// The object type of containers containing objects of the contained object type. public static Guid GetContainerObjectType(Guid containedObjectType) { if (ObjectTypeMap.ContainsKey(containedObjectType) == false) throw new ArgumentException("Not a contained object type.", "containedObjectType"); return ObjectTypeMap[containedObjectType]; } /// /// Gets the contained object type corresponding to a container object type. /// /// The container object type. /// The object type of objects that containers of the container object type can contain. public static Guid GetContainedObjectType(Guid containerObjectType) { var contained = ObjectTypeMap.FirstOrDefault(x => x.Value == containerObjectType).Key; if (contained == null) throw new ArgumentException("Not a container object type.", "containerObjectType"); return contained; } } }