/// <summary> /// Tries to read element from XML. /// </summary> /// <param name="reader">The reader.</param> /// <returns>True if element was read.</returns> internal override bool TryReadElementFromXml(EwsServiceXmlReader reader) { switch (reader.LocalName) { case XmlElementNames.Periods: do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Period)) { TimeZonePeriod period = new TimeZonePeriod(); period.LoadFromXml(reader); this.periods.Add(period.Id, period); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Periods)); return(true); case XmlElementNames.TransitionsGroups: do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.TransitionsGroup)) { TimeZoneTransitionGroup transitionGroup = new TimeZoneTransitionGroup(this); transitionGroup.LoadFromXml(reader); this.transitionGroups.Add(transitionGroup.Id, transitionGroup); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.TransitionsGroups)); return(true); case XmlElementNames.Transitions: do { reader.Read(); if (reader.IsStartElement()) { TimeZoneTransition transition = TimeZoneTransition.Create(this, reader.LocalName); transition.LoadFromXml(reader); this.transitions.Add(transition); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Transitions)); return(true); default: return(false); } }
/// <summary> /// Tries to read element from XML. /// </summary> /// <param name="reader">The reader.</param> /// <returns>True if element was read.</returns> internal override bool TryReadElementFromXml(EwsServiceXmlReader reader) { reader.EnsureCurrentNodeIsStartElement(); TimeZoneTransition transition = TimeZoneTransition.Create(this.timeZoneDefinition, reader.LocalName); transition.LoadFromXml(reader); EwsUtilities.Assert( transition.TargetPeriod != null, "TimeZoneTransitionGroup.TryReadElementFromXml", "The transition's target period is null."); this.transitions.Add(transition); return(true); }
/// <summary> /// Tries to read element from XML. /// </summary> /// <param name="reader">The reader.</param> /// <returns>True if element was read.</returns> internal override bool TryReadElementFromXml(EwsServiceXmlReader reader) { switch (reader.LocalName) { case XmlElementNames.Periods: do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Period)) { TimeZonePeriod period = new TimeZonePeriod(); period.LoadFromXml(reader); // OM:1648848 Bad timezone data from clients can include duplicate rules // for one year, with duplicate ID. In that case, let the first one win. if (!this.periods.ContainsKey(period.Id)) { this.periods.Add(period.Id, period); } else { reader.Service.TraceMessage( TraceFlags.EwsTimeZones, string.Format( "An entry with the same key (Id) '{0}' already exists in Periods. Cannot add another one. Existing entry: [Name='{1}', Bias='{2}']. Entry to skip: [Name='{3}', Bias='{4}'].", period.Id, this.Periods[period.Id].Name, this.Periods[period.Id].Bias, period.Name, period.Bias)); } } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Periods)); return(true); case XmlElementNames.TransitionsGroups: do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.TransitionsGroup)) { TimeZoneTransitionGroup transitionGroup = new TimeZoneTransitionGroup(this); transitionGroup.LoadFromXml(reader); this.transitionGroups.Add(transitionGroup.Id, transitionGroup); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.TransitionsGroups)); return(true); case XmlElementNames.Transitions: do { reader.Read(); if (reader.IsStartElement()) { TimeZoneTransition transition = TimeZoneTransition.Create(this, reader.LocalName); transition.LoadFromXml(reader); this.transitions.Add(transition); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Transitions)); return(true); default: return(false); } }