コード例 #1
0
            internal Calendar GetCalendar()
            {
                var rules = new CalendarRules();

                foreach (var r in Rules)
                {
                    if (!DayRuleParser.TryParseInternal(r.Pattern,
                                                        out var description,
                                                        out var yearMatchers,
                                                        out var monthMatchers,
                                                        out var dayOfMonthMatchers,
                                                        out var dayOfWeekMatchers,
                                                        out var workingPeriods))
                    {
                        throw new SerializationException($"Day pattern '{r.Pattern}' is invalid");
                    }
                    if (!string.IsNullOrEmpty(description))
                    {
                        throw new SerializationException(
                                  $"Day pattern '{r.Pattern}' is invalid in this context: you cannot provide a day description");
                    }
                    if (workingPeriods is not null)
                    {
                        throw new SerializationException(
                                  $"Day pattern '{r.Pattern}' is invalid in this context: you cannot provide a working period list");
                    }
                    rules.Add(Enum.Parse <DayRulePolicy>(r.Policy), r.Description, yearMatchers, monthMatchers,
                              dayOfMonthMatchers, dayOfWeekMatchers,
                              r.WorkingPeriods?.Select(_ => new TimePeriod(Time.Parse(_.Begin), Time.Parse(_.End))));
                }

                return(new Calendar(Name, rules, Description, LongDescription));
            }
コード例 #2
0
 public Calendar(string name, CalendarRules calendarRules, string description = null,
                 string longDescription = null)
 {
     Name            = name ?? throw new ArgumentNullException(nameof(name));
     Description     = description;
     LongDescription = longDescription;
     CalendarRules   = calendarRules ?? throw new ArgumentNullException(nameof(calendarRules));
 }
コード例 #3
0
        public bool TryGetDayInfo(DateTime date, out DayInfo dayInfo)
        {
            dayInfo = null;
            if (CalendarRules == null || !CalendarRules.Any())
            {
                return(false);                                               // no rules => nothing to do
            }
            foreach (var rule in CalendarRules)
            {
                if (!rule.Rule.TryGetDayInfo(date, out var curInfo))
                {
                    continue;      // something to evaluate
                }
                dayInfo = curInfo; // register the most recent found
                if (rule.Policy == DayRulePolicy.Accept)
                {
                    break;
                }
            }

            return(dayInfo != null);
        }
コード例 #4
0
 /// <summary>
 ///     Add the rules from the calendar to the collection of rules
 /// </summary>
 /// <param name="calendar"></param>
 public void AddRules(Calendar calendar) => CalendarRules.Add(calendar);
コード例 #5
0
 /// <summary>
 ///     Add rules to the collection of rules
 /// </summary>
 /// <param name="rules"></param>
 // ReSharper disable once UnusedMember.Global
 public void AddRules(CalendarRules rules) => CalendarRules.AddRange(rules);