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.EwsServiceXmlWriter;
027import microsoft.exchange.webservices.data.core.EwsUtilities;
028import microsoft.exchange.webservices.data.core.ExchangeService;
029import microsoft.exchange.webservices.data.core.XmlElementNames;
030import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling;
031import microsoft.exchange.webservices.data.core.response.GetUserConfigurationResponse;
032import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
033import microsoft.exchange.webservices.data.core.enumeration.misc.UserConfigurationProperties;
034import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
035import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
036import microsoft.exchange.webservices.data.misc.UserConfiguration;
037import microsoft.exchange.webservices.data.property.complex.FolderId;
038
039import java.util.EnumSet;
040
041/**
042 * The Class GetUserConfigurationRequest.
043 */
044public class GetUserConfigurationRequest extends
045    MultiResponseServiceRequest<GetUserConfigurationResponse> {
046
047  /**
048   * The name.
049   */
050  private String name;
051
052  /**
053   * The parent folder id.
054   */
055  private FolderId parentFolderId;
056
057  /**
058   * The property.
059   */
060  private EnumSet<UserConfigurationProperties> properties;
061
062  /**
063   * The user configuration.
064   */
065  private UserConfiguration userConfiguration;
066
067  /**
068   * Validate request.
069   *
070   * @throws ServiceLocalException the service local exception
071   * @throws Exception                                                 the exception
072   */
073  @Override
074  protected void validate() throws ServiceLocalException, Exception {
075    super.validate();
076
077    EwsUtilities.validateParam(this.name, "name");
078    EwsUtilities.validateParam(this.parentFolderId, "parentFolderId");
079    this.getParentFolderId().validate(
080        this.getService().getRequestedServerVersion());
081  }
082
083  /**
084   * Creates the service response.
085   *
086   * @param service       the service
087   * @param responseIndex the response index
088   * @return Service response.
089   * @throws Exception the exception
090   */
091  @Override
092  protected GetUserConfigurationResponse createServiceResponse(
093      ExchangeService service, int responseIndex) throws Exception {
094    // In the case of UserConfiguration.Load(), this.userConfiguration is
095    // set.
096    if (this.userConfiguration == null) {
097      this.userConfiguration = new UserConfiguration(service,
098          this.properties);
099      this.userConfiguration.setName(this.name);
100      this.userConfiguration.setParentFolderId(this.parentFolderId);
101    }
102
103    return new GetUserConfigurationResponse(this.userConfiguration);
104  }
105
106  /**
107   * Gets the request version.
108   *
109   * @return Earliest Exchange version in which this request is supported.
110   */
111  @Override
112  protected ExchangeVersion getMinimumRequiredServerVersion() {
113    return ExchangeVersion.Exchange2010;
114  }
115
116  /**
117   * Gets the expected response message count.
118   *
119   * @return Number of expected response messages.
120   */
121  @Override
122  protected int getExpectedResponseMessageCount() {
123    return 1;
124  }
125
126  /**
127   * Gets the name of the XML element.
128   *
129   * @return XML element name
130   */
131  @Override public String getXmlElementName() {
132    return XmlElementNames.GetUserConfiguration;
133  }
134
135  /**
136   * Gets the name of the response XML element.
137   *
138   * @return XML element name
139   */
140  @Override
141  protected String getResponseXmlElementName() {
142    return XmlElementNames.GetUserConfigurationResponse;
143  }
144
145  /**
146   * Gets the name of the response message XML element.
147   *
148   * @return XML element name
149   */
150  @Override
151  protected String getResponseMessageXmlElementName() {
152    return XmlElementNames.GetUserConfigurationResponseMessage;
153  }
154
155  /**
156   * Writes XML elements.
157   *
158   * @param writer the writer
159   * @throws Exception the exception
160   */
161  @Override
162  protected void writeElementsToXml(EwsServiceXmlWriter writer)
163      throws Exception {
164    final String EnumDelimiter = ",";
165
166    // Write UserConfiguationName element
167    UserConfiguration.writeUserConfigurationNameToXml(writer,
168        XmlNamespace.Messages, this.name, this.parentFolderId);
169
170    // Write UserConfigurationProperties element
171    writer.writeElementValue(XmlNamespace.Messages,
172        XmlElementNames.UserConfigurationProperties, this.properties
173            .toString().replace(EnumDelimiter, "").
174                replace("[", "").replace("]", ""));
175  }
176
177  /**
178   * Initializes a new instance of the class.
179   *
180   * @param service the service
181   * @throws Exception
182   */
183  public GetUserConfigurationRequest(ExchangeService service)
184      throws Exception {
185    super(service, ServiceErrorHandling.ThrowOnError);
186  }
187
188  /**
189   * Gets  the name. <value>The name.</value>
190   *
191   * @return the name
192   */
193  protected String getName() {
194    return this.name;
195  }
196
197  /**
198   * Sets the name.
199   *
200   * @param name the new name
201   */
202  public void setName(String name) {
203    this.name = name;
204  }
205
206  /**
207   * Gets  the parent folder Id. <value>The parent folder Id.</value>
208   *
209   * @return the parent folder id
210   */
211  protected FolderId getParentFolderId() {
212    return this.parentFolderId;
213  }
214
215  /**
216   * Sets the parent folder id.
217   *
218   * @param parentFolderId the new parent folder id
219   */
220  public void setParentFolderId(FolderId parentFolderId) {
221    this.parentFolderId = parentFolderId;
222  }
223
224  /**
225   * Gets  the user configuration. <value>The user
226   * configuration.</value>
227   *
228   * @return the user configuration
229   */
230  protected UserConfiguration getUserConfiguration() {
231    return this.userConfiguration;
232  }
233
234  /**
235   * Sets the user configuration.
236   *
237   * @param userConfiguration the new user configuration
238   */
239  public void setUserConfiguration(UserConfiguration userConfiguration) {
240    this.userConfiguration = userConfiguration;
241    this.name = this.userConfiguration.getName();
242    this.parentFolderId = this.userConfiguration.getParentFolderId();
243  }
244
245  /**
246   * Gets the property.
247   *
248   * @return the property
249   */
250  protected EnumSet<UserConfigurationProperties> getProperties() {
251    return this.properties;
252  }
253
254  /**
255   * Sets the property.
256   *
257   * @param properties the new property
258   */
259  public void setProperties(EnumSet<UserConfigurationProperties> properties) {
260    this.properties = properties;
261  }
262
263}