using System.Collections.Generic; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Scoping; namespace Umbraco.Core.Services.Implement { public class DomainService : ScopeRepositoryService, IDomainService { private readonly IDomainRepository _domainRepository; public DomainService(IScopeProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory, IDomainRepository domainRepository) : base(provider, logger, eventMessagesFactory) { _domainRepository = domainRepository; } public bool Exists(string domainName) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _domainRepository.Exists(domainName); } } public Attempt Delete(IDomain domain) { var evtMsgs = EventMessagesFactory.Get(); using (var scope = ScopeProvider.CreateScope()) { var deleteEventArgs = new DeleteEventArgs(domain, evtMsgs); if (scope.Events.DispatchCancelable(Deleting, this, deleteEventArgs)) { scope.Complete(); return OperationResult.Attempt.Cancel(evtMsgs); } _domainRepository.Delete(domain); scope.Complete(); deleteEventArgs.CanCancel = false; scope.Events.Dispatch(Deleted, this, deleteEventArgs); } return OperationResult.Attempt.Succeed(evtMsgs); } public IDomain GetByName(string name) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _domainRepository.GetByName(name); } } public IDomain GetById(int id) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _domainRepository.Get(id); } } public IEnumerable GetAll(bool includeWildcards) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _domainRepository.GetAll(includeWildcards); } } public IEnumerable GetAssignedDomains(int contentId, bool includeWildcards) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _domainRepository.GetAssignedDomains(contentId, includeWildcards); } } public Attempt Save(IDomain domainEntity) { var evtMsgs = EventMessagesFactory.Get(); using (var scope = ScopeProvider.CreateScope()) { var saveEventArgs = new SaveEventArgs(domainEntity, evtMsgs); if (scope.Events.DispatchCancelable(Saving, this, saveEventArgs)) { scope.Complete(); return OperationResult.Attempt.Cancel(evtMsgs); } _domainRepository.Save(domainEntity); scope.Complete(); saveEventArgs.CanCancel = false; scope.Events.Dispatch(Saved, this, saveEventArgs); } return OperationResult.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 } }