using System.Collections.Generic; using System.Linq; using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services { public class MemberGroupService : IMemberGroupService { private readonly RepositoryFactory _repositoryFactory; private readonly IDatabaseUnitOfWorkProvider _uowProvider; public MemberGroupService(RepositoryFactory repositoryFactory) : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory) { } public MemberGroupService(IDatabaseUnitOfWorkProvider provider) : this(provider, new RepositoryFactory()) { } public MemberGroupService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) { _repositoryFactory = repositoryFactory; _uowProvider = provider; //Proxy events! MemberGroupRepository.SavedMemberGroup += MemberGroupRepository_SavedMemberGroup; MemberGroupRepository.SavingMemberGroup += MemberGroupRepository_SavingMemberGroup; } #region Proxied event handlers void MemberGroupRepository_SavingMemberGroup(IMemberGroupRepository sender, SaveEventArgs e) { if (Saving.IsRaisedEventCancelled(new SaveEventArgs(e.SavedEntities), this)) { e.Cancel = true; } } void MemberGroupRepository_SavedMemberGroup(IMemberGroupRepository sender, SaveEventArgs e) { Saved.RaiseEvent(new SaveEventArgs(e.SavedEntities, false), this); } #endregion public IEnumerable GetAll() { using (var repository = _repositoryFactory.CreateMemberGroupRepository(_uowProvider.GetUnitOfWork())) { return repository.GetAll(); } } public IMemberGroup GetById(int id) { using (var repository = _repositoryFactory.CreateMemberGroupRepository(_uowProvider.GetUnitOfWork())) { return repository.Get(id); } } public IMemberGroup GetByName(string name) { using (var repository = _repositoryFactory.CreateMemberGroupRepository(_uowProvider.GetUnitOfWork())) { return repository.GetByName(name); } } public void Save(IMemberGroup memberGroup, bool raiseEvents = true) { if (raiseEvents) { if (Saving.IsRaisedEventCancelled(new SaveEventArgs(memberGroup), this)) { return; } } var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberGroupRepository(uow)) { repository.AddOrUpdate(memberGroup); uow.Commit(); } if (raiseEvents) Saved.RaiseEvent(new SaveEventArgs(memberGroup, false), this); } public void Delete(IMemberGroup memberGroup) { if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(memberGroup), this)) return; var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberGroupRepository(uow)) { repository.Delete(memberGroup); uow.Commit(); } Deleted.RaiseEvent(new DeleteEventArgs(memberGroup, false), this); } /// /// Occurs before Delete of a member group /// public static event TypedEventHandler> Deleting; /// /// Occurs after Delete of a member group /// public static event TypedEventHandler> Deleted; /// /// Occurs before Save of a member group /// /// /// We need to proxy these events because the events need to take place at the repo level /// public static event TypedEventHandler> Saving; /// /// Occurs after Save of a member group /// /// /// We need to proxy these events because the events need to take place at the repo level /// public static event TypedEventHandler> Saved; } }