Fixes up data type service with correct even emitting and no nested uow

This commit is contained in:
Shannon
2017-01-23 22:55:16 +11:00
parent 479d859a75
commit bd8af539b4

View File

@@ -46,15 +46,16 @@ namespace Umbraco.Core.Services
if (SavingContainer.IsRaisedEventCancelled(
new SaveEventArgs<EntityContainer>(container, evtMsgs),
this))
this, uow.EventManager))
{
uow.Commit();
return Attempt.Fail(new OperationStatus<EntityContainer, OperationStatusType>(container, OperationStatusType.FailedCancelledByEvent, evtMsgs));
}
repo.AddOrUpdate(container);
uow.Commit();
SavedContainer.RaiseEvent(new SaveEventArgs<EntityContainer>(container, evtMsgs), this);
SavedContainer.RaiseEvent(new SaveEventArgs<EntityContainer>(container, evtMsgs), this, uow.EventManager);
//TODO: Audit trail ?
return Attempt.Succeed(new OperationStatus<EntityContainer, OperationStatusType>(container, OperationStatusType.Success, evtMsgs));
@@ -68,7 +69,7 @@ namespace Umbraco.Core.Services
public EntityContainer GetContainer(int containerId)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid))
{
var container = repo.Get(containerId);
@@ -78,7 +79,7 @@ namespace Umbraco.Core.Services
public EntityContainer GetContainer(Guid containerId)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid))
{
var container = repo.Get(containerId);
@@ -88,7 +89,7 @@ namespace Umbraco.Core.Services
public IEnumerable<EntityContainer> GetContainers(string name, int level)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid))
{
return repo.Get(name, level);
@@ -112,7 +113,7 @@ namespace Umbraco.Core.Services
public IEnumerable<EntityContainer> GetContainers(int[] containerIds)
{
var uow = UowProvider.GetUnitOfWork();
var uow = UowProvider.GetReadOnlyUnitOfWork();
using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid))
{
return repo.GetAll(containerIds);
@@ -137,7 +138,7 @@ namespace Umbraco.Core.Services
if (SavingContainer.IsRaisedEventCancelled(
new SaveEventArgs<EntityContainer>(container, evtMsgs),
this))
this, UowProvider))
{
return OperationStatus.Cancelled(evtMsgs);
}
@@ -147,10 +148,9 @@ namespace Umbraco.Core.Services
{
repo.AddOrUpdate(container);
uow.Commit();
SavedContainer.RaiseEvent(new SaveEventArgs<EntityContainer>(container, evtMsgs), this, uow.EventManager);
}
SavedContainer.RaiseEvent(new SaveEventArgs<EntityContainer>(container, evtMsgs), this);
//TODO: Audit trail ?
return OperationStatus.Success(evtMsgs);
@@ -167,15 +167,16 @@ namespace Umbraco.Core.Services
if (DeletingContainer.IsRaisedEventCancelled(
new DeleteEventArgs<EntityContainer>(container, evtMsgs),
this))
this, uow.EventManager))
{
uow.Commit();
return Attempt.Fail(new OperationStatus(OperationStatusType.FailedCancelledByEvent, evtMsgs));
}
repo.Delete(container);
uow.Commit();
DeletedContainer.RaiseEvent(new DeleteEventArgs<EntityContainer>(container, evtMsgs), this);
DeletedContainer.RaiseEvent(new DeleteEventArgs<EntityContainer>(container, evtMsgs), this, uow.EventManager);
return OperationStatus.Success(evtMsgs);
//TODO: Audit trail ?
@@ -191,7 +192,7 @@ namespace Umbraco.Core.Services
/// <returns><see cref="IDataTypeDefinition"/></returns>
public IDataTypeDefinition GetDataTypeDefinitionByName(string name)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
return repository.GetByQuery(new Query<IDataTypeDefinition>().Where(x => x.Name == name)).FirstOrDefault();
}
@@ -204,7 +205,7 @@ namespace Umbraco.Core.Services
/// <returns><see cref="IDataTypeDefinition"/></returns>
public IDataTypeDefinition GetDataTypeDefinitionById(int id)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
return repository.Get(id);
}
@@ -217,7 +218,7 @@ namespace Umbraco.Core.Services
/// <returns><see cref="IDataTypeDefinition"/></returns>
public IDataTypeDefinition GetDataTypeDefinitionById(Guid id)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
var query = Query<IDataTypeDefinition>.Builder.Where(x => x.Key == id);
var definitions = repository.GetByQuery(query);
@@ -245,7 +246,7 @@ namespace Umbraco.Core.Services
/// <returns>Collection of <see cref="IDataTypeDefinition"/> objects with a matching contorl id</returns>
public IEnumerable<IDataTypeDefinition> GetDataTypeDefinitionByPropertyEditorAlias(string propertyEditorAlias)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
var query = Query<IDataTypeDefinition>.Builder.Where(x => x.PropertyEditorAlias == propertyEditorAlias);
var definitions = repository.GetByQuery(query);
@@ -261,7 +262,7 @@ namespace Umbraco.Core.Services
/// <returns>An enumerable list of <see cref="IDataTypeDefinition"/> objects</returns>
public IEnumerable<IDataTypeDefinition> GetAllDataTypeDefinitions(params int[] ids)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
return repository.GetAll(ids);
}
@@ -274,7 +275,7 @@ namespace Umbraco.Core.Services
/// <returns>An enumerable list of string values</returns>
public IEnumerable<string> GetPreValuesByDataTypeId(int id)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
var collection = repository.GetPreValuesCollectionByDataTypeId(id);
//now convert the collection to a string list
@@ -292,7 +293,7 @@ namespace Umbraco.Core.Services
/// <returns></returns>
public PreValueCollection GetPreValuesCollectionByDataTypeId(int id)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
return repository.GetPreValuesCollectionByDataTypeId(id);
}
@@ -305,7 +306,7 @@ namespace Umbraco.Core.Services
/// <returns>PreValue as a string</returns>
public string GetPreValueAsString(int id)
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork()))
{
return repository.GetPreValueAsString(id);
}
@@ -317,7 +318,7 @@ namespace Umbraco.Core.Services
if (Moving.IsRaisedEventCancelled(
new MoveEventArgs<IDataTypeDefinition>(evtMsgs, new MoveEventInfo<IDataTypeDefinition>(toMove, toMove.Path, parentId)),
this))
this, UowProvider))
{
return Attempt.Fail(
new OperationStatus<MoveOperationStatusType>(
@@ -346,10 +347,9 @@ namespace Umbraco.Core.Services
new OperationStatus<MoveOperationStatusType>(ex.Operation, evtMsgs));
}
uow.Commit();
Moved.RaiseEvent(new MoveEventArgs<IDataTypeDefinition>(false, evtMsgs, moveInfo.ToArray()), this, uow.EventManager);
}
Moved.RaiseEvent(new MoveEventArgs<IDataTypeDefinition>(false, evtMsgs, moveInfo.ToArray()), this);
return Attempt.Succeed(
new OperationStatus<MoveOperationStatusType>(MoveOperationStatusType.Success, evtMsgs));
}
@@ -362,17 +362,18 @@ namespace Umbraco.Core.Services
public void Save(IDataTypeDefinition dataTypeDefinition, int userId = 0)
{
var uow = UowProvider.GetUnitOfWork();
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition), this, uow.EventManager))
return;
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition), this, uow.EventManager))
{
uow.Commit();
return;
}
dataTypeDefinition.CreatorId = userId;
repository.AddOrUpdate(dataTypeDefinition);
uow.Commit();
Saved.RaiseEvent(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition, false), this);
Saved.RaiseEvent(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition, false), this, uow.EventManager);
}
Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id);
@@ -396,29 +397,29 @@ namespace Umbraco.Core.Services
/// <param name="raiseEvents">Boolean indicating whether or not to raise events</param>
public void Save(IEnumerable<IDataTypeDefinition> dataTypeDefinitions, int userId, bool raiseEvents)
{
using (var uow = UowProvider.GetUnitOfWork())
var uow = UowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
if (raiseEvents)
{
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinitions), this, uow.EventManager))
return;
}
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
foreach (var dataTypeDefinition in dataTypeDefinitions)
{
dataTypeDefinition.CreatorId = userId;
repository.AddOrUpdate(dataTypeDefinition);
uow.Commit();
return;
}
uow.Commit();
if (raiseEvents)
Saved.RaiseEvent(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinitions, false), this);
}
foreach (var dataTypeDefinition in dataTypeDefinitions)
{
dataTypeDefinition.CreatorId = userId;
repository.AddOrUpdate(dataTypeDefinition);
}
uow.Commit();
Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, -1);
}
if (raiseEvents)
Saved.RaiseEvent(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinitions, false), this, uow.EventManager);
}
Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, -1);
}
/// <summary>
@@ -433,25 +434,20 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.GetUnitOfWork())
{
using (var transaction = uow.Database.GetTransaction())
{
var sortOrderObj =
var sortOrderObj =
uow.Database.ExecuteScalar<object>(
"SELECT max(sortorder) FROM cmsDataTypePreValues WHERE datatypeNodeId = @DataTypeId", new { DataTypeId = dataTypeId });
int sortOrder;
if (sortOrderObj == null || int.TryParse(sortOrderObj.ToString(), out sortOrder) == false)
{
sortOrder = 1;
}
int sortOrder;
if (sortOrderObj == null || int.TryParse(sortOrderObj.ToString(), out sortOrder) == false)
{
sortOrder = 1;
}
foreach (var value in values)
{
var dto = new DataTypePreValueDto { DataTypeNodeId = dataTypeId, Value = value, SortOrder = sortOrder };
uow.Database.Insert(dto);
sortOrder++;
}
transaction.Complete();
foreach (var value in values)
{
var dto = new DataTypePreValueDto { DataTypeNodeId = dataTypeId, Value = value, SortOrder = sortOrder };
uow.Database.Insert(dto);
sortOrder++;
}
}
}
@@ -504,32 +500,30 @@ namespace Umbraco.Core.Services
/// <param name="userId"></param>
public void SaveDataTypeAndPreValues(IDataTypeDefinition dataTypeDefinition, IDictionary<string, PreValue> values, int userId = 0)
{
using (var uow = UowProvider.GetUnitOfWork())
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition), this, UowProvider))
return;
// if preValues contain the data type, override the data type definition accordingly
if (values != null && values.ContainsKey(Constants.PropertyEditors.PreValueKeys.DataValueType))
dataTypeDefinition.DatabaseType = PropertyValueEditor.GetDatabaseType(values[Constants.PropertyEditors.PreValueKeys.DataValueType].Value);
var uow = UowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition), this, uow.EventManager))
return;
dataTypeDefinition.CreatorId = userId;
// if preValues contain the data type, override the data type definition accordingly
if (values != null && values.ContainsKey(Constants.PropertyEditors.PreValueKeys.DataValueType))
dataTypeDefinition.DatabaseType = PropertyValueEditor.GetDatabaseType(values[Constants.PropertyEditors.PreValueKeys.DataValueType].Value);
//add/update the dtd
repository.AddOrUpdate(dataTypeDefinition);
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
dataTypeDefinition.CreatorId = userId;
//add/update the prevalues
repository.AddOrUpdatePreValues(dataTypeDefinition, values);
//add/update the dtd
repository.AddOrUpdate(dataTypeDefinition);
uow.Commit();
//add/update the prevalues
repository.AddOrUpdatePreValues(dataTypeDefinition, values);
uow.Commit();
Saved.RaiseEvent(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition, false), this);
}
Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id);
Saved.RaiseEvent(new SaveEventArgs<IDataTypeDefinition>(dataTypeDefinition, false), this, uow.EventManager);
}
Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id);
}
/// <summary>
@@ -543,22 +537,20 @@ namespace Umbraco.Core.Services
/// <param name="userId">Optional Id of the user issueing the deletion</param>
public void Delete(IDataTypeDefinition dataTypeDefinition, int userId = 0)
{
using (var uow = UowProvider.GetUnitOfWork())
if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IDataTypeDefinition>(dataTypeDefinition), this, UowProvider))
return;
var uow = UowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IDataTypeDefinition>(dataTypeDefinition), this, uow.EventManager))
return;
repository.Delete(dataTypeDefinition);
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow))
{
repository.Delete(dataTypeDefinition);
uow.Commit();
uow.Commit();
Deleted.RaiseEvent(new DeleteEventArgs<IDataTypeDefinition>(dataTypeDefinition, false), this);
}
Audit(AuditType.Delete, string.Format("Delete DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id);
Deleted.RaiseEvent(new DeleteEventArgs<IDataTypeDefinition>(dataTypeDefinition, false), this, uow.EventManager);
}
Audit(AuditType.Delete, string.Format("Delete DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id);
}
/// <summary>