private void EnforceEvaluationRestrictions(IRecurrencePattern pattern)
        {
            RecurrenceEvaluationModeType?evaluationMode        = pattern.EvaluationMode;
            RecurrenceRestrictionType?   evaluationRestriction = pattern.RestrictionType;

            if (evaluationRestriction != RecurrenceRestrictionType.NoRestriction)
            {
                switch (evaluationMode)
                {
                case RecurrenceEvaluationModeType.AdjustAutomatically:
                    switch (pattern.Frequency)
                    {
                    case FrequencyType.Secondly:
                    {
                        switch (evaluationRestriction)
                        {
                        case RecurrenceRestrictionType.Default:
                        case RecurrenceRestrictionType.RestrictSecondly:
                            pattern.Frequency = FrequencyType.Minutely;
                            break;

                        case RecurrenceRestrictionType.RestrictMinutely:
                            pattern.Frequency = FrequencyType.Hourly;
                            break;

                        case RecurrenceRestrictionType.RestrictHourly:
                            pattern.Frequency = FrequencyType.Daily;
                            break;
                        }
                    }
                    break;

                    case FrequencyType.Minutely:
                    {
                        switch (evaluationRestriction)
                        {
                        case RecurrenceRestrictionType.RestrictMinutely:
                            pattern.Frequency = FrequencyType.Hourly;
                            break;

                        case RecurrenceRestrictionType.RestrictHourly:
                            pattern.Frequency = FrequencyType.Daily;
                            break;
                        }
                    }
                    break;

                    case FrequencyType.Hourly:
                    {
                        switch (evaluationRestriction)
                        {
                        case RecurrenceRestrictionType.RestrictHourly:
                            pattern.Frequency = FrequencyType.Daily;
                            break;
                        }
                    }
                    break;
                    }
                    break;

                case RecurrenceEvaluationModeType.ThrowException:
                case RecurrenceEvaluationModeType.Default:
                    switch (pattern.Frequency)
                    {
                    case FrequencyType.Secondly:
                    {
                        switch (evaluationRestriction)
                        {
                        case RecurrenceRestrictionType.Default:
                        case RecurrenceRestrictionType.RestrictSecondly:
                        case RecurrenceRestrictionType.RestrictMinutely:
                        case RecurrenceRestrictionType.RestrictHourly:
                            throw new EvaluationEngineException();
                        }
                    }
                    break;

                    case FrequencyType.Minutely:
                    {
                        switch (evaluationRestriction)
                        {
                        case RecurrenceRestrictionType.RestrictMinutely:
                        case RecurrenceRestrictionType.RestrictHourly:
                            throw new EvaluationEngineException();
                        }
                    }
                    break;

                    case FrequencyType.Hourly:
                    {
                        switch (evaluationRestriction)
                        {
                        case RecurrenceRestrictionType.RestrictHourly:
                            throw new EvaluationEngineException();
                        }
                    }
                    break;
                    }
                    break;
                }
            }
        }
예제 #2
0
        public override void CopyFrom(object obj)
        {
            base.CopyFrom(obj);
            if (obj is RecurrencePattern)
            {
                RecurrencePattern r = (RecurrencePattern)obj;

                Frequency = r.Frequency;
                Until = r.Until;
                Count = r.Count;
                Interval = r.Interval;
                BySecond = new List<int>(r.BySecond);
                ByMinute = new List<int>(r.ByMinute);
                ByHour = new List<int>(r.ByHour);
                ByDay = new List<DaySpecifier>(r.ByDay);
                ByMonthDay = new List<int>(r.ByMonthDay);
                ByYearDay = new List<int>(r.ByYearDay);
                ByWeekNo = new List<int>(r.ByWeekNo);
                ByMonth = new List<int>(r.ByMonth);
                BySetPos = new List<int>(r.BySetPos);
                Wkst = r.Wkst;
                _RestrictionType = r._RestrictionType;
                _EvaluationMode = r._EvaluationMode;                
            }
            base.CopyFrom(obj);
        }
예제 #3
0
        public override void CopyFrom(ICopyable obj)
        {
            base.CopyFrom(obj);
            if (obj is IRecurrencePattern)
            {
                IRecurrencePattern r = (IRecurrencePattern)obj;

                _Frequency = r.Frequency;
                _Until     = r.Until;
                _Count     = r.Count;
                _Interval  = r.Interval;

                if (r.BySecond != null)
                {
                    _BySecond = new List <int>(r.BySecond);
                }
                else
                {
                    _BySecond = null;
                }

                if (r.ByMinute != null)
                {
                    _ByMinute = new List <int>(r.ByMinute);
                }
                else
                {
                    _ByMinute = null;
                }

                if (r.ByHour != null)
                {
                    _ByHour = new List <int>(r.ByHour);
                }
                else
                {
                    _ByHour = null;
                }

                if (r.ByDay != null)
                {
                    _ByDay = new List <IWeekDay>(r.ByDay);
                }
                else
                {
                    _ByDay = null;
                }

                if (r.ByMonthDay != null)
                {
                    _ByMonthDay = new List <int>(r.ByMonthDay);
                }
                else
                {
                    _ByMonthDay = null;
                }

                if (r.ByYearDay != null)
                {
                    _ByYearDay = new List <int>(r.ByYearDay);
                }
                else
                {
                    _ByYearDay = null;
                }

                if (r.ByWeekNo != null)
                {
                    _ByWeekNo = new List <int>(r.ByWeekNo);
                }
                else
                {
                    _ByWeekNo = null;
                }

                if (r.ByMonth != null)
                {
                    _ByMonth = new List <int>(r.ByMonth);
                }
                else
                {
                    _ByMonth = null;
                }

                if (r.BySetPosition != null)
                {
                    _BySetPosition = new List <int>(r.BySetPosition);
                }
                else
                {
                    _BySetPosition = null;
                }

                _FirstDayOfWeek  = r.FirstDayOfWeek;
                _RestrictionType = r.RestrictionType;
                _EvaluationMode  = r.EvaluationMode;
            }
        }