001/*
002 * The MIT License
003 * Copyright (c) 2012 Microsoft Corporation
004 *
005 * Permission is hereby granted, free of charge, to any person obtaining a copy
006 * of this software and associated documentation files (the "Software"), to deal
007 * in the Software without restriction, including without limitation the rights
008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
009 * copies of the Software, and to permit persons to whom the Software is
010 * furnished to do so, subject to the following conditions:
011 *
012 * The above copyright notice and this permission notice shall be included in
013 * all copies or substantial portions of the Software.
014 *
015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
021 * THE SOFTWARE.
022 */
023
024package microsoft.exchange.webservices.data.core.request;
025
026import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
027import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
028import microsoft.exchange.webservices.data.core.ExchangeService;
029import microsoft.exchange.webservices.data.core.XmlElementNames;
030import microsoft.exchange.webservices.data.core.response.FindConversationResponse;
031import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
032import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
033import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
034import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
035import microsoft.exchange.webservices.data.misc.FolderIdWrapper;
036import microsoft.exchange.webservices.data.search.ConversationIndexedItemView;
037import microsoft.exchange.webservices.data.search.filter.SearchFilter;
038
039/**
040 * Represents a request to a Find Conversation operation
041 */
042public final class FindConversationRequest extends SimpleServiceRequestBase<FindConversationResponse> {
043
044
045  private ConversationIndexedItemView view;
046  private SearchFilter.IsEqualTo searchFilter;
047  private FolderIdWrapper folderId;
048
049  /**
050   * @throws Exception
051   */
052  public FindConversationRequest(ExchangeService service)
053      throws Exception {
054    super(service);
055  }
056
057
058  /**
059   * Gets or sets the view controlling the number of conversations returned.
060   */
061  protected ConversationIndexedItemView getIndexedItemView() {
062    return this.view;
063  }
064
065  public void setIndexedItemView(ConversationIndexedItemView value) {
066    this.view = value;
067  }
068
069
070
071  /**
072   * Gets or sets the search filter.
073   */
074  protected SearchFilter.IsEqualTo getConversationViewFilter() {
075
076    return this.searchFilter;
077  }
078
079  public void setConversationViewFilter(SearchFilter.IsEqualTo value) {
080    this.searchFilter = value;
081
082  }
083
084  /**
085   * Gets or sets folder id
086   */
087  protected FolderIdWrapper getFolderId() {
088    return this.folderId;
089  }
090
091  public void setFolderId(FolderIdWrapper value) {
092    this.folderId = value;
093  }
094
095
096  /**
097   * Validate request.
098   *
099   * @throws Exception
100   * @throws ServiceLocalException
101   */
102  @Override
103  protected void validate() throws ServiceLocalException, Exception {
104    super.validate();
105    this.view.internalValidate(this);
106  }
107
108
109  /**
110   * Writes XML attribute.
111   *
112   * @param writer The writer.
113   * @throws ServiceXmlSerializationException
114   */
115  @Override
116  protected void writeAttributesToXml(EwsServiceXmlWriter writer)
117      throws ServiceXmlSerializationException {
118    super.writeAttributesToXml(writer);
119  }
120
121
122  /**
123   * Writes XML attribute.
124   *
125   * @param writer The writer.
126   * @throws Exception
127   */
128  @Override
129  protected void writeElementsToXml(EwsServiceXmlWriter writer)
130      throws Exception {
131    this.getIndexedItemView().writeToXml(writer);
132
133    if (this.getConversationViewFilter() != null) {
134      writer.writeStartElement(XmlNamespace.Messages,
135          XmlElementNames.Restriction);
136      this.getConversationViewFilter().writeToXml(writer);
137      writer.writeEndElement(); // Restriction
138    }
139
140    this.getIndexedItemView().writeOrderByToXml(writer);
141
142    writer.writeStartElement(XmlNamespace.Messages,
143        XmlElementNames.ParentFolderId);
144    this.getFolderId().writeToXml(writer);
145    writer.writeEndElement();
146  }
147
148  /**
149   * {@inheritDoc}
150   */
151  @Override
152  protected FindConversationResponse parseResponse(EwsServiceXmlReader reader)
153      throws Exception {
154    FindConversationResponse response = new FindConversationResponse();
155    response.loadFromXml(reader,
156        XmlElementNames.FindConversationResponse);
157    return response;
158  }
159
160  /**
161   * Gets the name of the XML element.
162   *
163   * @return XML element name.
164   */
165  @Override public String getXmlElementName() {
166    return XmlElementNames.FindConversation;
167  }
168
169  /**
170   * Gets the name of the response XML element.
171   *
172   * @return XML element name.
173   */
174  @Override
175  protected String getResponseXmlElementName() {
176    return XmlElementNames.FindConversationResponse;
177  }
178
179  /**
180   * Gets the request version.
181   *
182   * @return Earliest Exchange version in which this request is supported.
183   */
184  @Override
185  protected ExchangeVersion getMinimumRequiredServerVersion() {
186    return ExchangeVersion.Exchange2010_SP1;
187  }
188
189  /**
190   * Executes this request.
191   *
192   * @return Service response.
193   * @throws Exception
194   * @throws ServiceLocalException
195   */
196  public FindConversationResponse execute()
197      throws ServiceLocalException, Exception {
198    FindConversationResponse serviceResponse = internalExecute();
199    serviceResponse.throwIfNecessary();
200    return serviceResponse;
201  }
202}
203