internal void Run(MeetingComparisonResult comparisonResult, ref Dictionary <GlobalObjectId, List <Attendee> > organizerRumsSent)
 {
     if (!this.SkipItem(ref organizerRumsSent))
     {
         PrimaryConsistencyCheckChain primaryConsistencyCheckChain = ConsistencyCheckFactory.Instance.CreatePrimaryConsistencyCheckChain(this.context, comparisonResult);
         primaryConsistencyCheckChain.PerformChecks(this.context);
         if (primaryConsistencyCheckChain.ShouldTerminate)
         {
             if (RumFactory.Instance.Policy.RepairMode == CalendarRepairType.ValidateOnly && this.context.BaseItem.CalendarItemType == CalendarItemType.RecurringMaster)
             {
                 RecurrenceBlobsConsistentCheck recurrenceBlobsConsistentCheck = new RecurrenceBlobsConsistentCheck(this.context);
                 ConsistencyCheckResult         consistencyCheckResult         = recurrenceBlobsConsistentCheck.Run();
                 if (consistencyCheckResult.ShouldBeReported)
                 {
                     comparisonResult.AddCheckResult(consistencyCheckResult);
                 }
             }
         }
         else
         {
             ConsistencyCheckChain <ConsistencyCheckResult> consistencyCheckChain = ConsistencyCheckFactory.Instance.CreateGeneralConsistencyCheckChain(this.context, comparisonResult, RumFactory.Instance.Policy.RepairMode == CalendarRepairType.ValidateOnly);
             consistencyCheckChain.PerformChecks();
         }
         if (RumFactory.Instance.Policy.RepairMode == CalendarRepairType.RepairAndValidate && comparisonResult.RepairInfo.SendRums(this.context.BaseItem, ref organizerRumsSent))
         {
             this.NumberOfSuccessfulRepairAttempts += 1L;
         }
     }
 }
Exemple #2
0
        internal ConsistencyCheckChain <ConsistencyCheckResult> CreateGeneralConsistencyCheckChain(CalendarValidationContext context, MeetingComparisonResult comparisonResult, bool validationOnly)
        {
            ConsistencyCheckChain <ConsistencyCheckResult> consistencyCheckChain = null;

            if (validationOnly || context.BaseItem.CalendarItemType != CalendarItemType.Occurrence || context.OppositeItem.CalendarItemType != CalendarItemType.Occurrence)
            {
                if (context.BaseItem.IsCancelled)
                {
                    if (context.BaseRole == RoleType.Attendee)
                    {
                        if (validationOnly)
                        {
                            consistencyCheckChain = new ConsistencyCheckChain <ConsistencyCheckResult>(2, comparisonResult);
                            consistencyCheckChain.AddCheck(new AttendeeOnListCheck(context));
                            consistencyCheckChain.AddCheck(new MeetingCancellationCheck(context));
                        }
                        else
                        {
                            consistencyCheckChain = new ConsistencyCheckChain <ConsistencyCheckResult>(0, comparisonResult);
                        }
                    }
                    else
                    {
                        consistencyCheckChain = new ConsistencyCheckChain <ConsistencyCheckResult>(1, comparisonResult);
                        consistencyCheckChain.AddCheck(new MeetingCancellationCheck(context));
                    }
                }
                else
                {
                    consistencyCheckChain = new ConsistencyCheckChain <ConsistencyCheckResult>(comparisonResult);
                    if (context.BaseRole == RoleType.Organizer)
                    {
                        consistencyCheckChain.AddCheck(new MeetingCancellationCheck(context));
                    }
                    if (context.BaseRole == RoleType.Attendee)
                    {
                        consistencyCheckChain.AddCheck(new AttendeeOnListCheck(context));
                        if (context.BaseItem.GetValueOrDefault <bool>(ItemSchema.IsResponseRequested, true))
                        {
                            consistencyCheckChain.AddCheck(new CorrectResponseCheck(context));
                        }
                    }
                    if (validationOnly || context.BaseRole == RoleType.Organizer)
                    {
                        consistencyCheckChain.AddCheck(new TimeZoneConsistentCheck(context));
                        consistencyCheckChain.AddCheck(new MeetingPropertiesMatchCheck(context));
                        if (context.BaseItem.CalendarItemType == CalendarItemType.RecurringMaster)
                        {
                            consistencyCheckChain.AddCheck(new RecurrenceBlobsConsistentCheck(context));
                            consistencyCheckChain.AddCheck(new RecurrencesMatchCheck(context));
                        }
                        else if (context.OppositeItem.CalendarItemType == CalendarItemType.RecurringMaster)
                        {
                            consistencyCheckChain.AddCheck(new RecurrenceBlobsConsistentCheck(context));
                        }
                    }
                }
            }
            if (consistencyCheckChain == null)
            {
                consistencyCheckChain = new ConsistencyCheckChain <ConsistencyCheckResult>(0, comparisonResult);
            }
            return(consistencyCheckChain);
        }