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
024 package microsoft.exchange.webservices.data.autodiscover.request;
025
026 import microsoft.exchange.webservices.data.autodiscover.AutodiscoverService;
027 import microsoft.exchange.webservices.data.autodiscover.enumeration.AutodiscoverErrorCode;
028 import microsoft.exchange.webservices.data.autodiscover.response.AutodiscoverResponse;
029 import microsoft.exchange.webservices.data.autodiscover.response.GetDomainSettingsResponseCollection;
030 import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
031 import microsoft.exchange.webservices.data.core.EwsUtilities;
032 import microsoft.exchange.webservices.data.core.XmlElementNames;
033 import microsoft.exchange.webservices.data.autodiscover.enumeration.DomainSettingName;
034 import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
035 import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
036 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceValidationException;
037 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
038
039 import javax.xml.stream.XMLStreamException;
040
041 import java.net.URI;
042 import java.util.List;
043
044 /**
045 * Represents a GetDomainSettings request.
046 */
047 public class GetDomainSettingsRequest extends AutodiscoverRequest {
048
049 /**
050 * Action Uri of Autodiscover.GetDomainSettings method.
051 */
052 private static final String GetDomainSettingsActionUri =
053 EwsUtilities.AutodiscoverSoapNamespace +
054 "/Autodiscover/GetDomainSettings";
055
056 /**
057 * The domains.
058 */
059 private List<String> domains;
060
061 /**
062 * The settings.
063 */
064 private List<DomainSettingName> settings;
065
066 private ExchangeVersion requestedVersion;
067
068 /**
069 * Initializes a new instance of the {@link GetDomainSettingsRequest} class.
070 *
071 * @param service the service
072 * @param url the url
073 */
074 public GetDomainSettingsRequest(AutodiscoverService service, URI url) {
075 super(service, url);
076 }
077
078 /**
079 * Validates the request.
080 *
081 * @throws Exception the exception
082 */
083 @Override
084 protected void validate() throws Exception {
085 super.validate();
086
087 EwsUtilities.validateParam(this.getDomains(), "domains");
088 EwsUtilities.validateParam(this.getSettings(), "settings");
089
090 if (this.getSettings().size() == 0) {
091 throw new ServiceValidationException("At least one setting must be requested.");
092 }
093
094 if (domains.size() == 0) {
095 throw new ServiceValidationException("At least one domain name must be requested.");
096 }
097
098 for (String domain : this.getDomains()) {
099 if (domain == null || domain.isEmpty()) {
100 throw new ServiceValidationException("The domain name must be specified.");
101 }
102 }
103 }
104
105 /**
106 * Executes this instance.
107 *
108 * @return the gets the domain settings response collection
109 * @throws Exception the exception
110 */
111 public GetDomainSettingsResponseCollection execute() throws Exception {
112 GetDomainSettingsResponseCollection responses =
113 (GetDomainSettingsResponseCollection) this
114 .internalExecute();
115 if (responses.getErrorCode() == AutodiscoverErrorCode.NoError) {
116 this.PostProcessResponses(responses);
117 }
118 return responses;
119 }
120
121 /**
122 * Post-process response to GetDomainSettings.
123 *
124 * @param responses The GetDomainSettings response.
125 */
126 private void PostProcessResponses(
127 GetDomainSettingsResponseCollection responses) {
128 // Note:The response collection may not include all of the requested
129 // domains if the request has been throttled.
130 for (int index = 0; index < responses.getCount(); index++) {
131 responses.getResponses().get(index).setDomain(
132 this.getDomains().get(index));
133 }
134 }
135
136 /**
137 * Gets the name of the request XML element.
138 *
139 * @return Request XML element name.
140 */
141 @Override
142 protected String getRequestXmlElementName() {
143 return XmlElementNames.GetDomainSettingsRequestMessage;
144 }
145
146 /**
147 * Gets the name of the response XML element.
148 *
149 * @return Response XML element name.
150 */
151 @Override
152 protected String getResponseXmlElementName() {
153 return XmlElementNames.GetDomainSettingsResponseMessage;
154 }
155
156 /**
157 * Gets the WS-Addressing action name.
158 *
159 * @return WS-Addressing action name.
160 */
161 @Override
162 protected String getWsAddressingActionName() {
163 return GetDomainSettingsActionUri;
164 }
165
166 /**
167 * Creates the service response.
168 *
169 * @return AutodiscoverResponse
170 */
171 @Override
172 protected AutodiscoverResponse createServiceResponse() {
173 return new GetDomainSettingsResponseCollection();
174 }
175
176 /**
177 * Writes the attribute to XML.
178 *
179 * @param writer The writer.
180 * @throws ServiceXmlSerializationException the service xml serialization exception
181 */
182 @Override
183 protected void writeAttributesToXml(EwsServiceXmlWriter writer)
184 throws ServiceXmlSerializationException {
185 writer.writeAttributeValue("xmlns",
186 EwsUtilities.AutodiscoverSoapNamespacePrefix,
187 EwsUtilities.AutodiscoverSoapNamespace);
188 }
189
190 /**
191 * Writes request to XML.
192 *
193 * @param writer the writer
194 * @throws XMLStreamException the XML stream exception
195 * @throws ServiceXmlSerializationException the service xml serialization exception
196 */
197 @Override
198 protected void writeElementsToXml(EwsServiceXmlWriter writer)
199 throws XMLStreamException, ServiceXmlSerializationException {
200 writer.writeStartElement(XmlNamespace.Autodiscover,
201 XmlElementNames.Request);
202
203 writer.writeStartElement(XmlNamespace.Autodiscover,
204 XmlElementNames.Domains);
205
206 for (String domain : this.getDomains()) {
207 if (!(domain == null || domain.isEmpty())) {
208 writer.writeElementValue(XmlNamespace.Autodiscover,
209 XmlElementNames.Domain, domain);
210 }
211 }
212 writer.writeEndElement(); // Domains
213
214 writer.writeStartElement(XmlNamespace.Autodiscover,
215 XmlElementNames.RequestedSettings);
216 for (DomainSettingName setting : settings) {
217 writer.writeElementValue(XmlNamespace.Autodiscover,
218 XmlElementNames.Setting, setting);
219 }
220
221 writer.writeEndElement(); // RequestedSettings
222
223 if (this.requestedVersion != null) {
224 writer.writeElementValue(XmlNamespace.Autodiscover,
225 XmlElementNames.RequestedVersion, this.requestedVersion);
226 }
227
228 writer.writeEndElement(); // Request
229 }
230
231 /**
232 * Gets the domains.
233 *
234 * @return the domains
235 */
236 protected List<String> getDomains() {
237 return domains;
238 }
239
240 /**
241 * Sets the domains.
242 *
243 * @param value the new domains
244 */
245 public void setDomains(List<String> value) {
246 domains = value;
247 }
248
249 /**
250 * Gets or sets the settings.
251 *
252 * @return the settings
253 */
254 protected List<DomainSettingName> getSettings() {
255 return settings;
256 }
257
258 /**
259 * Sets the settings.
260 *
261 * @param value the new settings
262 */
263 public void setSettings(List<DomainSettingName> value) {
264 settings = value;
265 }
266
267 /**
268 * Gets or sets the requestedVersion.
269 *
270 * @return the requestedVersion
271 */
272 protected ExchangeVersion getRequestedVersion() {
273 return requestedVersion;
274 }
275
276 /**
277 * Sets the requestedVersion.
278 *
279 * @param value the new requestedVersion
280 */
281 public void setRequestedVersion(ExchangeVersion value) {
282 requestedVersion = value;
283 }
284
285 }