A RuleBasedCalendar uses a set of CalendarRule instances to derive the dates on which holidays will occur either in the past or the future.
Inheritance: Calendar
        /// <summary>
        /// Parses the XML data file indicated by the URI to extract default sets
        /// of calendars.
        /// </summary>
        /// <param name="uri">The URI of the source XML document.</param>
        private static void ParseCalendars(string uri)
        {
            RuleBasedCalendar calendar	= null;
            XmlReader		reader		= XmlReader.Create (uri);

            while (reader.Read ()) {
                switch (reader.NodeType) {
                case XmlNodeType.Element:
                    {
                        if (reader.LocalName.Equals ("calendar")) {
                            string		name	= reader ["name"];
                            Weekend		weekend	= Weekend.ForName (reader ["weekend"]);

                            if ((name != null) && (weekend != null))
                                calendar = new RuleBasedCalendar (name, weekend);
                            else
                                calendar = null;
                        }
                        else if (reader.LocalName.Equals ("fixed")) {
                            string		name	 = reader ["name"];
                            int			from	 = Int32.Parse (reader ["from"]);
                            int			until	 = Int32.Parse (reader ["until"]);
                            int			month	 = ConvertMonth (reader ["month"]);
                            int			date	 = Int32.Parse (reader ["date"]);
                            DateRoll	dateRoll = DateRoll.ForName (reader ["roll"]);

                            if ((calendar != null) && (month != 0) && (dateRoll != null))
                                calendar.AddRule (new CalendarRule.Fixed (name, from, until, month, date, dateRoll));
                        }
                        else if (reader.LocalName.Equals ("offset")) {
                            string		name	 = reader ["name"];
                            int			from	 = Int32.Parse (reader ["from"]);
                            int			until	 = Int32.Parse (reader ["until"]);
                            int			when	 = ConvertWhen (reader ["when"]);
                            int			weekday	 = ConvertWeekday (reader ["weekday"]);
                            int			month	 = ConvertMonth (reader ["month"]);

                            if ((calendar != null) && (month != 0) && (when != 0) && (weekday != 0))
                                calendar.AddRule (new CalendarRule.Offset (name, from, until, when, weekday, month));
                        }
                        else if (reader.LocalName.Equals ("easter")) {
                            string		name	 = reader ["name"];
                            int			from	 = Int32.Parse (reader ["from"]);
                            int			until	 = Int32.Parse (reader ["until"]);
                            int			offset	 = Int32.Parse (reader ["offset"]);

                            if (calendar != null)
                                calendar.AddRule (new CalendarRule.Easter (name, from, until, offset));
                        }
                        break;
                    }
                }
            }
            reader.Close ();
        }
Exemple #2
0
        /// <summary>
        /// Parses the XML data file indicated by the URI to extract default sets
        /// of calendars.
        /// </summary>
        /// <param name="uri">The URI of the source XML document.</param>
        private static void ParseCalendars(string uri)
        {
            RuleBasedCalendar calendar = null;
            XmlReader         reader   = XmlReader.Create(uri);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:
                {
                    if (reader.LocalName.Equals("calendar"))
                    {
                        string  name    = reader ["name"];
                        Weekend weekend = Weekend.ForName(reader ["weekend"]);

                        if ((name != null) && (weekend != null))
                        {
                            calendar = new RuleBasedCalendar(name, weekend);
                        }
                        else
                        {
                            calendar = null;
                        }
                    }
                    else if (reader.LocalName.Equals("fixed"))
                    {
                        string   name     = reader ["name"];
                        int      from     = Int32.Parse(reader ["from"]);
                        int      until    = Int32.Parse(reader ["until"]);
                        int      month    = ConvertMonth(reader ["month"]);
                        int      date     = Int32.Parse(reader ["date"]);
                        DateRoll dateRoll = DateRoll.ForName(reader ["roll"]);

                        if ((calendar != null) && (month != 0) && (dateRoll != null))
                        {
                            calendar.AddRule(new CalendarRule.Fixed(name, from, until, month, date, dateRoll));
                        }
                    }
                    else if (reader.LocalName.Equals("offset"))
                    {
                        string name    = reader ["name"];
                        int    from    = Int32.Parse(reader ["from"]);
                        int    until   = Int32.Parse(reader ["until"]);
                        int    when    = ConvertWhen(reader ["when"]);
                        int    weekday = ConvertWeekday(reader ["weekday"]);
                        int    month   = ConvertMonth(reader ["month"]);

                        if ((calendar != null) && (month != 0) && (when != 0) && (weekday != 0))
                        {
                            calendar.AddRule(new CalendarRule.Offset(name, from, until, when, weekday, month));
                        }
                    }
                    else if (reader.LocalName.Equals("easter"))
                    {
                        string name   = reader ["name"];
                        int    from   = Int32.Parse(reader ["from"]);
                        int    until  = Int32.Parse(reader ["until"]);
                        int    offset = Int32.Parse(reader ["offset"]);

                        if (calendar != null)
                        {
                            calendar.AddRule(new CalendarRule.Easter(name, from, until, offset));
                        }
                    }
                    break;
                }
                }
            }
            reader.Close();
        }