From 9ca4fbff9d100f5689de820c11801e82b745c72b Mon Sep 17 00:00:00 2001 From: "Morten@Thinkpad-X220" Date: Tue, 9 Oct 2012 10:10:18 -0200 Subject: [PATCH] Adds MediaTypeFactory implementation U4-981 --- .../Factories/ContentTypeFactory.cs | 4 +- .../Persistence/Factories/MediaTypeFactory.cs | 82 ++++++++++++++++ .../Repositories/ContentTypeRepository.cs | 2 + .../Repositories/MediaRepository.cs | 80 +++++++++++++++ .../Repositories/MediaTypeRepository.cs | 98 +++++++++++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 3 + 6 files changed, 267 insertions(+), 2 deletions(-) create mode 100644 src/Umbraco.Core/Persistence/Factories/MediaTypeFactory.cs create mode 100644 src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs create mode 100644 src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs diff --git a/src/Umbraco.Core/Persistence/Factories/ContentTypeFactory.cs b/src/Umbraco.Core/Persistence/Factories/ContentTypeFactory.cs index 81524807bc..5e3fd4768d 100644 --- a/src/Umbraco.Core/Persistence/Factories/ContentTypeFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/ContentTypeFactory.cs @@ -9,13 +9,13 @@ namespace Umbraco.Core.Persistence.Factories { private readonly Guid _nodeObjectType; - #region Implementation of IEntityFactory - public ContentTypeFactory(Guid nodeObjectType) { _nodeObjectType = nodeObjectType; } + #region Implementation of IEntityFactory + public IContentType BuildEntity(DocumentTypeDto dto) { var contentType = new ContentType diff --git a/src/Umbraco.Core/Persistence/Factories/MediaTypeFactory.cs b/src/Umbraco.Core/Persistence/Factories/MediaTypeFactory.cs new file mode 100644 index 0000000000..769f1066c1 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Factories/MediaTypeFactory.cs @@ -0,0 +1,82 @@ +using System; +using System.Globalization; +using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; + +namespace Umbraco.Core.Persistence.Factories +{ + internal class MediaTypeFactory : IEntityFactory + { + private readonly Guid _nodeObjectType; + + public MediaTypeFactory(Guid nodeObjectType) + { + _nodeObjectType = nodeObjectType; + } + + #region Implementation of IEntityFactory + + public IMediaType BuildEntity(ContentTypeDto dto) + { + var contentType = new MediaType + { + Id = dto.NodeDto.NodeId, + Key = + dto.NodeDto.UniqueId.HasValue + ? dto.NodeDto.UniqueId.Value + : dto.NodeDto.NodeId.ToGuid(), + Alias = dto.Alias, + Name = dto.NodeDto.Text, + Icon = dto.Icon, + Thumbnail = dto.Thumbnail, + SortOrder = dto.NodeDto.SortOrder, + Description = dto.Description, + CreateDate = dto.NodeDto.CreateDate, + Path = dto.NodeDto.Path, + Level = dto.NodeDto.Level, + ParentId = dto.NodeDto.ParentId, + UserId = + dto.NodeDto.UserId.HasValue + ? dto.NodeDto.UserId.Value + : 0, + Trashed = dto.NodeDto.Trashed + }; + return contentType; + } + + public ContentTypeDto BuildDto(IMediaType entity) + { + var contentTypeDto = new ContentTypeDto + { + Alias = entity.Alias, + Description = entity.Description, + Icon = entity.Icon, + Thumbnail = entity.Thumbnail, + NodeId = entity.Id, + NodeDto = BuildNodeDto(entity) + }; + return contentTypeDto; + } + + #endregion + + private NodeDto BuildNodeDto(IMediaType entity) + { + var nodeDto = new NodeDto + { + CreateDate = entity.CreateDate, + NodeId = entity.Id, + Level = short.Parse(entity.Level.ToString(CultureInfo.InvariantCulture)), + NodeObjectType = _nodeObjectType, + ParentId = entity.ParentId, + Path = entity.Path, + SortOrder = entity.SortOrder, + Text = entity.Name, + Trashed = false, + UniqueId = entity.Key, + UserId = entity.UserId + }; + return nodeDto; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs index 72b9351f83..645967d3df 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs @@ -39,6 +39,7 @@ namespace Umbraco.Core.Persistence.Repositories return null; //TODO Get ContentType composition according to new table + //TODO Add AllowedContentTypes var propertySql = new Sql(); propertySql.Select("*"); @@ -103,6 +104,7 @@ namespace Umbraco.Core.Persistence.Repositories //NOTE: If IsDefault=true we won't get ContentTypes like File, Folder etc. but only DocumentTypes. //Which is why "AND cmsDocumentType.IsDefault = @IsDefault" has been removed from sql below. //But might need to add it if we create a MediaTypeRepository + //NOTE: Think the above is incorrect as ContentType and MediaType have different NodeObjectTypes. sql.Select(isCount ? "COUNT(*)" : "*"); sql.From("cmsDocumentType"); sql.RightJoin("cmsContentType ON ([cmsContentType].[nodeId] = [cmsDocumentType].[contentTypeNodeId])"); diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs new file mode 100644 index 0000000000..b39c5df29d --- /dev/null +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Caching; +using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Core.Persistence.Repositories +{ + /// + /// Represents a repository for doing CRUD operations for + /// + internal class MediaRepository : PetaPocoRepositoryBase, IMediaRepository + { + public MediaRepository(IUnitOfWork work) : base(work) + { + } + + public MediaRepository(IUnitOfWork work, IRepositoryCacheProvider cache) : base(work, cache) + { + } + + #region Overrides of RepositoryBase + + protected override IMedia PerformGet(int id) + { + throw new NotImplementedException(); + } + + protected override IEnumerable PerformGetAll(params int[] ids) + { + throw new NotImplementedException(); + } + + protected override IEnumerable PerformGetByQuery(IQuery query) + { + throw new NotImplementedException(); + } + + #endregion + + #region Overrides of PetaPocoRepositoryBase + + protected override Sql GetBaseQuery(bool isCount) + { + throw new NotImplementedException(); + } + + protected override Sql GetBaseWhereClause(object id) + { + throw new NotImplementedException(); + } + + protected override IEnumerable GetDeleteClauses() + { + throw new NotImplementedException(); + } + + protected override Guid NodeObjectTypeId + { + get { throw new NotImplementedException(); } + } + + #endregion + + #region Unit of Work Implementation + + protected override void PersistNewItem(IMedia entity) + { + throw new NotImplementedException(); + } + + protected override void PersistUpdatedItem(IMedia entity) + { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs new file mode 100644 index 0000000000..d94d71b774 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Caching; +using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Core.Persistence.Repositories +{ + /// + /// Represents a repository for doing CRUD operations for + /// + internal class MediaTypeRepository : PetaPocoRepositoryBase, IMediaTypeRepository + { + public MediaTypeRepository(IUnitOfWork work) : base(work) + { + } + + public MediaTypeRepository(IUnitOfWork work, IRepositoryCacheProvider cache) : base(work, cache) + { + } + + #region Overrides of RepositoryBase + + protected override IMediaType PerformGet(int id) + { + throw new NotImplementedException(); + } + + protected override IEnumerable PerformGetAll(params int[] ids) + { + throw new NotImplementedException(); + } + + protected override IEnumerable PerformGetByQuery(IQuery query) + { + throw new NotImplementedException(); + } + + #endregion + + #region Overrides of PetaPocoRepositoryBase + + protected override Sql GetBaseQuery(bool isCount) + { + var sql = new Sql(); + sql.Select(isCount ? "COUNT(*)" : "*"); + sql.From("cmsContentType"); + sql.InnerJoin("umbracoNode ON ([cmsContentType].[nodeId] = [umbracoNode].[id])"); + sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + return sql; + } + + protected override Sql GetBaseWhereClause(object id) + { + var sql = new Sql(); + sql.Where("[umbracoNode].[id] = @Id", new { Id = id }); + return sql; + } + + protected override IEnumerable GetDeleteClauses() + { + var list = new List + { + string.Format("DELETE FROM umbracoUser2NodeNotify WHERE nodeId = @Id"), + string.Format("DELETE FROM umbracoUser2NodePermission WHERE nodeId = @Id"), + string.Format("DELETE FROM cmsTagRelationship WHERE nodeId = @Id"), + string.Format("DELETE FROM cmsContentTypeAllowedContentType WHERE Id = @Id"), + string.Format("DELETE FROM cmsPropertyType WHERE contentTypeId = @Id"), + string.Format("DELETE FROM cmsTab WHERE contenttypeNodeId = @Id"), + string.Format("DELETE FROM cmsContentType WHERE NodeId = @Id"), + string.Format("DELETE FROM umbracoNode WHERE id = @Id") + }; + return list; + } + + protected override Guid NodeObjectTypeId + { + get { return new Guid("4EA4382B-2F5A-4C2B-9587-AE9B3CF3602E"); } + } + + #endregion + + #region Unit of Work Implementation + + protected override void PersistNewItem(IMediaType entity) + { + throw new NotImplementedException(); + } + + protected override void PersistUpdatedItem(IMediaType entity) + { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 089b9c51f6..d6eaa9b828 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -108,6 +108,7 @@ + @@ -141,6 +142,8 @@ + +