/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>List of non indexable item statistic object</returns> internal static List<NonIndexableItemStatistic> LoadFromXml(EwsServiceXmlReader reader) { List<NonIndexableItemStatistic> results = new List<NonIndexableItemStatistic>(); reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemStatistics)) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.NonIndexableItemStatistic)) { string mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); int itemCount = reader.ReadElementValue<int>(XmlNamespace.Types, XmlElementNames.ItemCount); string errorMessage = null; if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ErrorMessage)) { errorMessage = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ErrorMessage); } results.Add(new NonIndexableItemStatistic { Mailbox = mailbox, ItemCount = itemCount, ErrorMessage = errorMessage }); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemStatistics)); } return results; }
/// <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.UserOptions: if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.VotingOptionData)) { VotingOptionData option = new VotingOptionData(); option.LoadFromXml(reader, reader.LocalName); this.userOptions.Add(option); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.UserOptions)); } return true; case XmlElementNames.VotingResponse: this.votingResponse = reader.ReadElementValue<string>(); return true; default: return false; } }
/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { this.searchableMailboxes.Clear(); base.ReadElementsFromXml(reader); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SearchableMailboxes); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchableMailbox)) { this.searchableMailboxes.Add(SearchableMailbox.LoadFromXml(reader)); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SearchableMailboxes)); } reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FailedMailboxes)) { this.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Messages, reader); } }
/// <summary> /// Tries to read element from XML. /// </summary> /// <param name="reader">The reader.</param> /// <returns>True if appropriate element was read.</returns> internal override bool TryReadElementFromXml(EwsServiceXmlReader reader) { switch (reader.LocalName) { case XmlElementNames.TimeZone: LegacyAvailabilityTimeZone legacyTimeZone = new LegacyAvailabilityTimeZone(); legacyTimeZone.LoadFromXml(reader, reader.LocalName); this.timeZone = legacyTimeZone.ToTimeZoneInfo(); return true; case XmlElementNames.WorkingPeriodArray: List<WorkingPeriod> workingPeriods = new List<WorkingPeriod>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.WorkingPeriod)) { WorkingPeriod workingPeriod = new WorkingPeriod(); workingPeriod.LoadFromXml(reader, reader.LocalName); workingPeriods.Add(workingPeriod); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.WorkingPeriodArray)); // Availability supports a structure that can technically represent different working // times for each day of the week. This is apparently how the information is stored in // Exchange. However, no client (Outlook, OWA) either will let you specify different // working times for each day of the week, and Outlook won't either honor that complex // structure if it happens to be in Exchange. // So here we'll do what Outlook and OWA do: we'll use the start and end times of the // first working period, but we'll use the week days of all the periods. this.startTime = workingPeriods[0].StartTime; this.endTime = workingPeriods[0].EndTime; foreach (WorkingPeriod workingPeriod in workingPeriods) { foreach (DayOfTheWeek dayOfWeek in workingPeriods[0].DaysOfWeek) { if (!this.daysOfTheWeek.Contains(dayOfWeek)) { this.daysOfTheWeek.Add(dayOfWeek); } } } return true; default: return false; } }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Non indexable item details result object</returns> internal static NonIndexableItemDetailsResult LoadFromXml(EwsServiceXmlReader reader) { NonIndexableItemDetailsResult nonIndexableItemDetailsResult = new NonIndexableItemDetailsResult(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemDetailsResult); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items)) { List<NonIndexableItem> nonIndexableItems = new List<NonIndexableItem>(); if (!reader.IsEmptyElement) { do { reader.Read(); NonIndexableItem nonIndexableItem = NonIndexableItem.LoadFromXml(reader); if (nonIndexableItem != null) { nonIndexableItems.Add(nonIndexableItem); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Items)); nonIndexableItemDetailsResult.Items = nonIndexableItems.ToArray(); } } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes)) { nonIndexableItemDetailsResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemDetailsResult)); return nonIndexableItemDetailsResult; }
/// <summary> /// Loads the suggested days from XML. /// </summary> /// <param name="reader">The reader.</param> internal void LoadSuggestedDaysFromXml(EwsServiceXmlReader reader) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SuggestionDayResultArray); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SuggestionDayResult)) { Suggestion daySuggestion = new Suggestion(); daySuggestion.LoadFromXml(reader, reader.LocalName); this.daySuggestions.Add(daySuggestion); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SuggestionDayResultArray)); }
/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.RootFolder); this.results.TotalCount = reader.ReadAttributeValue<int>(XmlAttributeNames.TotalItemsInView); this.results.MoreAvailable = !reader.ReadAttributeValue<bool>(XmlAttributeNames.IncludesLastItemInRange); // Ignore IndexedPagingOffset attribute if MoreAvailable is false. this.results.NextPageOffset = results.MoreAvailable ? reader.ReadNullableAttributeValue<int>(XmlAttributeNames.IndexedPagingOffset) : null; reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.Folders); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Folder folder = EwsUtilities.CreateEwsObjectFromXmlElementName<Folder>(reader.Service, reader.LocalName); if (folder == null) { reader.SkipCurrentElement(); } else { folder.LoadFromXml( reader, true, /* clearPropertyBag */ this.propertySet, true /* summaryPropertiesOnly */); this.results.Folders.Add(folder); } } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Folders)); } reader.ReadEndElement(XmlNamespace.Messages, XmlElementNames.RootFolder); }
/// <summary> /// Load keyword stats xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Array of keyword statistics</returns> /* private */ static KeywordStatisticsSearchResult[] LoadKeywordStatsXml(EwsServiceXmlReader reader) { List <KeywordStatisticsSearchResult> keywordStats = new List <KeywordStatisticsSearchResult>(); reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStats); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStat)) { KeywordStatisticsSearchResult keywordStat = new KeywordStatisticsSearchResult(); keywordStat.Keyword = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Keyword); keywordStat.ItemHits = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ItemHits)); keywordStat.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); keywordStats.Add(keywordStat); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.KeywordStats)); return(keywordStats.Count == 0 ? null : keywordStats.ToArray()); }
/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { this.configurations.Clear(); base.ReadElementsFromXml(reader); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.DiscoverySearchConfigurations); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.DiscoverySearchConfiguration)) { this.configurations.Add(DiscoverySearchConfiguration.LoadFromXml(reader)); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.DiscoverySearchConfigurations)); } reader.ReadEndElementIfNecessary(XmlNamespace.Messages, XmlElementNames.DiscoverySearchConfigurations); }
sealed void LoadPropertyValueFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag) { ResponseActions value = ResponseActions.None; reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, this.XmlElementName); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement()) { value |= GetResponseAction(reader.LocalName); } }while (!reader.IsEndElement(XmlNamespace.Types, this.XmlElementName)); } propertyBag[this] = value; }
/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { this.retentionPolicyTags.Clear(); base.ReadElementsFromXml(reader); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.RetentionPolicyTags); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.RetentionPolicyTag)) { this.retentionPolicyTags.Add(RetentionPolicyTag.LoadFromXml(reader)); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.RetentionPolicyTags)); reader.ReadEndElementIfNecessary(XmlNamespace.Messages, XmlElementNames.RetentionPolicyTags); } }
void LoadFromXml(EwsServiceXmlReader reader, String xmlElementName) { reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet); do { reader.Read(); switch (reader.LocalName) { case XmlElementNames.FilterType: this.FilterType = (UnifiedGroupsFilterType)Enum.Parse(typeof(UnifiedGroupsFilterType), reader.ReadElementValue(), false); break; case XmlElementNames.TotalGroups: this.TotalGroups = reader.ReadElementValue <int>(); break; case XmlElementNames.GroupsTag: reader.Read(); while (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroup)) { UnifiedGroup unifiedGroup = new UnifiedGroup(); unifiedGroup.LoadFromXml(reader, XmlElementNames.UnifiedGroup); this.unifiedGroups.Add(unifiedGroup); } // Skip end element. reader.EnsureCurrentNodeIsEndElement(XmlNamespace.NotSpecified, XmlElementNames.GroupsTag); reader.Read(); break; default: break; } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet)); // Skip end element reader.EnsureCurrentNodeIsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet); reader.Read(); }
void ReadElementsFromXml(EwsServiceXmlReader reader) { base.ReadElementsFromXml(reader); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.TimeZoneDefinitions); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.TimeZoneDefinition)) { TimeZoneDefinition timeZoneDefinition = new TimeZoneDefinition(); timeZoneDefinition.LoadFromXml(reader); this.timeZones.Add(timeZoneDefinition.ToTimeZoneInfo(reader.Service)); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.TimeZoneDefinitions)); } }
/// <summary> /// Loads from XML. /// </summary> /// <param name="reader">The reader.</param> /// <param name="propertyBag">The property bag.</param> internal override sealed void LoadPropertyValueFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag) { ResponseActions value = ResponseActions.None; reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, this.XmlElementName); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement()) { value |= GetResponseAction(reader.LocalName); } } while (!reader.IsEndElement(XmlNamespace.Types, this.XmlElementName)); } propertyBag[this] = value; }
void ReadElementsFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( this.People != null, "GetPeopleInsightsResponse.ReadElementsFromXml", "People is null."); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.People); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Person item = new Person(); item.LoadFromXml(reader, XmlNamespace.Types, XmlElementNames.Person); this.People.Add(item); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.People)); } }
/// <summary> /// Load failed mailboxes xml /// </summary> /// <param name="rootXmlNamespace">Root xml namespace</param> /// <param name="reader">The reader</param> /// <returns>Array of failed mailboxes</returns> static FailedSearchMailbox[] LoadFailedMailboxesXml(XmlNamespace rootXmlNamespace, EwsServiceXmlReader reader) { List <FailedSearchMailbox> failedMailboxes = new List <FailedSearchMailbox>(); reader.EnsureCurrentNodeIsStartElement(rootXmlNamespace, XmlElementNames.FailedMailboxes); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailbox)) { String mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); int errorCode = 0; int.TryParse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ErrorCode), out errorCode); String errorMessage = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ErrorMessage); bool isArchive = false; bool.TryParse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.IsArchive), out isArchive); failedMailboxes.Add(new FailedSearchMailbox(mailbox, errorCode, errorMessage, isArchive)); } }while (!reader.IsEndElement(rootXmlNamespace, XmlElementNames.FailedMailboxes)); return(failedMailboxes.Count == 0 ? null : failedMailboxes.ToArray()); }
/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { base.ReadElementsFromXml(reader); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.TimeZoneDefinitions); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.TimeZoneDefinition)) { TimeZoneDefinition timeZoneDefinition = new TimeZoneDefinition(); timeZoneDefinition.LoadFromXml(reader); this.timeZones.Add(timeZoneDefinition.ToTimeZoneInfo(reader.Service)); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.TimeZoneDefinitions)); } }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Mailbox hold object</returns> static MailboxHoldResult LoadFromXml(EwsServiceXmlReader reader) { List <MailboxHoldStatus> statuses = new List <MailboxHoldStatus>(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.MailboxHoldResult); MailboxHoldResult holdResult = new MailboxHoldResult(); holdResult.HoldId = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.HoldId); // the query could be empty means there won't be Query element, hence needs to read and check // if the next element is not Query, then it means already read MailboxHoldStatuses element reader.Read(); holdResult.Query = ""; if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Query)) { holdResult.Query = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Query); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxHoldStatuses); } do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxHoldStatus)) { String mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); HoldStatus status = (HoldStatus)Enum.Parse(typeof(HoldStatus), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Status)); String additionalInfo = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.AdditionalInfo); statuses.Add(new MailboxHoldStatus(mailbox, status, additionalInfo)); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.MailboxHoldResult)); holdResult.Statuses = statuses.Count == 0 ? null : statuses.ToArray(); return(holdResult); }
object ParseResponse(EwsServiceXmlReader reader) { ServiceResponseCollection <SearchMailboxesResponse> serviceResponses = new ServiceResponseCollection <SearchMailboxesResponse>(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.ResponseMessages); while (true) { // Read ahead to see if we've reached the end of the response messages early. reader.Read(); if (reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.ResponseMessages)) { break; } SearchMailboxesResponse response = new SearchMailboxesResponse(); response.LoadFromXml(reader, this.GetResponseMessageXmlElementName()); serviceResponses.Add(response); } reader.ReadEndElementIfNecessary(XmlNamespace.Messages, XmlElementNames.ResponseMessages); return(serviceResponses); }
/// <summary> /// Read Person from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( this.People != null, "GetPeopleInsightsResponse.ReadElementsFromXml", "People is null."); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.People); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Person item = new Person(); item.LoadFromXml(reader, XmlNamespace.Types, XmlElementNames.Person); this.People.Add(item); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.People)); } }
/// <summary> /// Read Conversations from XML. /// </summary> /// <param name="reader">The reader.</param> /// <param name="xmlElementName">The name of the xml element</param> internal override void LoadFromXml(EwsServiceXmlReader reader, string xmlElementName) { reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet); do { reader.Read(); switch (reader.LocalName) { case XmlElementNames.FilterType: this.FilterType = (UnifiedGroupsFilterType)Enum.Parse(typeof(UnifiedGroupsFilterType), reader.ReadElementValue(), false); break; case XmlElementNames.TotalGroups: this.TotalGroups = reader.ReadElementValue<int>(); break; case XmlElementNames.GroupsTag: reader.Read(); while (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroup)) { UnifiedGroup unifiedGroup = new UnifiedGroup(); unifiedGroup.LoadFromXml(reader, XmlElementNames.UnifiedGroup); this.unifiedGroups.Add(unifiedGroup); } // Skip end element. reader.EnsureCurrentNodeIsEndElement(XmlNamespace.NotSpecified, XmlElementNames.GroupsTag); reader.Read(); break; default: break; } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet)); // Skip end element reader.EnsureCurrentNodeIsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet); reader.Read(); }
/// <summary> /// Read SOAP header and extract server version /// </summary> /// <param name="reader">EwsServiceXmlReader</param> private void ReadSoapHeader(EwsServiceXmlReader reader) { reader.ReadStartElement(XmlNamespace.Soap, XmlElementNames.SOAPHeaderElementName); do { reader.Read(); // Is this the ServerVersionInfo? if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ServerVersionInfo)) { this.Service.ServerInfo = ExchangeServerInfo.Parse(reader); } // Ignore anything else inside the SOAP header } while (!reader.IsEndElement(XmlNamespace.Soap, XmlElementNames.SOAPHeaderElementName)); }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Non indexable item object</returns> static NonIndexableItem LoadFromXml(EwsServiceXmlReader reader) { NonIndexableItem result = null; if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.NonIndexableItemDetail)) { ItemId itemId = null; ItemIndexError errorCode = ItemIndexError.None; String errorDescription = null; bool isPartiallyIndexed = false; bool isPermanentFailure = false; int attemptCount = 0; DateTime? lastAttemptTime = null; String additionalInfo = null; String sortValue = null; do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ItemId)) { itemId = new ItemId(); itemId.ReadAttributesFromXml(reader); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ErrorDescription)) { errorDescription = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ErrorDescription); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.IsPartiallyIndexed)) { isPartiallyIndexed = reader.ReadElementValue <bool>(XmlNamespace.Types, XmlElementNames.IsPartiallyIndexed); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.IsPermanentFailure)) { isPermanentFailure = reader.ReadElementValue <bool>(XmlNamespace.Types, XmlElementNames.IsPermanentFailure); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.AttemptCount)) { attemptCount = reader.ReadElementValue <int>(XmlNamespace.Types, XmlElementNames.AttemptCount); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.LastAttemptTime)) { lastAttemptTime = reader.ReadElementValue <DateTime>(XmlNamespace.Types, XmlElementNames.LastAttemptTime); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.AdditionalInfo)) { additionalInfo = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.AdditionalInfo); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SortValue)) { sortValue = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SortValue); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.NonIndexableItemDetail)); result = new NonIndexableItem { ItemId = itemId, ErrorCode = errorCode, ErrorDescription = errorDescription, IsPartiallyIndexed = isPartiallyIndexed, IsPermanentFailure = isPermanentFailure, AttemptCount = attemptCount, LastAttemptTime = lastAttemptTime, AdditionalInfo = additionalInfo, SortValue = sortValue, }; } return(result); }
bool TryReadElementFromXml(EwsServiceXmlReader reader) { do { reader.Read(); InsightValue item = null; if (reader.NodeType == XmlNodeType.Element && reader.LocalName == XmlElementNames.Item) { switch (reader.ReadAttributeValue("xsi:type")) { case XmlElementNames.StringInsightValue: item = new StringInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.ProfileInsightValue: item = new ProfileInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.JobInsightValue: item = new JobInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.UserProfilePicture: item = new UserProfilePicture(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.EducationInsightValue: item = new EducationInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.SkillInsightValue: item = new SkillInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.ComputedInsightValue: item = new ComputedInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.MeetingInsightValue: item = new MeetingInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.EmailInsightValue: item = new EmailInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.DelveDocument: item = new DelveDocument(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; default: return(false); } } else { return(false); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.ItemList)); return(true); }
/// <summary> /// Loads from XML. /// </summary> /// <param name="reader">The reader.</param> internal void LoadFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( reader != null, "UserConfiguration.LoadFromXml", "reader is null"); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.UserConfiguration); reader.Read(); // Position at first property element do { if (reader.NodeType == XmlNodeType.Element) { switch (reader.LocalName) { case XmlElementNames.UserConfigurationName: string responseName = reader.ReadAttributeValue(XmlAttributeNames.Name); EwsUtilities.Assert( string.Compare(this.name, responseName, StringComparison.Ordinal) == 0, "UserConfiguration.LoadFromXml", "UserConfigurationName does not match: Expected: " + this.name + " Name in response: " + responseName); reader.SkipCurrentElement(); break; case XmlElementNames.ItemId: this.itemId = new ItemId(); this.itemId.LoadFromXml(reader, XmlElementNames.ItemId); break; case XmlElementNames.Dictionary: this.dictionary.LoadFromXml(reader, XmlElementNames.Dictionary); break; case XmlElementNames.XmlData: this.xmlData = Convert.FromBase64String(reader.ReadElementValue()); break; case XmlElementNames.BinaryData: this.binaryData = Convert.FromBase64String(reader.ReadElementValue()); break; default: EwsUtilities.Assert( false, "UserConfiguration.LoadFromXml", "Xml element not supported: " + reader.LocalName); break; } } // If XmlData was loaded, read is skipped because GetXmlData positions the reader at the next property. reader.Read(); } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.UserConfiguration)); }
/// <summary> /// Load extended properties xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Extended properties collection</returns> private static ExtendedPropertyCollection LoadExtendedPropertiesXml(EwsServiceXmlReader reader) { ExtendedPropertyCollection extendedProperties = new ExtendedPropertyCollection(); reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.ExtendedProperties); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ExtendedProperty)) { extendedProperties.LoadFromXml(reader, XmlElementNames.ExtendedProperty); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.ExtendedProperties)); return extendedProperties.Count == 0 ? null : extendedProperties; }
/// <summary> /// Read Conversations from XML. /// </summary> /// <param name="reader">The reader.</param> /// <param name="xmlElementName">The xml element to read.</param> internal override void LoadFromXml(EwsServiceXmlReader reader, string xmlElementName) { reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroup); do { reader.Read(); switch (reader.LocalName) { case XmlElementNames.SmtpAddress: this.SmtpAddress = reader.ReadElementValue(); break; case XmlElementNames.LegacyDN: this.LegacyDN = reader.ReadElementValue(); break; case XmlElementNames.MailboxGuid: this.MailboxGuid = reader.ReadElementValue(); break; case XmlElementNames.DisplayName: this.DisplayName = reader.ReadElementValue(); break; case XmlElementNames.IsFavorite: this.IsFavorite = reader.ReadElementValue<bool>(); break; case XmlElementNames.LastVisitedTimeUtc: this.LastVisitedTimeUtc = reader.ReadElementValue(); break; case XmlElementNames.AccessType: this.AccessType = (UnifiedGroupAccessType)Enum.Parse(typeof(UnifiedGroupAccessType), reader.ReadElementValue(), false); break; case XmlElementNames.ExternalDirectoryObjectId: this.ExternalDirectoryObjectId = reader.ReadElementValue(); break; default: break; } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroup)); // Skip end element reader.EnsureCurrentNodeIsEndElement(XmlNamespace.NotSpecified, XmlElementNames.UnifiedGroup); reader.Read(); }
/// <summary> /// Load preview items xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Array of preview items</returns> /* private */ static SearchPreviewItem[] LoadPreviewItemsXml(EwsServiceXmlReader reader) { List <SearchPreviewItem> previewItems = new List <SearchPreviewItem>(); reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.Items); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchPreviewItem)) { SearchPreviewItem previewItem = new SearchPreviewItem(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Id)) { previewItem.Id = new ItemId(); previewItem.Id.ReadAttributesFromXml(reader); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ParentId)) { previewItem.ParentId = new ItemId(); previewItem.ParentId.ReadAttributesFromXml(reader); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Mailbox)) { previewItem.Mailbox = new PreviewItemMailbox(); previewItem.Mailbox.MailboxId = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.MailboxId); previewItem.Mailbox.PrimarySmtpAddress = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PrimarySmtpAddress); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.UniqueHash)) { previewItem.UniqueHash = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.UniqueHash); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SortValue)) { previewItem.SortValue = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SortValue); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.OwaLink)) { previewItem.OwaLink = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.OwaLink); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Sender)) { previewItem.Sender = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Sender); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ToRecipients)) { previewItem.ToRecipients = GetRecipients(reader, XmlElementNames.ToRecipients); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.CcRecipients)) { previewItem.CcRecipients = GetRecipients(reader, XmlElementNames.CcRecipients); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.BccRecipients)) { previewItem.BccRecipients = GetRecipients(reader, XmlElementNames.BccRecipients); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.CreatedTime)) { previewItem.CreatedTime = DateTime.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.CreatedTime)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ReceivedTime)) { previewItem.ReceivedTime = DateTime.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ReceivedTime)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SentTime)) { previewItem.SentTime = DateTime.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SentTime)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Subject)) { previewItem.Subject = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Subject); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Preview)) { previewItem.Preview = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Preview); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Size)) { previewItem.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Importance)) { previewItem.Importance = (Importance)Enum.Parse(typeof(Importance), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Importance)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Read)) { previewItem.Read = bool.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Read)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.HasAttachment)) { previewItem.HasAttachment = bool.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.HasAttachment)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ExtendedProperties)) { previewItem.ExtendedProperties = LoadExtendedPropertiesXml(reader); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchPreviewItem)); previewItems.Add(previewItem); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Items)); return(previewItems.Count == 0 ? null : previewItems.ToArray()); }
/// <summary> /// Get collection of recipients /// </summary> /// <param name="reader">The reader</param> /// <param name="elementName">Element name</param> /// <returns>Array of recipients</returns> private static string[] GetRecipients(EwsServiceXmlReader reader, string elementName) { List<string> toRecipients = new List<string>(); do { if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SmtpAddress)) { toRecipients.Add(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SmtpAddress)); } reader.Read(); } while (!reader.IsEndElement(XmlNamespace.Types, elementName)); return toRecipients.Count == 0 ? null : toRecipients.ToArray(); }
/// <summary> /// Load keyword stats xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Array of keyword statistics</returns> private static KeywordStatisticsSearchResult[] LoadKeywordStatsXml(EwsServiceXmlReader reader) { List<KeywordStatisticsSearchResult> keywordStats = new List<KeywordStatisticsSearchResult>(); reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStats); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStat)) { KeywordStatisticsSearchResult keywordStat = new KeywordStatisticsSearchResult(); keywordStat.Keyword = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Keyword); keywordStat.ItemHits = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ItemHits)); keywordStat.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); keywordStats.Add(keywordStat); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.KeywordStats)); return keywordStats.Count == 0 ? null : keywordStats.ToArray(); }
/// <summary> /// Loads the free busy view from XML. /// </summary> /// <param name="reader">The reader.</param> /// <param name="viewType">Type of free/busy view.</param> void LoadFreeBusyViewFromXml(EwsServiceXmlReader reader, FreeBusyViewType viewType) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.FreeBusyView); String viewTypeString = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.FreeBusyViewType); this.viewType = (FreeBusyViewType)Enum.Parse(typeof(FreeBusyViewType), viewTypeString, false); do { reader.Read(); if (reader.IsStartElement()) { switch (reader.LocalName) { case XmlElementNames.MergedFreeBusy: String mergedFreeBusy = reader.ReadElementValue <String>(); for (int i = 0; i < mergedFreeBusy.Length; i++) { this.mergedFreeBusyStatus.Add((LegacyFreeBusyStatus)Byte.Parse(mergedFreeBusy[i].ToString())); } break; case XmlElementNames.CalendarEventArray: do { reader.Read(); // Sometimes Exchange Online returns blank CalendarEventArray tag like bellow. // <CalendarEventArray xmlns="http://schemas.microsoft.com/exchange/services/2006/types" /> // So we have to check the end of CalendarEventArray tag. if (reader.LocalName == XmlElementNames.FreeBusyView) { // There is no the end tag of CalendarEventArray, but the reader is reading the end tag of FreeBusyView. break; } else if (reader.LocalName == XmlElementNames.WorkingHours) { // There is no the end tag of CalendarEventArray, but the reader is reading the start tag of WorkingHours. goto case XmlElementNames.WorkingHours; } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.CalendarEvent)) { CalendarEvent calendarEvent = new CalendarEvent(); calendarEvent.LoadFromXml(reader, XmlElementNames.CalendarEvent); this.calendarEvents.Add(calendarEvent); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.CalendarEventArray)); break; case XmlElementNames.WorkingHours: this.workingHours = new WorkingHours(); this.workingHours.LoadFromXml(reader, reader.LocalName); break; } } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.FreeBusyView)); }
void ReadElementsFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( this.Results.Conversations != null, "FindConversationResponse.ReadElementsFromXml", "conversations is null."); EwsUtilities.Assert( this.Results.HighlightTerms != null, "FindConversationResponse.ReadElementsFromXml", "highlightTerms is null."); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.Conversations); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Conversation item = EwsUtilities.CreateEwsObjectFromXmlElementName <Conversation>(reader.Service, reader.LocalName); if (item == null) { reader.SkipCurrentElement(); } else { item.LoadFromXml( reader, true, /* clearPropertyBag */ null, false /* summaryPropertiesOnly */); this.Results.Conversations.Add(item); } } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.Conversations)); } reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms) && !reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { HighlightTerm term = new HighlightTerm(); term.LoadFromXml( reader, XmlNamespace.Types, XmlElementNames.HighlightTerm); this.Results.HighlightTerms.Add(term); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms)); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.TotalConversationsInView) && !reader.IsEmptyElement) { this.Results.TotalCount = reader.ReadElementValue <int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.IndexedOffset) && !reader.IsEmptyElement) { this.Results.IndexedOffset = reader.ReadElementValue <int>(); reader.Read(); } }
/// <summary> /// Loads extra error details from XML /// </summary> /// <param name="reader">The reader.</param> /// <param name="xmlElementName">The current element name of the extra error details.</param> /// <returns> /// True if the expected extra details is loaded; /// False if the element name does not match the expected element. /// </returns> internal override bool LoadExtraErrorDetailsFromXml(EwsServiceXmlReader reader, string xmlElementName) { bool baseReturnVal = base.LoadExtraErrorDetailsFromXml(reader, xmlElementName); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.ErrorSubscriptionIds)) { do { reader.Read(); if (reader.NodeType == System.Xml.XmlNodeType.Element && reader.LocalName == XmlElementNames.SubscriptionId) { this.ErrorSubscriptionIds.Add( reader.ReadElementValue(XmlNamespace.Messages, XmlElementNames.SubscriptionId)); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.ErrorSubscriptionIds)); return true; } else { return baseReturnVal; } }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Search result object</returns> internal static SearchMailboxesResult LoadFromXml(EwsServiceXmlReader reader) { SearchMailboxesResult searchResult = new SearchMailboxesResult(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult); List<MailboxQuery> searchQueries = new List<MailboxQuery>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchQueries)) { reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxQuery); string query = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Query); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes); List<MailboxSearchScope> mailboxSearchScopes = new List<MailboxSearchScope>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope)) { string mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.SearchScope); string searchScope = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SearchScope); reader.ReadEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope); mailboxSearchScopes.Add(new MailboxSearchScope(mailbox, (MailboxSearchLocation)Enum.Parse(typeof(MailboxSearchLocation), searchScope))); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes); searchQueries.Add(new MailboxQuery(query, mailboxSearchScopes.ToArray())); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchQueries)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.SearchQueries); searchResult.SearchQueries = searchQueries.ToArray(); searchResult.ResultType = (SearchResultType)Enum.Parse(typeof(SearchResultType), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ResultType)); searchResult.ItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ItemCount)); searchResult.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); searchResult.PageItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemCount)); searchResult.PageItemSize = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemSize)); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStats)) { searchResult.KeywordStats = LoadKeywordStatsXml(reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items)) { searchResult.PreviewItems = LoadPreviewItemsXml(reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes)) { searchResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiners)) { List<SearchRefinerItem> refiners = new List<SearchRefinerItem>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiner)) { refiners.Add(SearchRefinerItem.LoadFromXml(reader)); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Refiners)); if (refiners.Count > 0) { searchResult.Refiners = refiners.ToArray(); } } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStats)) { List<MailboxStatisticsItem> mailboxStats = new List<MailboxStatisticsItem>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStat)) { mailboxStats.Add(MailboxStatisticsItem.LoadFromXml(reader)); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxStats)); if (mailboxStats.Count > 0) { searchResult.MailboxStats = mailboxStats.ToArray(); } } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult)); return searchResult; }
/// <summary> /// Reads ItemList from XML /// </summary> /// <param name="reader">The reader.</param> /* private */ void ReadItemList(EwsServiceXmlReader reader) { do { reader.Read(); InsightValue item = null; if (reader.NodeType == XmlNodeType.Element && reader.LocalName == XmlElementNames.Item) { switch (reader.ReadAttributeValue("xsi:type")) { case XmlElementNames.StringInsightValue: item = new StringInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.ProfileInsightValue: item = new ProfileInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.JobInsightValue: item = new JobInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.UserProfilePicture: item = new UserProfilePicture(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.EducationInsightValue: item = new EducationInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.SkillInsightValue: item = new SkillInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.ComputedInsightValue: item = new ComputedInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.MeetingInsightValue: item = new MeetingInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.EmailInsightValue: item = new EmailInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.DelveDocument: item = new DelveDocument(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.CompanyInsightValue: item = new CompanyInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.OutOfOfficeInsightValue: item = new OutOfOfficeInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; } } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.ItemList)); }
void ReadElementsFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( this.Results.Personas != null, "FindPeopleResponse.ReadElementsFromXml", "Personas is null."); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.People); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Persona item = EwsUtilities.CreateEwsObjectFromXmlElementName <Persona>(reader.Service, reader.LocalName); if (item == null) { reader.SkipCurrentElement(); } else { // Don't clear propertyBag because all properties have been initialized in the persona constructor. item.LoadFromXml(reader, false, null, false); this.Results.Personas.Add(item); } } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.People)); } reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.TotalNumberOfPeopleInView) && !reader.IsEmptyElement) { this.Results.TotalCount = reader.ReadElementValue <int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FirstMatchingRowIndex) && !reader.IsEmptyElement) { this.Results.FirstMatchingRowIndex = reader.ReadElementValue <int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FirstLoadedRowIndex) && !reader.IsEmptyElement) { this.Results.FirstLoadedRowIndex = reader.ReadElementValue <int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FindPeopleTransactionId) && !reader.IsEmptyElement) { this.TransactionId = reader.ReadElementValue <string>(); reader.Read(); } // Future proof by skipping any additional elements before returning while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.FindPeopleResponse)) { reader.Read(); } }
/// <summary> /// Loads the free busy view from XML. /// </summary> /// <param name="reader">The reader.</param> /// <param name="viewType">Type of free/busy view.</param> internal void LoadFreeBusyViewFromXml(EwsServiceXmlReader reader, FreeBusyViewType viewType) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.FreeBusyView); string viewTypeString = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.FreeBusyViewType); this.viewType = (FreeBusyViewType)Enum.Parse(typeof(FreeBusyViewType), viewTypeString, false); do { reader.Read(); if (reader.IsStartElement()) { switch (reader.LocalName) { case XmlElementNames.MergedFreeBusy: string mergedFreeBusy = reader.ReadElementValue(); for (int i = 0; i < mergedFreeBusy.Length; i++) { this.mergedFreeBusyStatus.Add((LegacyFreeBusyStatus)Byte.Parse(mergedFreeBusy[i].ToString())); } break; case XmlElementNames.CalendarEventArray: do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.CalendarEvent)) { CalendarEvent calendarEvent = new CalendarEvent(); calendarEvent.LoadFromXml(reader, XmlElementNames.CalendarEvent); this.calendarEvents.Add(calendarEvent); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.CalendarEventArray)); break; case XmlElementNames.WorkingHours: this.workingHours = new WorkingHours(); this.workingHours.LoadFromXml(reader, reader.LocalName); break; } } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.FreeBusyView)); }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Search result object</returns> static SearchMailboxesResult LoadFromXml(EwsServiceXmlReader reader) { SearchMailboxesResult searchResult = new SearchMailboxesResult(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult); List <MailboxQuery> searchQueries = new List <MailboxQuery>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchQueries)) { reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxQuery); String query = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Query); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes); List <MailboxSearchScope> mailboxSearchScopes = new List <MailboxSearchScope>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope)) { String mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.SearchScope); String searchScope = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SearchScope); reader.ReadEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope); mailboxSearchScopes.Add(new MailboxSearchScope(mailbox, (MailboxSearchLocation)Enum.Parse(typeof(MailboxSearchLocation), searchScope))); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes); searchQueries.Add(new MailboxQuery(query, mailboxSearchScopes.ToArray())); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchQueries)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.SearchQueries); searchResult.SearchQueries = searchQueries.ToArray(); searchResult.ResultType = (SearchResultType)Enum.Parse(typeof(SearchResultType), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ResultType)); searchResult.ItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ItemCount)); searchResult.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); searchResult.PageItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemCount)); searchResult.PageItemSize = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemSize)); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStats)) { searchResult.KeywordStats = LoadKeywordStatsXml(reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items)) { searchResult.PreviewItems = LoadPreviewItemsXml(reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes)) { searchResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiners)) { List <SearchRefinerItem> refiners = new List <SearchRefinerItem>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiner)) { refiners.Add(SearchRefinerItem.LoadFromXml(reader)); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Refiners)); if (refiners.Count > 0) { searchResult.Refiners = refiners.ToArray(); } } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStats)) { List <MailboxStatisticsItem> mailboxStats = new List <MailboxStatisticsItem>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStat)) { mailboxStats.Add(MailboxStatisticsItem.LoadFromXml(reader)); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxStats)); if (mailboxStats.Count > 0) { searchResult.MailboxStats = mailboxStats.ToArray(); } } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult)); return(searchResult); }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Mailbox hold object</returns> internal static MailboxHoldResult LoadFromXml(EwsServiceXmlReader reader) { List<MailboxHoldStatus> statuses = new List<MailboxHoldStatus>(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.MailboxHoldResult); MailboxHoldResult holdResult = new MailboxHoldResult(); holdResult.HoldId = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.HoldId); // the query could be empty means there won't be Query element, hence needs to read and check // if the next element is not Query, then it means already read MailboxHoldStatuses element reader.Read(); holdResult.Query = string.Empty; if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Query)) { holdResult.Query = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Query); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxHoldStatuses); } do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxHoldStatus)) { string mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); HoldStatus status = (HoldStatus)Enum.Parse(typeof(HoldStatus), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Status)); string additionalInfo = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.AdditionalInfo); statuses.Add(new MailboxHoldStatus(mailbox, status, additionalInfo)); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.MailboxHoldResult)); holdResult.Statuses = statuses.Count == 0 ? null : statuses.ToArray(); return holdResult; }
/// <summary> /// Reads ItemList from XML /// </summary> /// <param name="reader">The reader.</param> private void ReadItemList(EwsServiceXmlReader reader) { do { reader.Read(); InsightValue item = null; if (reader.NodeType == XmlNodeType.Element && reader.LocalName == XmlElementNames.Item) { switch (reader.ReadAttributeValue("xsi:type")) { case XmlElementNames.StringInsightValue: item = new StringInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.ProfileInsightValue: item = new ProfileInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.JobInsightValue: item = new JobInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.UserProfilePicture: item = new UserProfilePicture(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.EducationInsightValue: item = new EducationInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.SkillInsightValue: item = new SkillInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.ComputedInsightValue: item = new ComputedInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.MeetingInsightValue: item = new MeetingInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.EmailInsightValue: item = new EmailInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.DelveDocument: item = new DelveDocument(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.CompanyInsightValue: item = new CompanyInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; case XmlElementNames.OutOfOfficeInsightValue: item = new OutOfOfficeInsightValue(); item.LoadFromXml(reader, reader.LocalName); this.ItemList.InternalAdd(item); break; } } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.ItemList)); }
/// <summary> /// Read Personas from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( this.Results.Personas != null, "FindPeopleResponse.ReadElementsFromXml", "Personas is null."); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.People); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Persona item = EwsUtilities.CreateEwsObjectFromXmlElementName<Persona>(reader.Service, reader.LocalName); if (item == null) { reader.SkipCurrentElement(); } else { // Don't clear propertyBag because all properties have been initialized in the persona constructor. item.LoadFromXml(reader, false, null, false); this.Results.Personas.Add(item); } } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.People)); } reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.TotalNumberOfPeopleInView) && !reader.IsEmptyElement) { this.Results.TotalCount = reader.ReadElementValue<int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FirstMatchingRowIndex) && !reader.IsEmptyElement) { this.Results.FirstMatchingRowIndex = reader.ReadElementValue<int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FirstLoadedRowIndex) && !reader.IsEmptyElement) { this.Results.FirstLoadedRowIndex = reader.ReadElementValue<int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FindPeopleTransactionId) && !reader.IsEmptyElement) { this.TransactionId = reader.ReadElementValue<string>(); reader.Read(); } // Future proof by skipping any additional elements before returning while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.FindPeopleResponse)) { reader.Read(); } }
bool TryReadElementFromXml(EwsServiceXmlReader reader) { switch (reader.LocalName) { case XmlElementNames.MeetingTime: this.meetingTime = reader.ReadElementValueAsUnbiasedDateTimeScopedToServiceTimeZone(); return(true); case XmlElementNames.IsWorkTime: this.isWorkTime = reader.ReadElementValue <bool>(); return(true); case XmlElementNames.SuggestionQuality: this.quality = reader.ReadElementValue <SuggestionQuality>(); return(true); case XmlElementNames.AttendeeConflictDataArray: if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement()) { Conflict conflict = null; switch (reader.LocalName) { case XmlElementNames.UnknownAttendeeConflictData: conflict = new Conflict(ConflictType.UnknownAttendeeConflict); break; case XmlElementNames.TooBigGroupAttendeeConflictData: conflict = new Conflict(ConflictType.GroupTooBigConflict); break; case XmlElementNames.IndividualAttendeeConflictData: conflict = new Conflict(ConflictType.IndividualAttendeeConflict); break; case XmlElementNames.GroupAttendeeConflictData: conflict = new Conflict(ConflictType.GroupConflict); break; default: EwsUtilities.Assert( false, "TimeSuggestion.TryReadElementFromXml", string.Format("The {0} element name does not map to any AttendeeConflict descendant.", reader.LocalName)); // The following line to please the compiler break; } conflict.LoadFromXml(reader, reader.LocalName); this.conflicts.Add(conflict); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.AttendeeConflictDataArray)); } return(true); default: return(false); } }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Discovery search configuration object</returns> static DiscoverySearchConfiguration LoadFromXml(EwsServiceXmlReader reader) { List <SearchableMailbox> mailboxes = new List <SearchableMailbox>(); reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.DiscoverySearchConfiguration); DiscoverySearchConfiguration configuration = new DiscoverySearchConfiguration(); configuration.SearchId = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SearchId); // the query could be empty means there won't be Query element, hence needs to read and check // if the next element is not Query, then it means already read SearchableMailboxes element configuration.SearchQuery = ""; configuration.InPlaceHoldIdentity = ""; configuration.ManagedByOrganization = ""; configuration.Language = ""; do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchQuery)) { configuration.SearchQuery = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SearchQuery); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.SearchQuery); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchableMailboxes)) { // search object without any source mailbox is possible, hence need to check if element is empty if (!reader.IsEmptyElement) { while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchableMailboxes)) { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchableMailbox)) { mailboxes.Add(SearchableMailbox.LoadFromXml(reader)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.SearchableMailbox); } } } } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.InPlaceHoldIdentity)) { configuration.InPlaceHoldIdentity = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.InPlaceHoldIdentity); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.InPlaceHoldIdentity); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ManagedByOrganization)) { configuration.ManagedByOrganization = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ManagedByOrganization); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.ManagedByOrganization); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Language)) { configuration.Language = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Language); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.Language); } else { break; } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.DiscoverySearchConfiguration)); configuration.SearchableMailboxes = mailboxes.Count == 0 ? null : mailboxes.ToArray(); return(configuration); }
/// <summary> /// Read Conversations from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { EwsUtilities.Assert( this.Results.Conversations != null, "FindConversationResponse.ReadElementsFromXml", "conversations is null."); EwsUtilities.Assert( this.Results.HighlightTerms != null, "FindConversationResponse.ReadElementsFromXml", "highlightTerms is null."); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.Conversations); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Conversation item = EwsUtilities.CreateEwsObjectFromXmlElementName<Conversation>(reader.Service, reader.LocalName); if (item == null) { reader.SkipCurrentElement(); } else { item.LoadFromXml( reader, true, /* clearPropertyBag */ null, false /* summaryPropertiesOnly */); this.Results.Conversations.Add(item); } } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.Conversations)); } reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms) && !reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { HighlightTerm term = new HighlightTerm(); term.LoadFromXml( reader, XmlNamespace.Types, XmlElementNames.HighlightTerm); this.Results.HighlightTerms.Add(term); } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms)); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.TotalConversationsInView) && !reader.IsEmptyElement) { this.Results.TotalCount = reader.ReadElementValue<int>(); reader.Read(); } if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.IndexedOffset) && !reader.IsEmptyElement) { this.Results.IndexedOffset = reader.ReadElementValue<int>(); reader.Read(); } }
/// <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; } }
/// <summary> /// Reads the SOAP fault. /// </summary> /// <param name="reader">The reader.</param> /// <returns>SOAP fault details.</returns> protected SoapFaultDetails ReadSoapFault(EwsServiceXmlReader reader) { SoapFaultDetails soapFaultDetails = null; try { this.ReadXmlDeclaration(reader); reader.Read(); if (!reader.IsStartElement() || (reader.LocalName != XmlElementNames.SOAPEnvelopeElementName)) { return soapFaultDetails; } // EWS can sometimes return SOAP faults using the SOAP 1.2 namespace. Get the // namespace URI from the envelope element and use it for the rest of the parsing. // If it's not 1.1 or 1.2, we can't continue. XmlNamespace soapNamespace = EwsUtilities.GetNamespaceFromUri(reader.NamespaceUri); if (soapNamespace == XmlNamespace.NotSpecified) { return soapFaultDetails; } reader.Read(); // EWS doesn't always return a SOAP header. If this response contains a header element, // read the server version information contained in the header. if (reader.IsStartElement(soapNamespace, XmlElementNames.SOAPHeaderElementName)) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ServerVersionInfo)) { this.Service.ServerInfo = ExchangeServerInfo.Parse(reader); } } while (!reader.IsEndElement(soapNamespace, XmlElementNames.SOAPHeaderElementName)); // Queue up the next read reader.Read(); } // Parse the fault element contained within the SOAP body. if (reader.IsStartElement(soapNamespace, XmlElementNames.SOAPBodyElementName)) { do { reader.Read(); // Parse Fault element if (reader.IsStartElement(soapNamespace, XmlElementNames.SOAPFaultElementName)) { soapFaultDetails = SoapFaultDetails.Parse(reader, soapNamespace); } } while (!reader.IsEndElement(soapNamespace, XmlElementNames.SOAPBodyElementName)); } reader.ReadEndElement(soapNamespace, XmlElementNames.SOAPEnvelopeElementName); } catch (XmlException) { // If response doesn't contain a valid SOAP fault, just ignore exception and // return null for SOAP fault details. } return soapFaultDetails; }
/// <summary> /// Load preview items xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Array of preview items</returns> private static SearchPreviewItem[] LoadPreviewItemsXml(EwsServiceXmlReader reader) { List<SearchPreviewItem> previewItems = new List<SearchPreviewItem>(); reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.Items); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchPreviewItem)) { SearchPreviewItem previewItem = new SearchPreviewItem(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Id)) { previewItem.Id = new ItemId(); previewItem.Id.ReadAttributesFromXml(reader); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ParentId)) { previewItem.ParentId = new ItemId(); previewItem.ParentId.ReadAttributesFromXml(reader); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Mailbox)) { previewItem.Mailbox = new PreviewItemMailbox(); previewItem.Mailbox.MailboxId = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.MailboxId); previewItem.Mailbox.PrimarySmtpAddress = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PrimarySmtpAddress); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.UniqueHash)) { previewItem.UniqueHash = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.UniqueHash); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SortValue)) { previewItem.SortValue = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SortValue); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.OwaLink)) { previewItem.OwaLink = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.OwaLink); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Sender)) { previewItem.Sender = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Sender); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ToRecipients)) { previewItem.ToRecipients = GetRecipients(reader, XmlElementNames.ToRecipients); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.CcRecipients)) { previewItem.CcRecipients = GetRecipients(reader, XmlElementNames.CcRecipients); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.BccRecipients)) { previewItem.BccRecipients = GetRecipients(reader, XmlElementNames.BccRecipients); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.CreatedTime)) { previewItem.CreatedTime = DateTime.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.CreatedTime)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ReceivedTime)) { previewItem.ReceivedTime = DateTime.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ReceivedTime)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SentTime)) { previewItem.SentTime = DateTime.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SentTime)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Subject)) { previewItem.Subject = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Subject); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Preview)) { previewItem.Preview = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Preview); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Size)) { previewItem.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Importance)) { previewItem.Importance = (Importance)Enum.Parse(typeof(Importance), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Importance)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Read)) { previewItem.Read = bool.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Read)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.HasAttachment)) { previewItem.HasAttachment = bool.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.HasAttachment)); } else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ExtendedProperties)) { previewItem.ExtendedProperties = LoadExtendedPropertiesXml(reader); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchPreviewItem)); previewItems.Add(previewItem); } } while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Items)); return previewItems.Count == 0 ? null : previewItems.ToArray(); }
/// <summary> /// Loads from XML. /// </summary> /// <param name="reader">The reader.</param> internal void LoadFromXml(EwsServiceXmlReader reader) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.Notification); do { NotificationGroup notifications = new NotificationGroup(); notifications.SubscriptionId = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SubscriptionId); notifications.Events = new Collection<NotificationEvent>(); lock (this) { this.events.Add(notifications); } do { reader.Read(); if (reader.IsStartElement()) { string eventElementName = reader.LocalName; EventType eventType; if (GetEventsResults.XmlElementNameToEventTypeMap.TryGetValue(eventElementName, out eventType)) { if (eventType == EventType.Status) { // We don't need to return status events reader.ReadEndElementIfNecessary(XmlNamespace.Types, eventElementName); } else { this.LoadNotificationEventFromXml( reader, eventElementName, eventType, notifications); } } else { reader.SkipCurrentElement(); } } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.Notification)); reader.Read(); } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.Notifications)); }