コード例 #1
0
ファイル: AcrHelpers.cs プロジェクト: YHZX2013/exchange_diff
        private static object[] ResolveBasedOnCompare <T>(Predicate <int> comparisonInterpreter, IList <AcrPropertyProfile.ValuesToResolve> valuesToResolve, IList <AcrPropertyProfile.ValuesToResolve> dependencies) where T : IComparable <T>
        {
            AcrPropertyProfile.ValuesToResolve valuesToResolve2 = valuesToResolve[0];
            bool flag;

            if (AcrHelpers.MatchPropertyValues(valuesToResolve2.ClientValue, valuesToResolve2.ServerValue))
            {
                flag = comparisonInterpreter(0);
            }
            else if (!(valuesToResolve2.ServerValue is T))
            {
                flag = comparisonInterpreter(1);
            }
            else if (!(valuesToResolve2.ClientValue is T))
            {
                flag = comparisonInterpreter(-1);
            }
            else
            {
                T t = (T)((object)valuesToResolve2.ClientValue);
                flag = comparisonInterpreter(t.CompareTo((T)((object)valuesToResolve2.ServerValue)));
            }
            return(new object[]
            {
                flag?valuesToResolve2.ClientValue : valuesToResolve2.ServerValue
            });
        }
コード例 #2
0
ファイル: AcrHelpers.cs プロジェクト: YHZX2013/exchange_diff
        internal static object[] ResolveToGreatestDependency <T>(IList <AcrPropertyProfile.ValuesToResolve> valuesToResolve, IList <AcrPropertyProfile.ValuesToResolve> dependencies) where T : IComparable <T>
        {
            AcrPropertyProfile.ValuesToResolve valuesToResolve2 = dependencies[0];
            bool flag;

            if (valuesToResolve2.ServerValue is T)
            {
                if (valuesToResolve2.ClientValue is T)
                {
                    T t = (T)((object)valuesToResolve2.ClientValue);
                    flag = (t.CompareTo((T)((object)valuesToResolve2.ServerValue)) >= 0);
                }
                else
                {
                    flag = false;
                }
            }
            else
            {
                flag = true;
            }
            bool flag2 = flag;

            object[] array = new object[valuesToResolve.Count];
            for (int i = 0; i < valuesToResolve.Count; i++)
            {
                array[i] = (flag2 ? valuesToResolve[i].ClientValue : valuesToResolve[i].ServerValue);
            }
            return(array);
        }
コード例 #3
0
ファイル: AcrProfile.cs プロジェクト: YHZX2013/exchange_diff
 private static AcrPropertyProfile.ValuesToResolve[] FilterValuesToResolve(Dictionary <PropertyDefinition, AcrPropertyProfile.ValuesToResolve> propertyValuesToResolve, PropertyDefinition[] propertiesToInclude)
 {
     AcrPropertyProfile.ValuesToResolve[] array = new AcrPropertyProfile.ValuesToResolve[propertiesToInclude.Length];
     for (int i = 0; i < propertiesToInclude.Length; i++)
     {
         propertyValuesToResolve.TryGetValue(propertiesToInclude[i], out array[i]);
     }
     return(array);
 }
コード例 #4
0
        private ConflictResolutionResult ApplyAcr(PropertyBag acrPropBag, SaveMode saveMode)
        {
            Dictionary <PropertyDefinition, AcrPropertyProfile.ValuesToResolve> valuesToResolve = this.GetValuesToResolve(acrPropBag);
            string valueOrDefault = this.PropertyBag.GetValueOrDefault <string>(InternalSchema.ItemClass, string.Empty);

            if (ObjectClass.IsCalendarItemCalendarItemOccurrenceOrRecurrenceException(valueOrDefault) || ObjectClass.IsMeetingMessage(valueOrDefault))
            {
                LocationIdentifierHelper           locationIdentifierHelper = new LocationIdentifierHelper();
                AcrPropertyProfile.ValuesToResolve valuesToResolve2;
                object serverValue;
                if (valuesToResolve.TryGetValue(InternalSchema.ChangeList, out valuesToResolve2))
                {
                    locationIdentifierHelper.ChangeBuffer = (byte[])valuesToResolve2.ClientValue;
                    serverValue = valuesToResolve2.ServerValue;
                }
                else
                {
                    serverValue = new PropertyError(InternalSchema.ChangeList, PropertyErrorCode.NotFound);
                }
                locationIdentifierHelper.SetLocationIdentifier(53909U, LastChangeAction.AcrPerformed);
                valuesToResolve2 = new AcrPropertyProfile.ValuesToResolve(locationIdentifierHelper.ChangeBuffer, serverValue, null);
                valuesToResolve[InternalSchema.ChangeList] = valuesToResolve2;
            }
            ConflictResolutionResult conflictResolutionResult = this.profile.ResolveConflicts(valuesToResolve);

            if (this.propertiesWrittenAsStream.Count > 0)
            {
                List <PropertyConflict> list = new List <PropertyConflict>(conflictResolutionResult.PropertyConflicts);
                foreach (PropertyDefinition propertyDefinition in this.propertiesWrittenAsStream.Keys)
                {
                    PropertyConflict item = new PropertyConflict(propertyDefinition, null, null, null, null, false);
                    list.Add(item);
                }
                conflictResolutionResult = new ConflictResolutionResult(SaveResult.IrresolvableConflict, list.ToArray());
            }
            if (this.irresolvableChanges || saveMode == SaveMode.FailOnAnyConflict)
            {
                conflictResolutionResult = new ConflictResolutionResult(SaveResult.IrresolvableConflict, conflictResolutionResult.PropertyConflicts);
            }
            if (conflictResolutionResult.SaveStatus != SaveResult.IrresolvableConflict)
            {
                List <PropertyDefinition> list2 = new List <PropertyDefinition>();
                List <PropertyDefinition> list3 = new List <PropertyDefinition>();
                List <object>             list4 = new List <object>();
                if (this.propertyBag == acrPropBag)
                {
                    foreach (PropertyConflict propertyConflict in conflictResolutionResult.PropertyConflicts)
                    {
                        if (propertyConflict.ResolvedValue is PropertyError)
                        {
                            if (PropertyError.IsPropertyNotFound(propertyConflict.ResolvedValue) && (!PropertyError.IsPropertyError(propertyConflict.ClientValue) || !PropertyError.IsPropertyNotFound(propertyConflict.ClientValue)))
                            {
                                list2.Add(propertyConflict.PropertyDefinition);
                            }
                        }
                        else if (propertyConflict.ResolvedValue != propertyConflict.ClientValue)
                        {
                            list3.Add(propertyConflict.PropertyDefinition);
                            list4.Add(propertyConflict.ResolvedValue);
                        }
                    }
                }
                else
                {
                    foreach (PropertyConflict propertyConflict2 in conflictResolutionResult.PropertyConflicts)
                    {
                        if (propertyConflict2.ResolvedValue is PropertyError)
                        {
                            if (PropertyError.IsPropertyNotFound(propertyConflict2.ResolvedValue))
                            {
                                list2.Add(propertyConflict2.PropertyDefinition);
                            }
                        }
                        else if (propertyConflict2.ServerValue != propertyConflict2.ResolvedValue)
                        {
                            list3.Add(propertyConflict2.PropertyDefinition);
                            list4.Add(propertyConflict2.ResolvedValue);
                        }
                    }
                }
                for (int k = 0; k < list2.Count; k++)
                {
                    acrPropBag.Delete(list2[k]);
                }
                for (int l = 0; l < list3.Count; l++)
                {
                    acrPropBag[list3[l]] = list4[l];
                }
            }
            return(conflictResolutionResult);
        }