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.Repositories; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services { public class DomainService : ScopeRepositoryService, IDomainService { public DomainService(IScopeUnitOfWorkProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory) : base(provider, logger, eventMessagesFactory) { } public bool Exists(string domainName) { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repo = uow.CreateRepository(); return repo.Exists(domainName); } } public Attempt Delete(IDomain domain) { var evtMsgs = EventMessagesFactory.Get(); using (var uow = UowProvider.CreateUnitOfWork()) { var deleteEventArgs = new DeleteEventArgs(domain, evtMsgs); if (uow.Events.DispatchCancelable(Deleting, this, deleteEventArgs)) { uow.Complete(); return OperationStatus.Attempt.Cancel(evtMsgs); } var repository = uow.CreateRepository(); repository.Delete(domain); uow.Complete(); deleteEventArgs.CanCancel = false; uow.Events.Dispatch(Deleted, this, deleteEventArgs); } return OperationStatus.Attempt.Succeed(evtMsgs); } public IDomain GetByName(string name) { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); return repository.GetByName(name); } } public IDomain GetById(int id) { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repo = uow.CreateRepository(); return repo.Get(id); } } public IEnumerable GetAll(bool includeWildcards) { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repo = uow.CreateRepository(); return repo.GetAll(includeWildcards); } } public IEnumerable GetAssignedDomains(int contentId, bool includeWildcards) { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repo = uow.CreateRepository(); return repo.GetAssignedDomains(contentId, includeWildcards); } } public Attempt Save(IDomain domainEntity) { var evtMsgs = EventMessagesFactory.Get(); using (var uow = UowProvider.CreateUnitOfWork()) { var saveEventArgs = new SaveEventArgs(domainEntity, evtMsgs); if (uow.Events.DispatchCancelable(Saving, this, saveEventArgs)) { uow.Complete(); return OperationStatus.Attempt.Cancel(evtMsgs); } var repository = uow.CreateRepository(); repository.AddOrUpdate(domainEntity); uow.Complete(); saveEventArgs.CanCancel = false; uow.Events.Dispatch(Saved, this, saveEventArgs); } return OperationStatus.Attempt.Succeed(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 } }