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; } } }
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); }