public MonthlyThRecurrencePattern(DaysOfWeek daysOfWeek, RecurrenceOrderType order, int recurrenceInterval, CalendarType calendarType)
 {
     EnumValidator.ThrowIfInvalid <CalendarType>(calendarType);
     this.DaysOfWeek         = daysOfWeek;
     this.Order              = order;
     base.RecurrenceInterval = recurrenceInterval;
     this.calendarType       = calendarType;
 }
예제 #2
0
 public YearlyThRecurrencePattern(DaysOfWeek daysOfWeek, RecurrenceOrderType order, int month, bool isLeapMonth, int recurrenceInterval, CalendarType calendarType)
 {
     EnumValidator.ThrowIfInvalid <CalendarType>(calendarType);
     this.Month              = month;
     this.DaysOfWeek         = daysOfWeek;
     this.Order              = order;
     this.isLeapMonth        = isLeapMonth;
     this.calendarType       = calendarType;
     base.RecurrenceInterval = recurrenceInterval;
 }
예제 #3
0
        private static RecurrencePattern CreateRecurrencePattern(Microsoft.Exchange.Connections.Eas.Model.Response.Calendar.Recurrence easRecurrence)
        {
            try
            {
                EasRecurrenceType type = (EasRecurrenceType)easRecurrence.Type;
                switch (type)
                {
                case EasRecurrenceType.Daily:
                    if (easRecurrence.DayOfWeek != 0)
                    {
                        return(new WeeklyRecurrencePattern((DaysOfWeek)easRecurrence.DayOfWeek));
                    }
                    return(new DailyRecurrencePattern(easRecurrence.Interval));

                case EasRecurrenceType.Weekly:
                    return(new WeeklyRecurrencePattern((DaysOfWeek)easRecurrence.DayOfWeek, easRecurrence.Interval));

                case EasRecurrenceType.Monthly:
                    return(new MonthlyRecurrencePattern(easRecurrence.DayOfMonth, easRecurrence.Interval));

                case EasRecurrenceType.MonthlyTh:
                    {
                        RecurrenceOrderType order = SyncCalendarUtils.RecurrenceOrderTypeFromWeekOfMonth(easRecurrence.WeekOfMonth);
                        return(new MonthlyThRecurrencePattern((DaysOfWeek)easRecurrence.DayOfWeek, order, easRecurrence.Interval));
                    }

                case EasRecurrenceType.Yearly:
                    return(new YearlyRecurrencePattern(easRecurrence.DayOfMonth, easRecurrence.MonthOfYear));

                case EasRecurrenceType.YearlyTh:
                {
                    RecurrenceOrderType order2 = SyncCalendarUtils.RecurrenceOrderTypeFromWeekOfMonth(easRecurrence.WeekOfMonth);
                    return(new YearlyThRecurrencePattern((DaysOfWeek)easRecurrence.DayOfWeek, order2, easRecurrence.MonthOfYear));
                }
                }
                throw new EasFetchFailedPermanentException("Invalid recurrence type: " + type);
            }
            catch (ArgumentOutOfRangeException innerException)
            {
                throw new EasFetchFailedPermanentException("Invalid recurrence", innerException);
            }
            RecurrencePattern result;

            return(result);
        }
        internal static LocalizedString OrderAsString(RecurrenceOrderType order)
        {
            switch (order)
            {
            case RecurrenceOrderType.Last:
                return(ClientStrings.WhenLast);

            case RecurrenceOrderType.First:
                return(ClientStrings.WhenFirst);

            case RecurrenceOrderType.Second:
                return(ClientStrings.WhenSecond);

            case RecurrenceOrderType.Third:
                return(ClientStrings.WhenThird);

            case RecurrenceOrderType.Fourth:
                return(ClientStrings.WhenFourth);
            }
            ExDiagnostics.FailFast("Invalid value for Order", false);
            throw new ArgumentOutOfRangeException("Order");
        }
 public MonthlyThRecurrencePattern(DaysOfWeek daysOfWeek, RecurrenceOrderType order, int recurrenceInterval) : this(daysOfWeek, order, recurrenceInterval, CalendarType.Default)
 {
 }
 public MonthlyThRecurrencePattern(DaysOfWeek daysOfWeek, RecurrenceOrderType order) : this(daysOfWeek, order, 1)
 {
 }
예제 #7
0
        private static RecurrencePattern CreateRecurrencePattern(TypeOfRecurrence recurrenceType, RecurrenceData recurrenceData, Recurrence oldRecurrence)
        {
            ushort recurrenceInterval = 1;

            RecurrenceData.RecurrenceType type = recurrenceData.Type;
            if (recurrenceData.HasInterval())
            {
                recurrenceInterval = recurrenceData.Interval;
            }
            if (recurrenceData.HasWeekOfMonth())
            {
                recurrenceData.WeekOfMonth = ((recurrenceData.WeekOfMonth == 5) ? byte.MaxValue : recurrenceData.WeekOfMonth);
            }
            if (recurrenceType == TypeOfRecurrence.Calendar || (recurrenceType == TypeOfRecurrence.Task && !recurrenceData.Regenerate))
            {
                switch (type)
                {
                case RecurrenceData.RecurrenceType.Daily:
                    if (recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["CalendarType"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfMonth, WeekOfMonth, MonthOfYear, CalendarType, IsLeapMonth is not expected with recurrence type {0}", new object[]
                        {
                            type.ToString()
                        }));
                    }
                    if (recurrenceData.SubProperties["DayOfWeek"] != null)
                    {
                        return(new WeeklyRecurrencePattern((DaysOfWeek)recurrenceData.DayOfWeek, (int)recurrenceInterval));
                    }
                    return(new DailyRecurrencePattern((int)recurrenceInterval));

                case RecurrenceData.RecurrenceType.Weekly:
                {
                    if (recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["CalendarType"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfMonth, WeekOfMonth, MonthOfYear, CalendarType, IsLeapMonth is not expected with recurrence type {0}", new object[]
                            {
                                type.ToString()
                            }));
                    }
                    if (recurrenceData.SubProperties["DayOfWeek"] == null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek is expected with recurrence type {0}", new object[]
                            {
                                type.ToString()
                            }));
                    }
                    WeeklyRecurrencePattern weeklyRecurrencePattern = (oldRecurrence != null) ? (oldRecurrence.Pattern as WeeklyRecurrencePattern) : null;
                    return(new WeeklyRecurrencePattern((DaysOfWeek)recurrenceData.DayOfWeek, (int)recurrenceInterval, (recurrenceData.ProtocolVersion < 141 && weeklyRecurrencePattern != null) ? weeklyRecurrencePattern.FirstDayOfWeek : recurrenceData.FirstDayOfWeek));
                }

                case RecurrenceData.RecurrenceType.Monthly:
                    if (recurrenceData.SubProperties["DayOfWeek"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek, WeekOfMonth, MonthOfYear, IsLeapMonth is not expected with recurrence type {0}", new object[]
                        {
                            type.ToString()
                        }));
                    }
                    if (recurrenceData.SubProperties["DayOfMonth"] == null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfMonth is expected with recurrence type {0}", new object[]
                        {
                            type.ToString()
                        }));
                    }
                    return(new MonthlyRecurrencePattern((int)recurrenceData.DayOfMonth, (int)recurrenceInterval, recurrenceData.CalendarType));

                case RecurrenceData.RecurrenceType.MonthlyTh:
                {
                    if (recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfMonth, MonthOfYear, IsLeapMonth is not expected with recurrence type {0}", new object[]
                            {
                                type.ToString()
                            }));
                    }
                    if (recurrenceData.SubProperties["WeekOfMonth"] == null || recurrenceData.SubProperties["DayOfWeek"] == null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "WeekOfMonth, DayOfWeek is expected with recurrence type {0}", new object[]
                            {
                                type.ToString()
                            }));
                    }
                    RecurrenceOrderType recurrenceOrderType = (recurrenceData.WeekOfMonth == byte.MaxValue) ? RecurrenceOrderType.Last : ((RecurrenceOrderType)recurrenceData.WeekOfMonth);
                    if (!EnumValidator.IsValidValue <RecurrenceOrderType>(recurrenceOrderType))
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "WeekOfMonth value {0} is invalid", new object[]
                            {
                                recurrenceOrderType.ToString()
                            }));
                    }
                    return(new MonthlyThRecurrencePattern((DaysOfWeek)recurrenceData.DayOfWeek, recurrenceOrderType, (int)recurrenceInterval, recurrenceData.CalendarType));
                }

                case RecurrenceData.RecurrenceType.Yearly:
                    if (recurrenceData.SubProperties["DayOfWeek"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek, WeekOfMonth is not expected with recurrence type {0}", new object[]
                        {
                            type.ToString()
                        }));
                    }
                    if (recurrenceData.SubProperties["DayOfMonth"] == null || recurrenceData.SubProperties["MonthOfYear"] == null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfMonth, MonthOfYear is expected with recurrence type {0}", new object[]
                        {
                            type.ToString()
                        }));
                    }
                    return(new YearlyRecurrencePattern((int)recurrenceData.DayOfMonth, (int)recurrenceData.MonthOfYear, recurrenceData.IsLeapMonth, recurrenceData.CalendarType));

                case RecurrenceData.RecurrenceType.YearlyTh:
                {
                    if (recurrenceData.SubProperties["DayOfMonth"] != null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfMonth is not expected with recurrence type {0}", new object[]
                            {
                                type.ToString()
                            }));
                    }
                    if (recurrenceData.SubProperties["WeekOfMonth"] == null || recurrenceData.SubProperties["DayOfWeek"] == null || recurrenceData.SubProperties["MonthOfYear"] == null)
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "WeekOfMonth, DayOfWeek, MonthOfYear is expected with recurrence type {0}", new object[]
                            {
                                type.ToString()
                            }));
                    }
                    RecurrenceOrderType recurrenceOrderType = (recurrenceData.WeekOfMonth == byte.MaxValue) ? RecurrenceOrderType.Last : ((RecurrenceOrderType)recurrenceData.WeekOfMonth);
                    if (!EnumValidator.IsValidValue <RecurrenceOrderType>(recurrenceOrderType))
                    {
                        throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "WeekOfMonth value {0} is invalid", new object[]
                            {
                                recurrenceOrderType.ToString()
                            }));
                    }
                    return(new YearlyThRecurrencePattern((DaysOfWeek)recurrenceData.DayOfWeek, recurrenceOrderType, (int)recurrenceData.MonthOfYear, recurrenceData.IsLeapMonth, recurrenceData.CalendarType));
                }
                }
                throw new ConversionException("Unexpected recurrence type, should have been caught in a higher validation layer");
            }
            switch (type)
            {
            case RecurrenceData.RecurrenceType.Daily:
                if (recurrenceData.SubProperties["DayOfWeek"] != null || recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["CalendarType"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                {
                    throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek, DayOfMonth, WeekOfMonth, MonthOfYear, CalendarType, IsLeapMonth is not expected with recurrence type {0}", new object[]
                    {
                        type.ToString()
                    }));
                }
                return(new DailyRegeneratingPattern((int)recurrenceInterval));

            case RecurrenceData.RecurrenceType.Weekly:
                if (recurrenceData.SubProperties["DayOfWeek"] != null || recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["CalendarType"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                {
                    throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek, DayOfMonth, WeekOfMonth, MonthOfYear, CalendarType, IsLeapMonth is not expected with recurrence type {0}", new object[]
                    {
                        type.ToString()
                    }));
                }
                return(new WeeklyRegeneratingPattern((int)recurrenceInterval));

            case RecurrenceData.RecurrenceType.Monthly:
                if (recurrenceData.SubProperties["DayOfWeek"] != null || recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null || recurrenceData.SubProperties["IsLeapMonth"] != null)
                {
                    throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek, DayOfMonth, WeekOfMonth, MonthOfYear, IsLeapMonth is not expected with recurrence type {0}", new object[]
                    {
                        type.ToString()
                    }));
                }
                return(new MonthlyRegeneratingPattern((int)recurrenceInterval, recurrenceData.CalendarType));

            case RecurrenceData.RecurrenceType.Yearly:
                if (recurrenceData.SubProperties["DayOfWeek"] != null || recurrenceData.SubProperties["DayOfMonth"] != null || recurrenceData.SubProperties["WeekOfMonth"] != null || recurrenceData.SubProperties["MonthOfYear"] != null)
                {
                    throw new ConversionException(string.Format(CultureInfo.InvariantCulture, "DayOfWeek, DayOfMonth, WeekOfMonth, MonthOfYear is not expected with recurrence type {0}", new object[]
                    {
                        type.ToString()
                    }));
                }
                return(new YearlyRegeneratingPattern((int)recurrenceInterval, recurrenceData.CalendarType));
            }
            throw new ConversionException("Unexpected recurrence type '" + type + "', should have been caught in a higher validation layer");
        }
예제 #8
0
 public YearlyThRecurrencePattern(DaysOfWeek daysOfWeek, RecurrenceOrderType order, int month, bool isLeapMonth, CalendarType calendarType) : this(daysOfWeek, order, month, isLeapMonth, 1, calendarType)
 {
 }
예제 #9
0
 public YearlyThRecurrencePattern(DaysOfWeek daysOfWeek, RecurrenceOrderType order, int month) : this(daysOfWeek, order, month, false, CalendarType.Default)
 {
 }