From 083320002b171c4be12f7a3550416294dba46050 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Mon, 18 Mar 2013 20:18:12 -0100 Subject: [PATCH] Continueing with the implementation of the EntityRepository --- .../Repositories/EntityRepository.cs | 28 ++++ src/Umbraco.Core/Services/EntityService.cs | 122 +++++++++++++++++- 2 files changed, 145 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs b/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs index 62d2978004..d63d48a43d 100644 --- a/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.Factories; @@ -18,10 +19,18 @@ namespace Umbraco.Core.Persistence.Repositories internal class EntityRepository : DisposableObject, IEntityRepository { private readonly IDatabaseUnitOfWork _work; + private readonly IDictionary> _propertyHandler; public EntityRepository(IDatabaseUnitOfWork work) { _work = work; + _propertyHandler = new Dictionary> + { + { + new Guid(Constants.ObjectTypes.Document), + UpdateIsPublished + } + }; } /// @@ -53,6 +62,10 @@ namespace Umbraco.Core.Persistence.Repositories var entity = factory.BuildEntity(nodeDto); //TODO Update HasChildren and IsPublished + if (_propertyHandler.ContainsKey(entity.NodeObjectTypeId)) + { + return _propertyHandler[entity.NodeObjectTypeId](entity); + } return entity; } @@ -131,6 +144,21 @@ namespace Umbraco.Core.Persistence.Repositories #endregion + private void UpdateHasChildren(IUmbracoEntity entity) + {} + + private IUmbracoEntity UpdateIsPublished(IUmbracoEntity entity) + { + var umbracoEntity = entity as UmbracoEntity; + if (umbracoEntity != null) + { + umbracoEntity.IsPublished = true; + return umbracoEntity; + } + + return entity; + } + #region Sql Statements protected virtual Sql GetBaseQuery() diff --git a/src/Umbraco.Core/Services/EntityService.cs b/src/Umbraco.Core/Services/EntityService.cs index 42f7bcb189..5d11898d97 100644 --- a/src/Umbraco.Core/Services/EntityService.cs +++ b/src/Umbraco.Core/Services/EntityService.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Linq; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services @@ -41,6 +43,14 @@ namespace Umbraco.Core.Services /// An public virtual IUmbracoEntity Get(int id, bool loadBaseType = true) { + if (loadBaseType) + { + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + return repository.Get(id); + } + } + throw new NotImplementedException(); } @@ -56,54 +66,156 @@ namespace Umbraco.Core.Services /// An public virtual IUmbracoEntity Get(int id, bool loadBaseType = true) where T : IUmbracoEntity { + if (loadBaseType) + { + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + return repository.Get(id); + } + } + throw new NotImplementedException(); } + /// + /// + /// + /// + /// public virtual IUmbracoEntity GetParent(int id) { - throw new NotImplementedException(); + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + var entity = repository.Get(id); + if (entity.ParentId == -1 || entity.ParentId == -20 || entity.ParentId == -21) + return null; + + return repository.Get(entity.ParentId); + } } + /// + /// + /// + /// + /// public virtual IEnumerable GetChildren(int id) { - throw new NotImplementedException(); + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.ParentId == id); + var contents = repository.GetByQuery(query); + + return contents; + } } + /// + /// + /// + /// + /// public virtual IEnumerable GetDescendents(int id) { - throw new NotImplementedException(); + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + var entity = repository.Get(id); + var query = Query.Builder.Where(x => x.Path.StartsWith(entity.Path) && x.Id != id); + var entities = repository.GetByQuery(query); + + return entities; + } } + /// + /// + /// + /// + /// + public virtual IEnumerable GetRootEntities(UmbracoObjectTypes objectType) + { + var objectTypeId = objectType.GetGuid(); + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.ParentId == -1); + var entities = repository.GetByQuery(query, objectTypeId); + + return entities; + } + } + + /// + /// + /// + /// + /// public virtual IEnumerable GetAll() where T : IUmbracoEntity { throw new NotImplementedException(); } + /// + /// + /// + /// + /// public virtual IEnumerable GetAll(UmbracoObjectTypes objectType) { - throw new NotImplementedException(); + var objectTypeId = objectType.GetGuid(); + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetAll(objectTypeId); + } } + /// + /// + /// + /// + /// public virtual IEnumerable GetAll(Guid objectTypeId) { - throw new NotImplementedException(); + using (var repository = _repositoryFactory.CreateEntityRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetAll(objectTypeId); + } } + /// + /// + /// + /// + /// public virtual UmbracoObjectTypes GetObjectType(int id) { throw new NotImplementedException(); } + /// + /// + /// + /// + /// public virtual UmbracoObjectTypes GetObjectType(IUmbracoEntity entity) { throw new NotImplementedException(); } + /// + /// + /// + /// + /// public virtual Type GetModelType(int id) { throw new NotImplementedException(); } + /// + /// + /// + /// + /// public virtual Type GetModelType(UmbracoObjectTypes objectType) { throw new NotImplementedException();