using System; using System.Collections.Generic; using System.Linq; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services { public class DomainService : RepositoryService, IDomainService { public DomainService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) : base(provider, repositoryFactory, logger, eventMessagesFactory) { } public bool Exists(string domainName) { var uow = UowProvider.GetUnitOfWork(); using (var repo = RepositoryFactory.CreateDomainRepository(uow)) { return repo.Exists(domainName); } } public Attempt Delete(IDomain domain) { var evtMsgs = EventMessagesFactory.Get(); if (Deleting.IsRaisedEventCancelled( new DeleteEventArgs(domain, evtMsgs), this)) { return OperationStatus.Cancelled(evtMsgs); } var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateDomainRepository(uow)) { repository.Delete(domain); uow.Commit(); } var args = new DeleteEventArgs(domain, false, evtMsgs); Deleted.RaiseEvent(args, this); return OperationStatus.Success(evtMsgs); } public IDomain GetByName(string name) { var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateDomainRepository(uow)) { return repository.GetByName(name); } } public IDomain GetById(int id) { var uow = UowProvider.GetUnitOfWork(); using (var repo = RepositoryFactory.CreateDomainRepository(uow)) { return repo.Get(id); } } public IEnumerable GetAll(bool includeWildcards) { var uow = UowProvider.GetUnitOfWork(); using (var repo = RepositoryFactory.CreateDomainRepository(uow)) { return repo.GetAll(includeWildcards); } } public IEnumerable GetAssignedDomains(int contentId, bool includeWildcards) { var uow = UowProvider.GetUnitOfWork(); using (var repo = RepositoryFactory.CreateDomainRepository(uow)) { return repo.GetAssignedDomains(contentId, includeWildcards); } } public Attempt Save(IDomain domainEntity) { var evtMsgs = EventMessagesFactory.Get(); if (Saving.IsRaisedEventCancelled( new SaveEventArgs(domainEntity, evtMsgs), this)) { return OperationStatus.Cancelled(evtMsgs); } var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateDomainRepository(uow)) { repository.AddOrUpdate(domainEntity); uow.Commit(); } Saved.RaiseEvent(new SaveEventArgs(domainEntity, false, evtMsgs), this); return OperationStatus.Success(evtMsgs); } #region Event Handlers /// /// Occurs before Delete /// public static event TypedEventHandler> Deleting; /// /// Occurs after Delete /// public static event TypedEventHandler> Deleted; /// /// Occurs before Save /// public static event TypedEventHandler> Saving; /// /// Occurs after Save /// public static event TypedEventHandler> Saved; #endregion } }