From 351edf52dc1faf8a83c0144c344cc5b0643747ae Mon Sep 17 00:00:00 2001 From: "Morten@Thinkpad-X220.ab-nat1.dk" Date: Mon, 8 Oct 2012 16:35:46 -0200 Subject: [PATCH] Implements LanguageRepository U4-961 and LanguageFactory U4-984 --- .../Factories/DictionaryItemFactory.cs | 50 +++++++++++++++- .../Persistence/Factories/LanguageFactory.cs | 11 +++- .../Repositories/DictionaryRepository.cs | 9 ++- .../Repositories/LanguageRepository.cs | 60 +++++++++++++++++-- 4 files changed, 117 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Factories/DictionaryItemFactory.cs b/src/Umbraco.Core/Persistence/Factories/DictionaryItemFactory.cs index b44a5ac514..476e70eb1c 100644 --- a/src/Umbraco.Core/Persistence/Factories/DictionaryItemFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/DictionaryItemFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Core.Models; +using System.Collections.Generic; +using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; namespace Umbraco.Core.Persistence.Factories @@ -9,14 +10,57 @@ namespace Umbraco.Core.Persistence.Factories public DictionaryItem BuildEntity(DictionaryDto dto) { - throw new System.NotImplementedException(); + return new DictionaryItem(dto.Parent, dto.Key) + { + Id = dto.PrimaryKey, + Key = dto.Id, + Translations = BuildTranslations(dto) + }; } public DictionaryDto BuildDto(DictionaryItem entity) { - throw new System.NotImplementedException(); + return new DictionaryDto + { + Id = entity.Key, + Key = entity.ItemKey, + Parent = entity.ParentId, + PrimaryKey = entity.Id, + LanguageTextDtos = BuildLanguageTextDtos(entity) + }; } #endregion + + private List BuildLanguageTextDtos(DictionaryItem entity) + { + var list = new List(); + foreach (var translation in entity.Translations) + { + var text = new LanguageTextDto + { + LanguageId = translation.Language.Id, + UniqueId = translation.Key, + Value = translation.Value + }; + + if (translation.HasIdentity) + text.PrimaryKey = translation.Id; + + list.Add(text); + } + return list; + } + + //NOTE Should probably be a callback in the repo, so the Language obj comes from the LanguageRepository + private IEnumerable BuildTranslations(DictionaryDto dto) + { + var list = new List(); + foreach (var textDto in dto.LanguageTextDtos) + { + list.Add(new DictionaryTranslation(null, textDto.Value, dto.Id) {Id = textDto.PrimaryKey}); + } + return list; + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Factories/LanguageFactory.cs b/src/Umbraco.Core/Persistence/Factories/LanguageFactory.cs index 71a3d6ebc7..a09225724e 100644 --- a/src/Umbraco.Core/Persistence/Factories/LanguageFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/LanguageFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Core.Models; +using System.Globalization; +using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; namespace Umbraco.Core.Persistence.Factories @@ -9,12 +10,16 @@ namespace Umbraco.Core.Persistence.Factories public Language BuildEntity(LanguageDto dto) { - throw new System.NotImplementedException(); + return new Language(dto.IsoCode){CultureName = dto.CultureName, Id = dto.Id}; } public LanguageDto BuildDto(Language entity) { - throw new System.NotImplementedException(); + var dto = new LanguageDto{ CultureName = entity.CultureName, IsoCode = entity.IsoCode}; + if (entity.HasIdentity) + dto.Id = short.Parse(entity.Id.ToString(CultureInfo.InvariantCulture)); + + return dto; } #endregion diff --git a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs index badcda7f97..84c139a4d1 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs @@ -10,12 +10,17 @@ namespace Umbraco.Core.Persistence.Repositories { internal class DictionaryRepository : PetaPocoRepositoryBase, IDictionaryRepository { - public DictionaryRepository(IUnitOfWork work) : base(work) + private ILanguageRepository _languageRepository; + + public DictionaryRepository(IUnitOfWork work, ILanguageRepository languageRepository) : base(work) { + _languageRepository = languageRepository; } - public DictionaryRepository(IUnitOfWork work, IRepositoryCacheProvider cache) : base(work, cache) + public DictionaryRepository(IUnitOfWork work, IRepositoryCacheProvider cache, ILanguageRepository languageRepository) + : base(work, cache) { + _languageRepository = languageRepository; } #region Overrides of RepositoryBase diff --git a/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs b/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs index b32385931a..59f80d6cda 100644 --- a/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; +using System.Linq; using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.Caching; +using Umbraco.Core.Persistence.Factories; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; @@ -21,17 +24,49 @@ namespace Umbraco.Core.Persistence.Repositories protected override Language PerformGet(int id) { - throw new NotImplementedException(); + var sql = GetBaseQuery(false); + sql.Append(GetBaseWhereClause(id)); + + var languageDto = Database.First(sql); + if (languageDto == null) + return null; + + var factory = new LanguageFactory(); + var entity = factory.BuildEntity(languageDto); + return entity; } protected override IEnumerable PerformGetAll(params int[] ids) { - throw new NotImplementedException(); + if (ids.Any()) + { + foreach (var id in ids) + { + yield return Get(id); + } + } + else + { + var dtos = Database.Fetch("WHERE id > 0"); + foreach (var dto in dtos) + { + yield return Get(dto.Id); + } + } } protected override IEnumerable PerformGetByQuery(IQuery query) { - throw new NotImplementedException(); + var sqlClause = GetBaseQuery(false); + var translator = new SqlTranslator(sqlClause, query); + var sql = translator.Translate(); + + var dtos = Database.Fetch(sql); + + foreach (var dto in dtos) + { + yield return Get(dto.Id); + } } #endregion @@ -74,12 +109,27 @@ namespace Umbraco.Core.Persistence.Repositories protected override void PersistNewItem(Language entity) { - throw new NotImplementedException(); + entity.AddingEntity(); + + var factory = new LanguageFactory(); + var dto = factory.BuildDto(entity); + + var id = Convert.ToInt32(Database.Insert(dto)); + entity.Id = id; + + entity.ResetDirtyProperties(); } protected override void PersistUpdatedItem(Language entity) { - throw new NotImplementedException(); + entity.UpdatingEntity(); + + var factory = new LanguageFactory(); + var dto = factory.BuildDto(entity); + + Database.Update(dto); + + entity.ResetDirtyProperties(); } #endregion