Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        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;
        }