Implementation
//OofSettings GetUserOofSettings(string smtpAddress)
// {
// EwsUtilities.ValidateParam(smtpAddress, "smtpAddress");
//
// GetUserOofSettingsRequest request = new GetUserOofSettingsRequest(this);
//
// request.SmtpAddress = smtpAddress;
//
// return request.Execute().OofSettings;
// }
/// <summary>
/// Sets the Out of Office (OOF) settings for a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="smtpAddress">The SMTP address of the user for which to set OOF settings.</param>
/// <param name="oofSettings">The OOF settings.</param>
//void SetUserOofSettings(string smtpAddress, OofSettings oofSettings)
// {
// EwsUtilities.ValidateParam(smtpAddress, "smtpAddress");
// EwsUtilities.ValidateParam(oofSettings, "oofSettings");
//
// SetUserOofSettingsRequest request = new SetUserOofSettingsRequest(this);
//
// request.SmtpAddress = smtpAddress;
// request.OofSettings = oofSettings;
//
// request.Execute();
// }
/// <summary>
/// Gets detailed information about the availability of a set of users, rooms, and resources within a
/// specified time window.
/// </summary>
/// <param name="attendees">The attendees for which to retrieve availability information.</param>
/// <param name="timeWindow">The time window in which to retrieve user availability information.</param>
/// <param name="requestedData">The requested data (free/busy and/or suggestions).</param>
/// <param name="options">The options controlling the information returned.</param>
/// <returns>
/// The availability information for each user appears in a unique FreeBusyResponse object. The order of users
/// in the request determines the order of availability data for each user in the response.
/// </returns>
//GetUserAvailabilityResults GetUserAvailability(
// Iterable<AttendeeInfo> attendees,
// TimeWindow timeWindow,
// AvailabilityData requestedData,
// AvailabilityOptions options)
// {
// EwsUtilities.ValidateParamCollection(attendees, "attendees");
// EwsUtilities.ValidateParam(timeWindow, "timeWindow");
// EwsUtilities.ValidateParam(options, "options");
//
// GetUserAvailabilityRequest request = new GetUserAvailabilityRequest(this);
//
// request.Attendees = attendees;
// request.TimeWindow = timeWindow;
// request.RequestedData = requestedData;
// request.Options = options;
//
// return request.Execute();
// }
/// <summary>
/// Gets detailed information about the availability of a set of users, rooms, and resources within a
/// specified time window.
/// </summary>
/// <param name="attendees">The attendees for which to retrieve availability information.</param>
/// <param name="timeWindow">The time window in which to retrieve user availability information.</param>
/// <param name="requestedData">The requested data (free/busy and/or suggestions).</param>
/// <returns>
/// The availability information for each user appears in a unique FreeBusyResponse object. The order of users
/// in the request determines the order of availability data for each user in the response.
/// </returns>
//GetUserAvailabilityResults GetUserAvailability(
// Iterable<AttendeeInfo> attendees,
// TimeWindow timeWindow,
// AvailabilityData requestedData)
// {
// return this.GetUserAvailability(
// attendees,
// timeWindow,
// requestedData,
// new AvailabilityOptions());
// }
/// <summary>
/// Retrieves a collection of all room lists in the organization.
/// </summary>
/// <returns>An EmailAddressCollection containing all the room lists in the organization.</returns>
//EmailAddressCollection GetRoomLists()
// {
// GetRoomListsRequest request = new GetRoomListsRequest(this);
//
// return request.Execute().RoomLists;
// }
/// <summary>
/// Retrieves a collection of all rooms in the specified room list in the organization.
/// </summary>
/// <param name="emailAddress">The e-mail address of the room list.</param>
/// <returns>A collection of EmailAddress objects representing all the rooms within the specifed room list.</returns>
//Collection<EmailAddress> GetRooms(EmailAddress emailAddress)
// {
// EwsUtilities.ValidateParam(emailAddress, "emailAddress");
//
// GetRoomsRequest request = new GetRoomsRequest(this);
//
// request.RoomList = emailAddress;
//
// return request.Execute().Rooms;
// }
/// <summary>
/// Retrieves a collection of all Conversations in the specified Folder.
/// </summary>
/// <param name="view">The view controlling the number of conversations returned.</param>
/// <param name="folderId">The Id of the folder in which to search for conversations.</param>
/// <returns>Collection of conversations.</returns>
//ICollection<Conversation> FindConversation(ViewBase view, FolderId folderId)
// {
// EwsUtilities.ValidateParam(view, "view");
// EwsUtilities.ValidateParam(folderId, "folderId");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2010_SP1,
// "FindConversation");
//
// FindConversationRequest request = new FindConversationRequest(this);
//
// request.View = view;
// request.FolderId = new FolderIdWrapper(folderId);
//
// return request.Execute().Conversations;
// }
/// <summary>
/// Retrieves a collection of all Conversations in the specified Folder.
/// </summary>
/// <param name="view">The view controlling the number of conversations returned.</param>
/// <param name="folderId">The Id of the folder in which to search for conversations.</param>
/// <param name="anchorMailbox">The anchorMailbox Smtp address to route the request directly to group mailbox.</param>
/// <returns>Collection of conversations.</returns>
/// <remarks>
/// This API designed to be used primarily in groups scenarios where we want to set the
/// anchor mailbox header so that request is routed directly to the group mailbox backend server.
/// </remarks>
//Collection<Conversation> FindGroupConversation(
// ViewBase view,
// FolderId folderId,
// string anchorMailbox)
// {
// EwsUtilities.ValidateParam(view, "view");
// EwsUtilities.ValidateParam(folderId, "folderId");
// EwsUtilities.ValidateParam(anchorMailbox, "anchorMailbox");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2015,
// "FindConversation");
//
// FindConversationRequest request = new FindConversationRequest(this);
//
// request.View = view;
// request.FolderId = new FolderIdWrapper(folderId);
// request.AnchorMailbox = anchorMailbox;
//
// return request.Execute().Conversations;
// }
/// <summary>
/// Retrieves a collection of all Conversations in the specified Folder.
/// </summary>
/// <param name="view">The view controlling the number of conversations returned.</param>
/// <param name="folderId">The Id of the folder in which to search for conversations.</param>
/// <param name="queryString">The query string for which the search is being performed</param>
/// <returns>Collection of conversations.</returns>
//ICollection<Conversation> FindConversation(ViewBase view, FolderId folderId, string queryString)
// {
// EwsUtilities.ValidateParam(view, "view");
// EwsUtilities.ValidateParamAllowNull(queryString, "queryString");
// EwsUtilities.ValidateParam(folderId, "folderId");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2013, // This method is only applicable for Exchange2013
// "FindConversation");
//
// FindConversationRequest request = new FindConversationRequest(this);
//
// request.View = view;
// request.FolderId = new FolderIdWrapper(folderId);
// request.QueryString = queryString;
//
// return request.Execute().Conversations;
// }
/// <summary>
/// Searches for and retrieves a collection of Conversations in the specified Folder.
/// Along with conversations, a list of highlight terms are returned.
/// </summary>
/// <param name="view">The view controlling the number of conversations returned.</param>
/// <param name="folderId">The Id of the folder in which to search for conversations.</param>
/// <param name="queryString">The query string for which the search is being performed</param>
/// <param name="returnHighlightTerms">Flag indicating if highlight terms should be returned in the response</param>
/// <returns>FindConversation results.</returns>
//FindConversationResults FindConversation(ViewBase view, FolderId folderId, string queryString, bool returnHighlightTerms)
// {
// EwsUtilities.ValidateParam(view, "view");
// EwsUtilities.ValidateParamAllowNull(queryString, "queryString");
// EwsUtilities.ValidateParam(returnHighlightTerms, "returnHighlightTerms");
// EwsUtilities.ValidateParam(folderId, "folderId");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2013, // This method is only applicable for Exchange2013
// "FindConversation");
//
// FindConversationRequest request = new FindConversationRequest(this);
//
// request.View = view;
// request.FolderId = new FolderIdWrapper(folderId);
// request.QueryString = queryString;
// request.ReturnHighlightTerms = returnHighlightTerms;
//
// return request.Execute().Results;
// }
/// <summary>
/// Searches for and retrieves a collection of Conversations in the specified Folder.
/// Along with conversations, a list of highlight terms are returned.
/// </summary>
/// <param name="view">The view controlling the number of conversations returned.</param>
/// <param name="folderId">The Id of the folder in which to search for conversations.</param>
/// <param name="queryString">The query string for which the search is being performed</param>
/// <param name="returnHighlightTerms">Flag indicating if highlight terms should be returned in the response</param>
/// <param name="mailboxScope">The mailbox scope to reference.</param>
/// <returns>FindConversation results.</returns>
//FindConversationResults FindConversation(ViewBase view, FolderId folderId, string queryString, bool returnHighlightTerms, MailboxSearchLocation? mailboxScope)
// {
// EwsUtilities.ValidateParam(view, "view");
// EwsUtilities.ValidateParamAllowNull(queryString, "queryString");
// EwsUtilities.ValidateParam(returnHighlightTerms, "returnHighlightTerms");
// EwsUtilities.ValidateParam(folderId, "folderId");
//
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2013, // This method is only applicable for Exchange2013
// "FindConversation");
//
// FindConversationRequest request = new FindConversationRequest(this);
//
// request.View = view;
// request.FolderId = new FolderIdWrapper(folderId);
// request.QueryString = queryString;
// request.ReturnHighlightTerms = returnHighlightTerms;
// request.MailboxScope = mailboxScope;
//
// return request.Execute().Results;
// }
/// <summary>
/// Gets the items for a set of conversations.
/// </summary>
/// <param name="conversations">Conversations with items to load.</param>
/// <param name="propertySet">The set of properties to load.</param>
/// <param name="foldersToIgnore">The folders to ignore.</param>
/// <param name="sortOrder">Sort order of conversation tree nodes.</param>
/// <param name="mailboxScope">The mailbox scope to reference.</param>
/// <param name="anchorMailbox">The smtpaddress of the mailbox that hosts the conversations</param>
/// <param name="maxItemsToReturn">Maximum number of items to return.</param>
/// <param name="errorHandling">What type of error handling should be performed.</param>
/// <returns>GetConversationItems response.</returns>
// ServiceResponseCollection<GetConversationItemsResponse> InternalGetConversationItems(
// Iterable<ConversationRequest> conversations,
// PropertySet propertySet,
// Iterable<FolderId> foldersToIgnore,
// ConversationSortOrder? sortOrder,
// MailboxSearchLocation? mailboxScope,
// int? maxItemsToReturn,
// string anchorMailbox,
// ServiceErrorHandling errorHandling)
// {
// EwsUtilities.ValidateParam(conversations, "conversations");
// EwsUtilities.ValidateParam(propertySet, "itemProperties");
// EwsUtilities.ValidateParamAllowNull(foldersToIgnore, "foldersToIgnore");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2013,
// "GetConversationItems");
//
// GetConversationItemsRequest request = new GetConversationItemsRequest(this, errorHandling);
// request.ItemProperties = propertySet;
// request.FoldersToIgnore = new FolderIdCollection(foldersToIgnore);
// request.SortOrder = sortOrder;
// request.MailboxScope = mailboxScope;
// request.MaxItemsToReturn = maxItemsToReturn;
// request.AnchorMailbox = anchorMailbox;
// request.Conversations = conversations.ToList();
//
// return request.Execute();
// }
/// <summary>
/// Gets the items for a set of conversations.
/// </summary>
/// <param name="conversations">Conversations with items to load.</param>
/// <param name="propertySet">The set of properties to load.</param>
/// <param name="foldersToIgnore">The folders to ignore.</param>
/// <param name="sortOrder">Conversation item sort order.</param>
/// <returns>GetConversationItems response.</returns>
//ServiceResponseCollection<GetConversationItemsResponse> GetConversationItems(
// Iterable<ConversationRequest> conversations,
// PropertySet propertySet,
// Iterable<FolderId> foldersToIgnore,
// ConversationSortOrder? sortOrder)
// {
// return this.InternalGetConversationItems(
// conversations,
// propertySet,
// foldersToIgnore,
// null, /* sortOrder */
// null, /* mailboxScope */
// null, /* maxItemsToReturn*/
// null, /* anchorMailbox */
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Gets the items for a conversation.
/// </summary>
/// <param name="conversationId">The conversation id.</param>
/// <param name="propertySet">The set of properties to load.</param>
/// <param name="syncState">The optional sync state representing the point in time when to start the synchronization.</param>
/// <param name="foldersToIgnore">The folders to ignore.</param>
/// <param name="sortOrder">Conversation item sort order.</param>
/// <returns>ConversationResponseType response.</returns>
//ConversationResponse GetConversationItems(
// ConversationId conversationId,
// PropertySet propertySet,
// string syncState,
// Iterable<FolderId> foldersToIgnore,
// ConversationSortOrder? sortOrder)
// {
// List<ConversationRequest> conversations = <ConversationRequest> [];
// conversations.Add(new ConversationRequest(conversationId, syncState));
//
// return this.InternalGetConversationItems(
// conversations,
// propertySet,
// foldersToIgnore,
// sortOrder,
// null, /* mailboxScope */
// null, /* maxItemsToReturn */
// null, /* anchorMailbox */
// ServiceErrorHandling.ThrowOnError)[0].Conversation;
// }
/// <summary>
/// Gets the items for a conversation.
/// </summary>
/// <param name="conversationId">The conversation id.</param>
/// <param name="propertySet">The set of properties to load.</param>
/// <param name="syncState">The optional sync state representing the point in time when to start the synchronization.</param>
/// <param name="foldersToIgnore">The folders to ignore.</param>
/// <param name="sortOrder">Conversation item sort order.</param>
/// <param name="anchorMailbox">The smtp address of the mailbox hosting the conversations</param>
/// <returns>ConversationResponseType response.</returns>
/// <remarks>
/// This API designed to be used primarily in groups scenarios where we want to set the
/// anchor mailbox header so that request is routed directly to the group mailbox backend server.
/// </remarks>
//ConversationResponse GetGroupConversationItems(
// ConversationId conversationId,
// PropertySet propertySet,
// string syncState,
// Iterable<FolderId> foldersToIgnore,
// ConversationSortOrder? sortOrder,
// string anchorMailbox)
// {
// EwsUtilities.ValidateParam(anchorMailbox, "anchorMailbox");
//
// List<ConversationRequest> conversations = <ConversationRequest> [];
// conversations.Add(new ConversationRequest(conversationId, syncState));
//
// return this.InternalGetConversationItems(
// conversations,
// propertySet,
// foldersToIgnore,
// sortOrder,
// null, /* mailboxScope */
// null, /* maxItemsToReturn */
// anchorMailbox, /* anchorMailbox */
// ServiceErrorHandling.ThrowOnError)[0].Conversation;
// }
/// <summary>
/// Gets the items for a set of conversations.
/// </summary>
/// <param name="conversations">Conversations with items to load.</param>
/// <param name="propertySet">The set of properties to load.</param>
/// <param name="foldersToIgnore">The folders to ignore.</param>
/// <param name="sortOrder">Conversation item sort order.</param>
/// <param name="mailboxScope">The mailbox scope to reference.</param>
/// <returns>GetConversationItems response.</returns>
//ServiceResponseCollection<GetConversationItemsResponse> GetConversationItems(
// Iterable<ConversationRequest> conversations,
// PropertySet propertySet,
// Iterable<FolderId> foldersToIgnore,
// ConversationSortOrder? sortOrder,
// MailboxSearchLocation? mailboxScope)
// {
// return this.InternalGetConversationItems(
// conversations,
// propertySet,
// foldersToIgnore,
// null, /* sortOrder */
// mailboxScope,
// null, /* maxItemsToReturn*/
// null, /* anchorMailbox */
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Applies ConversationAction on the specified conversation.
/// </summary>
/// <param name="actionType">ConversationAction</param>
/// <param name="conversationIds">The conversation ids.</param>
/// <param name="processRightAway">True to process at once . This is blocking
/// and false to let the Assistant process it in the back ground</param>
/// <param name="categories">Catgories that need to be stamped can be null or empty</param>
/// <param name="enableAlwaysDelete">True moves every current and future messages in the conversation
/// to deleted items folder. False stops the alwasy delete action. This is applicable only if
/// the action is AlwaysDelete</param>
/// <param name="destinationFolderId">Applicable if the action is AlwaysMove. This moves every current message and future
/// message in the conversation to the specified folder. Can be null if tis is then it stops
/// the always move action</param>
/// <param name="errorHandlingMode">The error handling mode.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> ApplyConversationAction(
// ConversationActionType actionType,
// Iterable<ConversationId> conversationIds,
// bool processRightAway,
// StringList categories,
// bool enableAlwaysDelete,
// FolderId destinationFolderId,
// ServiceErrorHandling errorHandlingMode)
// {
// EwsUtilities.Assert(
// actionType == ConversationActionType.AlwaysCategorize ||
// actionType == ConversationActionType.AlwaysMove ||
// actionType == ConversationActionType.AlwaysDelete,
// "ApplyConversationAction",
// "Invalid actionType");
//
// EwsUtilities.ValidateParam(conversationIds, "conversationId");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2010_SP1,
// "ApplyConversationAction");
//
// ApplyConversationActionRequest request = new ApplyConversationActionRequest(this, errorHandlingMode);
//
// for (var conversationId in conversationIds)
// {
// ConversationAction action = new ConversationAction();
//
// action.Action = actionType;
// action.ConversationId = conversationId;
// action.ProcessRightAway = processRightAway;
// action.Categories = categories;
// action.EnableAlwaysDelete = enableAlwaysDelete;
// action.DestinationFolderId = destinationFolderId != null ? new FolderIdWrapper(destinationFolderId) : null;
//
// request.ConversationActions.Add(action);
// }
//
// return request.Execute();
// }
/// <summary>
/// Applies one time conversation action on items in specified folder inside
/// the conversation.
/// </summary>
/// <param name="actionType">The action.</param>
/// <param name="idTimePairs">The id time pairs.</param>
/// <param name="contextFolderId">The context folder id.</param>
/// <param name="destinationFolderId">The destination folder id.</param>
/// <param name="deleteType">Type of the delete.</param>
/// <param name="isRead">The is read.</param>
/// <param name="retentionPolicyType">Retention policy type.</param>
/// <param name="retentionPolicyTagId">Retention policy tag id. Null will clear the policy.</param>
/// <param name="flag">Flag status.</param>
/// <param name="suppressReadReceipts">Suppress read receipts flag.</param>
/// <param name="errorHandlingMode">The error handling mode.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> ApplyConversationOneTimeAction(
// ConversationActionType actionType,
// Iterable<MapEntry<ConversationId, DateTime?>> idTimePairs,
// FolderId contextFolderId,
// FolderId destinationFolderId,
// DeleteMode? deleteType,
// bool? isRead,
// RetentionType? retentionPolicyType,
// Guid? retentionPolicyTagId,
// Flag flag,
// bool? suppressReadReceipts,
// ServiceErrorHandling errorHandlingMode)
// {
// EwsUtilities.Assert(
// actionType == ConversationActionType.Move ||
// actionType == ConversationActionType.Delete ||
// actionType == ConversationActionType.SetReadState ||
// actionType == ConversationActionType.SetRetentionPolicy ||
// actionType == ConversationActionType.Copy ||
// actionType == ConversationActionType.Flag,
// "ApplyConversationOneTimeAction",
// "Invalid actionType");
//
// EwsUtilities.ValidateParamCollection(idTimePairs, "idTimePairs");
// EwsUtilities.ValidateMethodVersion(
// this,
// ExchangeVersion.Exchange2010_SP1,
// "ApplyConversationAction");
//
// ApplyConversationActionRequest request = new ApplyConversationActionRequest(this, errorHandlingMode);
//
// for (var idTimePair in idTimePairs)
// {
// ConversationAction action = new ConversationAction();
//
// action.Action = actionType;
// action.ConversationId = idTimePair.Key;
// action.ContextFolderId = contextFolderId != null ? new FolderIdWrapper(contextFolderId) : null;
// action.DestinationFolderId = destinationFolderId != null ? new FolderIdWrapper(destinationFolderId) : null;
// action.ConversationLastSyncTime = idTimePair.Value;
// action.IsRead = isRead;
// action.DeleteType = deleteType;
// action.RetentionPolicyType = retentionPolicyType;
// action.RetentionPolicyTagId = retentionPolicyTagId;
// action.Flag = flag;
// action.SuppressReadReceipts = suppressReadReceipts;
//
// request.ConversationActions.Add(action);
// }
//
// return request.Execute();
// }
/// <summary>
/// Sets up a conversation so that any item received within that conversation is always categorized.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="conversationId">The id of the conversation.</param>
/// <param name="categories">The categories that should be stamped on items in the conversation.</param>
/// <param name="processSynchronously">Indicates whether the method should return only once enabling this rule and stamping existing items
/// in the conversation is completely done. If processSynchronously is false, the method returns immediately.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> EnableAlwaysCategorizeItemsInConversations(
// Iterable<ConversationId> conversationId,
// Iterable<String> categories,
// bool processSynchronously)
// {
// EwsUtilities.ValidateParamCollection(categories, "categories");
// return this.ApplyConversationAction(
// ConversationActionType.AlwaysCategorize,
// conversationId,
// processSynchronously,
// new StringList(categories),
// false,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets up a conversation so that any item received within that conversation is no longer categorized.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="conversationId">The id of the conversation.</param>
/// <param name="processSynchronously">Indicates whether the method should return only once disabling this rule and removing the categories from existing items
/// in the conversation is completely done. If processSynchronously is false, the method returns immediately.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> DisableAlwaysCategorizeItemsInConversations(
// Iterable<ConversationId> conversationId,
// bool processSynchronously)
// {
// return this.ApplyConversationAction(
// ConversationActionType.AlwaysCategorize,
// conversationId,
// processSynchronously,
// null,
// false,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets up a conversation so that any item received within that conversation is always moved to Deleted Items folder.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="conversationId">The id of the conversation.</param>
/// <param name="processSynchronously">Indicates whether the method should return only once enabling this rule and deleting existing items
/// in the conversation is completely done. If processSynchronously is false, the method returns immediately.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> EnableAlwaysDeleteItemsInConversations(
// Iterable<ConversationId> conversationId,
// bool processSynchronously)
// {
// return this.ApplyConversationAction(
// ConversationActionType.AlwaysDelete,
// conversationId,
// processSynchronously,
// null,
// true,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets up a conversation so that any item received within that conversation is no longer moved to Deleted Items folder.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="conversationId">The id of the conversation.</param>
/// <param name="processSynchronously">Indicates whether the method should return only once disabling this rule and restoring the items
/// in the conversation is completely done. If processSynchronously is false, the method returns immediately.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> DisableAlwaysDeleteItemsInConversations(
// Iterable<ConversationId> conversationId,
// bool processSynchronously)
// {
// return this.ApplyConversationAction(
// ConversationActionType.AlwaysDelete,
// conversationId,
// processSynchronously,
// null,
// false,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets up a conversation so that any item received within that conversation is always moved to a specific folder.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="conversationId">The id of the conversation.</param>
/// <param name="destinationFolderId">The Id of the folder to which conversation items should be moved.</param>
/// <param name="processSynchronously">Indicates whether the method should return only once enabling this rule and moving existing items
/// in the conversation is completely done. If processSynchronously is false, the method returns immediately.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> EnableAlwaysMoveItemsInConversations(
// Iterable<ConversationId> conversationId,
// FolderId destinationFolderId,
// bool processSynchronously)
// {
// EwsUtilities.ValidateParam(destinationFolderId, "destinationFolderId");
// return this.ApplyConversationAction(
// ConversationActionType.AlwaysMove,
// conversationId,
// processSynchronously,
// null,
// false,
// destinationFolderId,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets up a conversation so that any item received within that conversation is no longer moved to a specific folder.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="conversationIds">The conversation ids.</param>
/// <param name="processSynchronously">Indicates whether the method should return only once disabling this rule is completely done.
/// If processSynchronously is false, the method returns immediately.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> DisableAlwaysMoveItemsInConversations(
// Iterable<ConversationId> conversationIds,
// bool processSynchronously)
// {
// return this.ApplyConversationAction(
// ConversationActionType.AlwaysMove,
// conversationIds,
// processSynchronously,
// null,
// false,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Moves the items in the specified conversation to the specified destination folder.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should be moved and the dateTime conversation was last synced
/// (Items received after that dateTime will not be moved).</param>
/// <param name="contextFolderId">The Id of the folder that contains the conversation.</param>
/// <param name="destinationFolderId">The Id of the destination folder.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> MoveItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// FolderId destinationFolderId)
// {
// EwsUtilities.ValidateParam(destinationFolderId, "destinationFolderId");
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.Move,
// idLastSyncTimePairs,
// contextFolderId,
// destinationFolderId,
// null,
// null,
// null,
// null,
// null,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Copies the items in the specified conversation to the specified destination folder.
/// Calling this method results in a call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should be copied and the date and time conversation was last synced
/// (Items received after that date will not be copied).</param>
/// <param name="contextFolderId">The context folder id.</param>
/// <param name="destinationFolderId">The destination folder id.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> CopyItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// FolderId destinationFolderId)
// {
// EwsUtilities.ValidateParam(destinationFolderId, "destinationFolderId");
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.Copy,
// idLastSyncTimePairs,
// contextFolderId,
// destinationFolderId,
// null,
// null,
// null,
// null,
// null,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Deletes the items in the specified conversation. Calling this method results in a call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should be deleted and the date and time conversation was last synced
/// (Items received after that date will not be deleted).</param>
/// <param name="contextFolderId">The Id of the folder that contains the conversation.</param>
/// <param name="deleteMode">The deletion mode.</param>
/// <returns></returns>
//ServiceResponseCollection<ServiceResponse> DeleteItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// DeleteMode deleteMode)
// {
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.Delete,
// idLastSyncTimePairs,
// contextFolderId,
// null,
// deleteMode,
// null,
// null,
// null,
// null,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets the read state for items in conversation. Calling this method would
/// result in call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should have their read state set and the date and time conversation
/// was last synced (Items received after that date will not have their read
/// state set).</param>
/// <param name="contextFolderId">The Id of the folder that contains the conversation.</param>
/// <param name="isRead">if set to <c>true</c>, conversation items are marked as read; otherwise they are marked as unread.</param>
//ServiceResponseCollection<ServiceResponse> SetReadStateForItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// bool isRead)
// {
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.SetReadState,
// idLastSyncTimePairs,
// contextFolderId,
// null,
// null,
// isRead,
// null,
// null,
// null,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets the read state for items in conversation. Calling this method would
/// result in call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should have their read state set and the date and time conversation
/// was last synced (Items received after that date will not have their read
/// state set).</param>
/// <param name="contextFolderId">The Id of the folder that contains the conversation.</param>
/// <param name="isRead">if set to <c>true</c>, conversation items are marked as read; otherwise they are marked as unread.</param>
/// <param name="suppressReadReceipts">if set to <c>true</c> read receipts are suppressed.</param>
//ServiceResponseCollection<ServiceResponse> SetReadStateForItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// bool isRead,
// bool suppressReadReceipts)
// {
// EwsUtilities.ValidateMethodVersion(this, ExchangeVersion.Exchange2013, "SetReadStateForItemsInConversations");
//
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.SetReadState,
// idLastSyncTimePairs,
// contextFolderId,
// null,
// null,
// isRead,
// null,
// null,
// null,
// suppressReadReceipts,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets the retention policy for items in conversation. Calling this method would
/// result in call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should have their retention policy set and the date and time conversation
/// was last synced (Items received after that date will not have their retention
/// policy set).</param>
/// <param name="contextFolderId">The Id of the folder that contains the conversation.</param>
/// <param name="retentionPolicyType">Retention policy type.</param>
/// <param name="retentionPolicyTagId">Retention policy tag id. Null will clear the policy.</param>
//ServiceResponseCollection<ServiceResponse> SetRetentionPolicyForItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// RetentionType retentionPolicyType,
// Guid? retentionPolicyTagId)
// {
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.SetRetentionPolicy,
// idLastSyncTimePairs,
// contextFolderId,
// null,
// null,
// null,
// retentionPolicyType,
// retentionPolicyTagId,
// null,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Sets flag status for items in conversation. Calling this method would result in call to EWS.
/// </summary>
/// <param name="idLastSyncTimePairs">The pairs of Id of conversation whose
/// items should have their read state set and the date and time conversation
/// was last synced (Items received after that date will not have their read
/// state set).</param>
/// <param name="contextFolderId">The Id of the folder that contains the conversation.</param>
/// <param name="flagStatus">Flag status to apply to conversation items.</param>
//ServiceResponseCollection<ServiceResponse> SetFlagStatusForItemsInConversations(
// Iterable<MapEntry<ConversationId, DateTime?>> idLastSyncTimePairs,
// FolderId contextFolderId,
// Flag flagStatus)
// {
// EwsUtilities.ValidateMethodVersion(this, ExchangeVersion.Exchange2013, "SetFlagStatusForItemsInConversations");
//
// return this.ApplyConversationOneTimeAction(
// ConversationActionType.Flag,
// idLastSyncTimePairs,
// contextFolderId,
// null,
// null,
// null,
// null,
// null,
// flagStatus,
// null,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Converts multiple Ids from one format to another in a single call to EWS.
/// </summary>
/// <param name="ids">The Ids to convert.</param>
/// <param name="destinationFormat">The destination format.</param>
/// <param name="errorHandling">Type of error handling to perform.</param>
/// <returns>A ServiceResponseCollection providing conversion results for each specified Ids.</returns>
//ServiceResponseCollection<ConvertIdResponse> InternalConvertIds(
// Iterable<AlternateIdBase> ids,
// IdFormat destinationFormat,
// ServiceErrorHandling errorHandling)
// {
// EwsUtilities.ValidateParamCollection(ids, "ids");
//
// ConvertIdRequest request = new ConvertIdRequest(this, errorHandling);
//
// request.Ids.AddRange(ids);
// request.DestinationFormat = destinationFormat;
//
// return request.Execute();
// }
/// <summary>
/// Converts multiple Ids from one format to another in a single call to EWS.
/// </summary>
/// <param name="ids">The Ids to convert.</param>
/// <param name="destinationFormat">The destination format.</param>
/// <returns>A ServiceResponseCollection providing conversion results for each specified Ids.</returns>
//ServiceResponseCollection<ConvertIdResponse> ConvertIds(Iterable<AlternateIdBase> ids, IdFormat destinationFormat)
// {
// EwsUtilities.ValidateParamCollection(ids, "ids");
//
// return this.InternalConvertIds(
// ids,
// destinationFormat,
// ServiceErrorHandling.ReturnErrors);
// }
/// <summary>
/// Converts Id from one format to another in a single call to EWS.
/// </summary>
/// <param name="id">The Id to convert.</param>
/// <param name="destinationFormat">The destination format.</param>
/// <returns>The converted Id.</returns>
//AlternateIdBase ConvertId(AlternateIdBase id, IdFormat destinationFormat)
// {
// EwsUtilities.ValidateParam(id, "id");
//
// ServiceResponseCollection<ConvertIdResponse> responses = this.InternalConvertIds(
// new AlternateIdBase[] { id },
// destinationFormat,
// ServiceErrorHandling.ThrowOnError);
//
// return responses[0].ConvertedId;
// }
/// <summary>
/// Adds delegates to a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to add delegates to.</param>
/// <param name="meetingRequestsDeliveryScope">Indicates how meeting requests should be sent to delegates.</param>
/// <param name="delegateUsers">The delegate users to add.</param>
/// <returns>A collection of DelegateUserResponse objects providing the results of the operation.</returns>
//Collection<DelegateUserResponse> AddDelegates(
// Mailbox mailbox,
// MeetingRequestsDeliveryScope? meetingRequestsDeliveryScope,
// params DelegateUser[] delegateUsers)
// {
// return this.AddDelegates(
// mailbox,
// meetingRequestsDeliveryScope,
// (Iterable<DelegateUser>)delegateUsers);
// }
/// <summary>
/// Adds delegates to a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to add delegates to.</param>
/// <param name="meetingRequestsDeliveryScope">Indicates how meeting requests should be sent to delegates.</param>
/// <param name="delegateUsers">The delegate users to add.</param>
/// <returns>A collection of DelegateUserResponse objects providing the results of the operation.</returns>
//Collection<DelegateUserResponse> AddDelegates(
// Mailbox mailbox,
// MeetingRequestsDeliveryScope? meetingRequestsDeliveryScope,
// Iterable<DelegateUser> delegateUsers)
// {
// EwsUtilities.ValidateParam(mailbox, "mailbox");
// EwsUtilities.ValidateParamCollection(delegateUsers, "delegateUsers");
//
// AddDelegateRequest request = new AddDelegateRequest(this);
//
// request.Mailbox = mailbox;
// request.DelegateUsers.AddRange(delegateUsers);
// request.MeetingRequestsDeliveryScope = meetingRequestsDeliveryScope;
//
// DelegateManagementResponse response = request.Execute();
// return response.DelegateUserResponses;
// }
/// <summary>
/// Updates delegates on a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to update delegates on.</param>
/// <param name="meetingRequestsDeliveryScope">Indicates how meeting requests should be sent to delegates.</param>
/// <param name="delegateUsers">The delegate users to update.</param>
/// <returns>A collection of DelegateUserResponse objects providing the results of the operation.</returns>
//Collection<DelegateUserResponse> UpdateDelegates(
// Mailbox mailbox,
// MeetingRequestsDeliveryScope? meetingRequestsDeliveryScope,
// params DelegateUser[] delegateUsers)
// {
// return this.UpdateDelegates(
// mailbox,
// meetingRequestsDeliveryScope,
// (Iterable<DelegateUser>)delegateUsers);
// }
/// <summary>
/// Updates delegates on a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to update delegates on.</param>
/// <param name="meetingRequestsDeliveryScope">Indicates how meeting requests should be sent to delegates.</param>
/// <param name="delegateUsers">The delegate users to update.</param>
/// <returns>A collection of DelegateUserResponse objects providing the results of the operation.</returns>
//Collection<DelegateUserResponse> UpdateDelegates(
// Mailbox mailbox,
// MeetingRequestsDeliveryScope? meetingRequestsDeliveryScope,
// Iterable<DelegateUser> delegateUsers)
// {
// EwsUtilities.ValidateParam(mailbox, "mailbox");
// EwsUtilities.ValidateParamCollection(delegateUsers, "delegateUsers");
//
// UpdateDelegateRequest request = new UpdateDelegateRequest(this);
//
// request.Mailbox = mailbox;
// request.DelegateUsers.AddRange(delegateUsers);
// request.MeetingRequestsDeliveryScope = meetingRequestsDeliveryScope;
//
// DelegateManagementResponse response = request.Execute();
// return response.DelegateUserResponses;
// }
/// <summary>
/// Removes delegates on a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to remove delegates from.</param>
/// <param name="userIds">The Ids of the delegate users to remove.</param>
/// <returns>A collection of DelegateUserResponse objects providing the results of the operation.</returns>
//Collection<DelegateUserResponse> RemoveDelegates(Mailbox mailbox, params UserId[] userIds)
// {
// return this.RemoveDelegates(mailbox, (Iterable<UserId>)userIds);
// }
/// <summary>
/// Removes delegates on a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to remove delegates from.</param>
/// <param name="userIds">The Ids of the delegate users to remove.</param>
/// <returns>A collection of DelegateUserResponse objects providing the results of the operation.</returns>
//Collection<DelegateUserResponse> RemoveDelegates(Mailbox mailbox, Iterable<UserId> userIds)
// {
// EwsUtilities.ValidateParam(mailbox, "mailbox");
// EwsUtilities.ValidateParamCollection(userIds, "userIds");
//
// RemoveDelegateRequest request = new RemoveDelegateRequest(this);
//
// request.Mailbox = mailbox;
// request.UserIds.AddRange(userIds);
//
// DelegateManagementResponse response = request.Execute();
// return response.DelegateUserResponses;
// }
/// <summary>
/// Retrieves the delegates of a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to retrieve the delegates of.</param>
/// <param name="includePermissions">Indicates whether detailed permissions should be returned fro each delegate.</param>
/// <param name="userIds">The optional Ids of the delegate users to retrieve.</param>
/// <returns>A GetDelegateResponse providing the results of the operation.</returns>
//DelegateInformation GetDelegates(
// Mailbox mailbox,
// bool includePermissions,
// params UserId[] userIds)
// {
// return this.GetDelegates(
// mailbox,
// includePermissions,
// (Iterable<UserId>)userIds);
// }
/// <summary>
/// Retrieves the delegates of a specific mailbox. Calling this method results in a call to EWS.
/// </summary>
/// <param name="mailbox">The mailbox to retrieve the delegates of.</param>
/// <param name="includePermissions">Indicates whether detailed permissions should be returned fro each delegate.</param>
/// <param name="userIds">The optional Ids of the delegate users to retrieve.</param>
/// <returns>A GetDelegateResponse providing the results of the operation.</returns>
//DelegateInformation GetDelegates(
// Mailbox mailbox,
// bool includePermissions,
// Iterable<UserId> userIds)
// {
// EwsUtilities.ValidateParam(mailbox, "mailbox");
//
// GetDelegateRequest request = new GetDelegateRequest(this);
//
// request.Mailbox = mailbox;
// request.UserIds.AddRange(userIds);
// request.IncludePermissions = includePermissions;
//
// GetDelegateResponse response = request.Execute();
// DelegateInformation delegateInformation = new DelegateInformation(
// response.DelegateUserResponses,
// response.MeetingRequestsDeliveryScope);
//
// return delegateInformation;
// }
/// <summary>
/// Creates a UserConfiguration.
/// </summary>
/// <param name="userConfiguration">The UserConfiguration.</param>
// void CreateUserConfiguration(UserConfiguration userConfiguration)
// {
// EwsUtilities.ValidateParam(userConfiguration, "userConfiguration");
//
// CreateUserConfigurationRequest request = new CreateUserConfigurationRequest(this);
//
// request.UserConfiguration = userConfiguration;
//
// request.Execute();
// }
/// <summary>
/// Deletes a UserConfiguration.
/// </summary>
/// <param name="name">Name of the UserConfiguration to retrieve.</param>
/// <param name="parentFolderId">Id of the folder containing the UserConfiguration.</param>
// void DeleteUserConfiguration(string name, FolderId parentFolderId)
// {
// EwsUtilities.ValidateParam(name, "name");
// EwsUtilities.ValidateParam(parentFolderId, "parentFolderId");
//
// DeleteUserConfigurationRequest request = new DeleteUserConfigurationRequest(this);
//
// request.Name = name;
// request.ParentFolderId = parentFolderId;
//
// request.Execute();
// }
/// <summary>
/// Gets a UserConfiguration.
/// </summary>
/// <param name="name">Name of the UserConfiguration to retrieve.</param>
/// <param name="parentFolderId">Id of the folder containing the UserConfiguration.</param>
/// <param name="properties">Properties to retrieve.</param>
/// <returns>A UserConfiguration.</returns>
// UserConfiguration GetUserConfiguration(
// string name,
// FolderId parentFolderId,
// UserConfigurationProperties properties)
// {
// EwsUtilities.ValidateParam(name, "name");
// EwsUtilities.ValidateParam(parentFolderId, "parentFolderId");
//
// GetUserConfigurationRequest request = new GetUserConfigurationRequest(this);
//
// request.Name = name;
// request.ParentFolderId = parentFolderId;
// request.Properties = properties;
//
// return request.Execute()[0].UserConfiguration;
// }
/// <summary>
/// Loads the properties of the specified userConfiguration.
/// </summary>
/// <param name="userConfiguration">The userConfiguration containing properties to load.</param>
/// <param name="properties">Properties to retrieve.</param>
// void LoadPropertiesForUserConfiguration(UserConfiguration userConfiguration, UserConfigurationProperties properties)
// {
// EwsUtilities.Assert(
// userConfiguration != null,
// "ExchangeService.LoadPropertiesForUserConfiguration",
// "userConfiguration is null");
//
// GetUserConfigurationRequest request = new GetUserConfigurationRequest(this);
//
// request.UserConfiguration = userConfiguration;
// request.Properties = properties;
//
// request.Execute();
// }
/// <summary>
/// Updates a UserConfiguration.
/// </summary>
/// <param name="userConfiguration">The UserConfiguration.</param>
// void UpdateUserConfiguration(UserConfiguration userConfiguration)
// {
// EwsUtilities.ValidateParam(userConfiguration, "userConfiguration");
//
// UpdateUserConfigurationRequest request = new UpdateUserConfigurationRequest(this);
//
// request.UserConfiguration = userConfiguration;
//
// request.Execute();
// }
/// <summary>
/// Retrieves inbox rules of the authenticated user.
/// </summary>
/// <returns>A RuleCollection object containing the authenticated user's inbox rules.</returns>
//RuleCollection GetInboxRules()
// {
// GetInboxRulesRequest request = new GetInboxRulesRequest(this);
//
// return request.Execute().Rules;
// }
/// <summary>
/// Retrieves the inbox rules of the specified user.
/// </summary>
/// <param name="mailboxSmtpAddress">The SMTP address of the user whose inbox rules should be retrieved.</param>
/// <returns>A RuleCollection object containing the inbox rules of the specified user.</returns>
//RuleCollection GetInboxRules(string mailboxSmtpAddress)
// {
// EwsUtilities.ValidateParam(mailboxSmtpAddress, "MailboxSmtpAddress");
//
// GetInboxRulesRequest request = new GetInboxRulesRequest(this);
// request.MailboxSmtpAddress = mailboxSmtpAddress;
//
// return request.Execute().Rules;
// }
/// <summary>
/// Updates the authenticated user's inbox rules by applying the specified operations.
/// </summary>
/// <param name="operations">The operations that should be applied to the user's inbox rules.</param>
/// <param name="removeOutlookRuleBlob">Indicate whether or not to remove Outlook Rule Blob.</param>
//void UpdateInboxRules(
// Iterable<RuleOperation> operations,
// bool removeOutlookRuleBlob)
// {
// UpdateInboxRulesRequest request = new UpdateInboxRulesRequest(this);
// request.InboxRuleOperations = operations;
// request.RemoveOutlookRuleBlob = removeOutlookRuleBlob;
// request.Execute();
// }
/// <summary>
/// Update the specified user's inbox rules by applying the specified operations.
/// </summary>
/// <param name="operations">The operations that should be applied to the user's inbox rules.</param>
/// <param name="removeOutlookRuleBlob">Indicate whether or not to remove Outlook Rule Blob.</param>
/// <param name="mailboxSmtpAddress">The SMTP address of the user whose inbox rules should be updated.</param>
//void UpdateInboxRules(
// Iterable<RuleOperation> operations,
// bool removeOutlookRuleBlob,
// string mailboxSmtpAddress)
// {
// UpdateInboxRulesRequest request = new UpdateInboxRulesRequest(this);
// request.InboxRuleOperations = operations;
// request.RemoveOutlookRuleBlob = removeOutlookRuleBlob;
// request.MailboxSmtpAddress = mailboxSmtpAddress;
// request.Execute();
// }
/// <summary>
/// Get dicovery search configuration
/// </summary>
/// <param name="searchId">Search Id</param>
/// <param name="expandGroupMembership">True if want to expand group membership</param>
/// <param name="inPlaceHoldConfigurationOnly">True if only want the inplacehold configuration</param>
/// <returns>Service response object</returns>
//GetDiscoverySearchConfigurationResponse GetDiscoverySearchConfiguration(string searchId, bool expandGroupMembership, bool inPlaceHoldConfigurationOnly)
// {
// GetDiscoverySearchConfigurationRequest request = new GetDiscoverySearchConfigurationRequest(this);
// request.SearchId = searchId;
// request.ExpandGroupMembership = expandGroupMembership;
// request.InPlaceHoldConfigurationOnly = inPlaceHoldConfigurationOnly;
//
// return request.Execute();
// }
/// <summary>
/// Get searchable mailboxes
/// </summary>
/// <param name="searchFilter">Search filter</param>
/// <param name="expandGroupMembership">True if want to expand group membership</param>
/// <returns>Service response object</returns>
//GetSearchableMailboxesResponse GetSearchableMailboxes(string searchFilter, bool expandGroupMembership)
// {
// GetSearchableMailboxesRequest request = new GetSearchableMailboxesRequest(this);
// request.SearchFilter = searchFilter;
// request.ExpandGroupMembership = expandGroupMembership;
//
// return request.Execute();
// }
/// <summary>
/// Search mailboxes
/// </summary>
/// <param name="mailboxQueries">Collection of query and mailboxes</param>
/// <param name="resultType">Search result type</param>
/// <returns>Collection of search mailboxes response object</returns>
//ServiceResponseCollection<SearchMailboxesResponse> SearchMailboxes(Iterable<MailboxQuery> mailboxQueries, SearchResultType resultType)
// {
// SearchMailboxesRequest request = new SearchMailboxesRequest(this, ServiceErrorHandling.ReturnErrors);
// if (mailboxQueries != null)
// {
// request.SearchQueries.AddRange(mailboxQueries);
// }
//
// request.ResultType = resultType;
//
// return request.Execute();
// }
/// <summary>
/// Search mailboxes
/// </summary>
/// <param name="mailboxQueries">Collection of query and mailboxes</param>
/// <param name="resultType">Search result type</param>
/// <param name="sortByProperty">Sort by property name</param>
/// <param name="sortOrder">Sort order</param>
/// <param name="pageSize">Page size</param>
/// <param name="pageDirection">Page navigation direction</param>
/// <param name="pageItemReference">Item reference used for paging</param>
/// <returns>Collection of search mailboxes response object</returns>
//ServiceResponseCollection<SearchMailboxesResponse> SearchMailboxes(
// Iterable<MailboxQuery> mailboxQueries,
// SearchResultType resultType,
// string sortByProperty,
// SortDirection sortOrder,
// int pageSize,
// SearchPageDirection pageDirection,
// string pageItemReference)
// {
// SearchMailboxesRequest request = new SearchMailboxesRequest(this, ServiceErrorHandling.ReturnErrors);
// if (mailboxQueries != null)
// {
// request.SearchQueries.AddRange(mailboxQueries);
// }
//
// request.ResultType = resultType;
// request.SortByProperty = sortByProperty;
// request.SortOrder = sortOrder;
// request.PageSize = pageSize;
// request.PageDirection = pageDirection;
// request.PageItemReference = pageItemReference;
//
// return request.Execute();
// }
/// <summary>
/// Search mailboxes
/// </summary>
/// <param name="searchParameters">Search mailboxes parameters</param>
/// <returns>Collection of search mailboxes response object</returns>
//ServiceResponseCollection<SearchMailboxesResponse> SearchMailboxes(SearchMailboxesParameters searchParameters)
// {
// EwsUtilities.ValidateParam(searchParameters, "searchParameters");
// EwsUtilities.ValidateParam(searchParameters.SearchQueries, "searchParameters.SearchQueries");
//
// SearchMailboxesRequest request = this.CreateSearchMailboxesRequest(searchParameters);
// return request.Execute();
// }
/// <summary>
/// Asynchronous call to search mailboxes
/// </summary>
/// <param name="callback">callback</param>
/// <param name="state">state</param>
/// <param name="searchParameters">search parameters</param>
/// <returns>Async result</returns>
//IAsyncResult BeginSearchMailboxes(
// AsyncCallback callback,
// object state,
// SearchMailboxesParameters searchParameters)
// {
// EwsUtilities.ValidateParam(searchParameters, "searchParameters");
// EwsUtilities.ValidateParam(searchParameters.SearchQueries, "searchParameters.SearchQueries");
//
// SearchMailboxesRequest request = this.CreateSearchMailboxesRequest(searchParameters);
// return request.BeginExecute(callback, state);
// }
/// <summary>
/// Asynchronous call to end search mailboxes
/// </summary>
/// <param name="asyncResult"></param>
/// <returns></returns>
//ServiceResponseCollection<SearchMailboxesResponse> EndSearchMailboxes(IAsyncResult asyncResult)
// {
// var request = AsyncRequestResult.ExtractServiceRequest<SearchMailboxesRequest>(this, asyncResult);
//
// return request.EndExecute(asyncResult);
// }
/// <summary>
/// Set hold on mailboxes
/// </summary>
/// <param name="holdId">Hold id</param>
/// <param name="actionType">Action type</param>
/// <param name="query">Query string</param>
/// <param name="mailboxes">Collection of mailboxes</param>
/// <returns>Service response object</returns>
//SetHoldOnMailboxesResponse SetHoldOnMailboxes(string holdId, HoldAction actionType, string query, string[] mailboxes)
// {
// SetHoldOnMailboxesRequest request = new SetHoldOnMailboxesRequest(this);
// request.HoldId = holdId;
// request.ActionType = actionType;
// request.Query = query;
// request.Mailboxes = mailboxes;
// request.InPlaceHoldIdentity = null;
//
// return request.Execute();
// }
/// <summary>
/// Set hold on mailboxes
/// </summary>
/// <param name="holdId">Hold id</param>
/// <param name="actionType">Action type</param>
/// <param name="query">Query string</param>
/// <param name="inPlaceHoldIdentity">in-place hold identity</param>
/// <returns>Service response object</returns>
//SetHoldOnMailboxesResponse SetHoldOnMailboxes(string holdId, HoldAction actionType, string query, string inPlaceHoldIdentity)
// {
// return this.SetHoldOnMailboxes(holdId, actionType, query, inPlaceHoldIdentity, null);
// }
/// <summary>
/// Set hold on mailboxes
/// </summary>
/// <param name="holdId">Hold id</param>
/// <param name="actionType">Action type</param>
/// <param name="query">Query string</param>
/// <param name="inPlaceHoldIdentity">in-place hold identity</param>
/// <param name="itemHoldPeriod">item hold period</param>
/// <returns>Service response object</returns>
//SetHoldOnMailboxesResponse SetHoldOnMailboxes(string holdId, HoldAction actionType, string query, string inPlaceHoldIdentity, string itemHoldPeriod)
// {
// SetHoldOnMailboxesRequest request = new SetHoldOnMailboxesRequest(this);
// request.HoldId = holdId;
// request.ActionType = actionType;
// request.Query = query;
// request.Mailboxes = null;
// request.InPlaceHoldIdentity = inPlaceHoldIdentity;
// request.ItemHoldPeriod = itemHoldPeriod;
//
// return request.Execute();
// }
/// <summary>
/// Set hold on mailboxes
/// </summary>
/// <param name="parameters">Set hold parameters</param>
/// <returns>Service response object</returns>
//SetHoldOnMailboxesResponse SetHoldOnMailboxes(SetHoldOnMailboxesParameters parameters)
// {
// EwsUtilities.ValidateParam(parameters, "parameters");
//
// SetHoldOnMailboxesRequest request = new SetHoldOnMailboxesRequest(this);
// request.HoldId = parameters.HoldId;
// request.ActionType = parameters.ActionType;
// request.Query = parameters.Query;
// request.Mailboxes = parameters.Mailboxes;
// request.Language = parameters.Language;
// request.InPlaceHoldIdentity = parameters.InPlaceHoldIdentity;
//
// return request.Execute();
// }
/// <summary>
/// Get hold on mailboxes
/// </summary>
/// <param name="holdId">Hold id</param>
/// <returns>Service response object</returns>
//GetHoldOnMailboxesResponse GetHoldOnMailboxes(string holdId)
// {
// GetHoldOnMailboxesRequest request = new GetHoldOnMailboxesRequest(this);
// request.HoldId = holdId;
//
// return request.Execute();
// }
/// <summary>
/// Get non indexable item details
/// </summary>
/// <param name="mailboxes">Array of mailbox legacy DN</param>
/// <returns>Service response object</returns>
//GetNonIndexableItemDetailsResponse GetNonIndexableItemDetails(string[] mailboxes)
// {
// return this.GetNonIndexableItemDetails(mailboxes, null, null, null);
// }
/// <summary>
/// Get non indexable item details
/// </summary>
/// <param name="mailboxes">Array of mailbox legacy DN</param>
/// <param name="pageSize">The page size</param>
/// <param name="pageItemReference">Page item reference</param>
/// <param name="pageDirection">Page direction</param>
/// <returns>Service response object</returns>
//GetNonIndexableItemDetailsResponse GetNonIndexableItemDetails(string[] mailboxes, int? pageSize, string pageItemReference, SearchPageDirection? pageDirection)
// {
// GetNonIndexableItemDetailsParameters parameters = new GetNonIndexableItemDetailsParameters
// {
// Mailboxes = mailboxes,
// PageSize = pageSize,
// PageItemReference = pageItemReference,
// PageDirection = pageDirection,
// SearchArchiveOnly = false,
// };
//
// return GetNonIndexableItemDetails(parameters);
// }
/// <summary>
/// Get non indexable item details
/// </summary>
/// <param name="parameters">Get non indexable item details parameters</param>
/// <returns>Service response object</returns>
//GetNonIndexableItemDetailsResponse GetNonIndexableItemDetails(GetNonIndexableItemDetailsParameters parameters)
// {
// GetNonIndexableItemDetailsRequest request = this.CreateGetNonIndexableItemDetailsRequest(parameters);
//
// return request.Execute();
// }
/// <summary>
/// Asynchronous call to get non indexable item details
/// </summary>
/// <param name="callback">callback</param>
/// <param name="state">state</param>
/// <param name="parameters">Get non indexable item details parameters</param>
/// <returns>Async result</returns>
//IAsyncResult BeginGetNonIndexableItemDetails(
// AsyncCallback callback,
// object state,
// GetNonIndexableItemDetailsParameters parameters)
// {
// GetNonIndexableItemDetailsRequest request = this.CreateGetNonIndexableItemDetailsRequest(parameters);
// return request.BeginExecute(callback, state);
// }
/// <summary>
/// Asynchronous call to get non indexable item details
/// </summary>
/// <param name="asyncResult"></param>
/// <returns></returns>
//GetNonIndexableItemDetailsResponse EndGetNonIndexableItemDetails(IAsyncResult asyncResult)
// {
// var request = AsyncRequestResult.ExtractServiceRequest<GetNonIndexableItemDetailsRequest>(this, asyncResult);
//
// return (GetNonIndexableItemDetailsResponse)request.EndInternalExecute(asyncResult);
// }
/// <summary>
/// Get non indexable item statistics
/// </summary>
/// <param name="mailboxes">Array of mailbox legacy DN</param>
/// <returns>Service response object</returns>
//GetNonIndexableItemStatisticsResponse GetNonIndexableItemStatistics(string[] mailboxes)
// {
// GetNonIndexableItemStatisticsParameters parameters = new GetNonIndexableItemStatisticsParameters
// {
// Mailboxes = mailboxes,
// SearchArchiveOnly = false,
// };
//
// return this.GetNonIndexableItemStatistics(parameters);
// }
/// <summary>
/// Get non indexable item statistics
/// </summary>
/// <param name="parameters">Get non indexable item statistics parameters</param>
/// <returns>Service response object</returns>
//GetNonIndexableItemStatisticsResponse GetNonIndexableItemStatistics(GetNonIndexableItemStatisticsParameters parameters)
// {
// GetNonIndexableItemStatisticsRequest request = this.CreateGetNonIndexableItemStatisticsRequest(parameters);
//
// return request.Execute();
// }
/// <summary>
/// Asynchronous call to get non indexable item statistics
/// </summary>
/// <param name="callback">callback</param>
/// <param name="state">state</param>
/// <param name="parameters">Get non indexable item statistics parameters</param>
/// <returns>Async result</returns>
//IAsyncResult BeginGetNonIndexableItemStatistics(
// AsyncCallback callback,
// object state,
// GetNonIndexableItemStatisticsParameters parameters)
// {
// GetNonIndexableItemStatisticsRequest request = this.CreateGetNonIndexableItemStatisticsRequest(parameters);
// return request.BeginExecute(callback, state);
// }
/// <summary>
/// Asynchronous call to get non indexable item statistics
/// </summary>
/// <param name="asyncResult"></param>
/// <returns></returns>
//GetNonIndexableItemStatisticsResponse EndGetNonIndexableItemStatistics(IAsyncResult asyncResult)
// {
// var request = AsyncRequestResult.ExtractServiceRequest<GetNonIndexableItemStatisticsRequest>(this, asyncResult);
//
// return (GetNonIndexableItemStatisticsResponse)request.EndInternalExecute(asyncResult);
// }
/// <summary>
/// Create get non indexable item details request
/// </summary>
/// <param name="parameters">Get non indexable item details parameters</param>
/// <returns>GetNonIndexableItemDetails request</returns>
//GetNonIndexableItemDetailsRequest CreateGetNonIndexableItemDetailsRequest(GetNonIndexableItemDetailsParameters parameters)
// {
// EwsUtilities.ValidateParam(parameters, "parameters");
// EwsUtilities.ValidateParam(parameters.Mailboxes, "parameters.Mailboxes");
//
// GetNonIndexableItemDetailsRequest request = new GetNonIndexableItemDetailsRequest(this);
// request.Mailboxes = parameters.Mailboxes;
// request.PageSize = parameters.PageSize;
// request.PageItemReference = parameters.PageItemReference;
// request.PageDirection = parameters.PageDirection;
// request.SearchArchiveOnly = parameters.SearchArchiveOnly;
//
// return request;
// }
/// <summary>
/// Create get non indexable item statistics request
/// </summary>
/// <param name="parameters">Get non indexable item statistics parameters</param>
/// <returns>Service response object</returns>
//GetNonIndexableItemStatisticsRequest CreateGetNonIndexableItemStatisticsRequest(GetNonIndexableItemStatisticsParameters parameters)
// {
// EwsUtilities.ValidateParam(parameters, "parameters");
// EwsUtilities.ValidateParam(parameters.Mailboxes, "parameters.Mailboxes");
//
// GetNonIndexableItemStatisticsRequest request = new GetNonIndexableItemStatisticsRequest(this);
// request.Mailboxes = parameters.Mailboxes;
// request.SearchArchiveOnly = parameters.SearchArchiveOnly;
//
// return request;
// }
/// <summary>
/// Creates SearchMailboxesRequest from SearchMailboxesParameters
/// </summary>
/// <param name="searchParameters">search parameters</param>
/// <returns>request object</returns>
//SearchMailboxesRequest CreateSearchMailboxesRequest(SearchMailboxesParameters searchParameters)
// {
// SearchMailboxesRequest request = new SearchMailboxesRequest(this, ServiceErrorHandling.ReturnErrors);
// request.SearchQueries.AddRange(searchParameters.SearchQueries);
// request.ResultType = searchParameters.ResultType;
// request.PreviewItemResponseShape = searchParameters.PreviewItemResponseShape;
// request.SortByProperty = searchParameters.SortBy;
// request.SortOrder = searchParameters.SortOrder;
// request.Language = searchParameters.Language;
// request.PerformDeduplication = searchParameters.PerformDeduplication;
// request.PageSize = searchParameters.PageSize;
// request.PageDirection = searchParameters.PageDirection;
// request.PageItemReference = searchParameters.PageItemReference;
//
// return request;
// }
//
/// <summary>
/// Get user retention policy tags.
/// </summary>
/// <returns>Service response object.</returns>
//GetUserRetentionPolicyTagsResponse GetUserRetentionPolicyTags()
// {
// GetUserRetentionPolicyTagsRequest request = new GetUserRetentionPolicyTagsRequest(this);
//
// return request.Execute();
// }
/// <summary>
/// Default implementation of AutodiscoverRedirectionUrlValidationCallback.
/// Always returns true indicating that the URL can be used.
/// </summary>
/// <param name="redirectionUrl">The redirection URL.</param>
/// <returns>Returns true.</returns>
bool DefaultAutodiscoverRedirectionUrlValidationCallback(
String redirectionUrl) {
throw new AutodiscoverLocalException(
"AutodiscoverRedirectBlocked($redirectionUrl)");
}