Implements LanguageRepository U4-961 and LanguageFactory U4-984

This commit is contained in:
Morten@Thinkpad-X220.ab-nat1.dk
2012-10-08 16:35:46 -02:00
parent 69f53b7dc5
commit 351edf52dc
4 changed files with 117 additions and 13 deletions

View File

@@ -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<LanguageTextDto> BuildLanguageTextDtos(DictionaryItem entity)
{
var list = new List<LanguageTextDto>();
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<DictionaryTranslation> BuildTranslations(DictionaryDto dto)
{
var list = new List<DictionaryTranslation>();
foreach (var textDto in dto.LanguageTextDtos)
{
list.Add(new DictionaryTranslation(null, textDto.Value, dto.Id) {Id = textDto.PrimaryKey});
}
return list;
}
}
}

View File

@@ -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

View File

@@ -10,12 +10,17 @@ namespace Umbraco.Core.Persistence.Repositories
{
internal class DictionaryRepository : PetaPocoRepositoryBase<int, DictionaryItem>, 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<int,DictionaryItem>

View File

@@ -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<LanguageDto>(sql);
if (languageDto == null)
return null;
var factory = new LanguageFactory();
var entity = factory.BuildEntity(languageDto);
return entity;
}
protected override IEnumerable<Language> PerformGetAll(params int[] ids)
{
throw new NotImplementedException();
if (ids.Any())
{
foreach (var id in ids)
{
yield return Get(id);
}
}
else
{
var dtos = Database.Fetch<LanguageDto>("WHERE id > 0");
foreach (var dto in dtos)
{
yield return Get(dto.Id);
}
}
}
protected override IEnumerable<Language> PerformGetByQuery(IQuery<Language> query)
{
throw new NotImplementedException();
var sqlClause = GetBaseQuery(false);
var translator = new SqlTranslator<Language>(sqlClause, query);
var sql = translator.Translate();
var dtos = Database.Fetch<LanguageDto>(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