internal ConflictResolutionResult ResolveConflicts(Dictionary <PropertyDefinition, AcrPropertyProfile.ValuesToResolve> propertyValuesToResolve) { Dictionary <PropertyDefinition, PropertyConflict> dictionary = new Dictionary <PropertyDefinition, PropertyConflict>(propertyValuesToResolve.Count); foreach (KeyValuePair <PropertyDefinition, AcrPropertyProfile.ValuesToResolve> keyValuePair in propertyValuesToResolve) { AcrPropertyProfile acrPropertyProfile = this[keyValuePair.Key]; if (!dictionary.ContainsKey(keyValuePair.Key)) { if (acrPropertyProfile != null) { AcrProfile.ResolveConflicts(dictionary, acrPropertyProfile.Resolver, propertyValuesToResolve, acrPropertyProfile.PropertiesToResolve); } else { AcrProfile.ResolveConflicts(dictionary, this.genericResolver, propertyValuesToResolve, new PropertyDefinition[] { keyValuePair.Key }); } } } SaveResult saveResult = SaveResult.Success; foreach (PropertyConflict propertyConflict in dictionary.Values) { if (!propertyConflict.ConflictResolvable) { saveResult = SaveResult.IrresolvableConflict; break; } saveResult = SaveResult.SuccessWithConflictResolution; } return(new ConflictResolutionResult(saveResult, Util.CollectionToArray <PropertyConflict>(dictionary.Values))); }
internal static IEnumerable <PropValue> ResolveProperties(MemoryPropertyBag client, MemoryPropertyBag server, MemoryPropertyBag original, AcrProfile profile) { ConflictResolutionResult resolutionResult = profile.ResolveConflicts(MasterCategoryList.GetPropValuesToResolve(client, server, original, profile)); if (resolutionResult.SaveStatus == SaveResult.IrresolvableConflict) { throw new Exception(); } foreach (PropertyConflict conflict in resolutionResult.PropertyConflicts) { yield return(new PropValue(InternalSchema.ToStorePropertyDefinition(conflict.PropertyDefinition), conflict.ResolvedValue)); } yield break; }