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