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.core.request;
025
026 import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
027 import microsoft.exchange.webservices.data.core.EwsUtilities;
028 import microsoft.exchange.webservices.data.core.ExchangeService;
029 import microsoft.exchange.webservices.data.core.ILazyMember;
030 import microsoft.exchange.webservices.data.core.LazyMember;
031 import microsoft.exchange.webservices.data.core.PropertySet;
032 import microsoft.exchange.webservices.data.core.XmlAttributeNames;
033 import microsoft.exchange.webservices.data.core.XmlElementNames;
034 import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling;
035 import microsoft.exchange.webservices.data.core.response.ResolveNamesResponse;
036 import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
037 import microsoft.exchange.webservices.data.core.enumeration.search.ResolveNameSearchLocation;
038 import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
039 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
040 import microsoft.exchange.webservices.data.misc.FolderIdWrapperList;
041
042 import java.util.HashMap;
043 import java.util.Map;
044
045 /**
046 * Represents a ResolveNames request.
047 */
048 public final class ResolveNamesRequest extends
049 MultiResponseServiceRequest<ResolveNamesResponse> {
050
051 /**
052 * The Search scope map.
053 */
054 private static LazyMember<Map<ResolveNameSearchLocation, String>>
055 searchScopeMap =
056 new LazyMember<Map<ResolveNameSearchLocation, String>>(
057 new ILazyMember<Map<ResolveNameSearchLocation, String>>() {
058 @Override
059 public Map<ResolveNameSearchLocation, String>
060 createInstance() {
061
062 Map<ResolveNameSearchLocation, String> map =
063 new HashMap<ResolveNameSearchLocation, String>();
064
065 map.put(ResolveNameSearchLocation.DirectoryOnly,
066 "ActiveDirectory");
067 map.put(ResolveNameSearchLocation.DirectoryThenContacts,
068 "ActiveDirectoryContacts");
069 map.put(ResolveNameSearchLocation.ContactsOnly,
070 "Contacts");
071 map.put(ResolveNameSearchLocation.ContactsThenDirectory,
072 "ContactsActiveDirectory");
073
074 return map;
075 }
076
077 });
078
079 /**
080 * The name to resolve.
081 */
082 private String nameToResolve;
083
084 /**
085 * The return full contact data.
086 */
087 private boolean returnFullContactData;
088
089 /**
090 * The search location.
091 */
092 private ResolveNameSearchLocation searchLocation;
093
094 /**
095 * The Contact PropertySet. *
096 */
097 private PropertySet contactDataPropertySet;
098
099 /**
100 * The parent folder ids.
101 */
102 private FolderIdWrapperList parentFolderIds = new FolderIdWrapperList();
103
104
105
106 /**
107 * Asserts the valid.
108 *
109 * @throws Exception the exception
110 */
111 @Override
112 protected void validate() throws Exception {
113 super.validate();
114 EwsUtilities.validateNonBlankStringParam(this.
115 getNameToResolve(), "NameToResolve");
116 }
117
118 /**
119 * Creates the service response.
120 *
121 * @param service the service
122 * @param responseIndex the response index
123 * @return Service response
124 */
125 @Override
126 protected ResolveNamesResponse createServiceResponse(
127 ExchangeService service, int responseIndex) {
128 return new ResolveNamesResponse(service);
129 }
130
131 /**
132 * Gets the name of the XML element.
133 *
134 * @return XML element name
135 */
136 @Override public String getXmlElementName() {
137 return XmlElementNames.ResolveNames;
138 }
139
140 /**
141 * Gets the name of the response XML element.
142 *
143 * @return XML element name
144 */
145 @Override
146 protected String getResponseXmlElementName() {
147 return XmlElementNames.ResolveNamesResponse;
148 }
149
150 /**
151 * Gets the name of the response message XML element.
152 *
153 * @return XML element name
154 */
155 @Override
156 protected String getResponseMessageXmlElementName() {
157 return XmlElementNames.ResolveNamesResponseMessage;
158 }
159
160 /**
161 * Initializes a new instance of the class.
162 *
163 * @param service the service
164 * @throws Exception
165 */
166 public ResolveNamesRequest(ExchangeService service)
167 throws Exception {
168 super(service, ServiceErrorHandling.ThrowOnError);
169 }
170
171 /**
172 * Gets the expected response message count.
173 *
174 * @return Number of expected response messages
175 */
176 @Override
177 protected int getExpectedResponseMessageCount() {
178 return 1;
179 }
180
181 /**
182 * Writes the attribute to XML.
183 *
184 * @param writer the writer
185 * @throws ServiceXmlSerializationException the service xml serialization exception
186 */
187 @Override
188 protected void writeAttributesToXml(EwsServiceXmlWriter writer)
189 throws ServiceXmlSerializationException {
190 writer.writeAttributeValue(XmlAttributeNames.ReturnFullContactData,
191 this.returnFullContactData);
192
193 String searchScope = null;
194 if (searchScopeMap.getMember().containsKey(searchLocation)) {
195 searchScope = searchScopeMap.getMember().get(searchLocation);
196 }
197
198 EwsUtilities
199 .ewsAssert((!(searchScope == null || searchScope.isEmpty())),
200 "ResolveNameRequest.WriteAttributesToXml",
201 "The specified search location cannot be mapped to an EWS search scope.");
202
203 String propertySet = null;
204 if (this.getContactDataPropertySet() != null) {
205 //((PropertyBag)PropertySet.getDefaultPropertySetDictionary( ).getMember()).tryGetValue(this.contactDataPropertySet.getBasePropertySet(), propertySet);
206 if (PropertySet.getDefaultPropertySetMap().getMember()
207 .containsKey(this.getContactDataPropertySet().getBasePropertySet())) {
208 propertySet = PropertySet.getDefaultPropertySetMap().getMember()
209 .get(this.getContactDataPropertySet().getBasePropertySet());
210 }
211 }
212
213 if (!this.getService().getExchange2007CompatibilityMode()) {
214 writer.writeAttributeValue(XmlAttributeNames.
215 SearchScope, searchScope);
216 }
217 if (!(propertySet == null)) {
218 writer.writeAttributeValue(XmlAttributeNames.ContactDataShape, propertySet);
219 }
220 }
221
222 /**
223 * Writes the attribute to XML.
224 *
225 * @param writer the writer
226 * @throws Exception the exception
227 */
228 @Override
229 protected void writeElementsToXml(EwsServiceXmlWriter writer)
230 throws Exception {
231 this.getParentFolderIds().writeToXml(writer, XmlNamespace.Messages,
232 XmlElementNames.ParentFolderIds);
233
234 writer.writeElementValue(XmlNamespace.Messages,
235 XmlElementNames.UnresolvedEntry, this.getNameToResolve());
236 }
237
238 /**
239 * Gets the request version.
240 *
241 * @return Earliest Exchange version in which this request is supported.
242 */
243 @Override
244 protected ExchangeVersion getMinimumRequiredServerVersion() {
245 return ExchangeVersion.Exchange2007_SP1;
246 }
247
248 /**
249 * Gets the name to resolve.
250 *
251 * @return the name to resolve
252 */
253 public String getNameToResolve() {
254 return this.nameToResolve;
255 }
256
257 /**
258 * Sets the name to resolve.
259 *
260 * @param nameToResolve the new name to resolve
261 */
262 public void setNameToResolve(String nameToResolve) {
263 this.nameToResolve = nameToResolve;
264 }
265
266 /**
267 * Gets a value indicating whether to return full contact data or not.
268 * "true" if should return full contact data; otherwise, "false".
269 *
270 * @return the return full contact data
271 */
272 public boolean getReturnFullContactData() {
273 return this.returnFullContactData;
274 }
275
276 /**
277 * Sets the return full contact data.
278 *
279 * @param returnFullContactData the new return full contact data
280 */
281 public void setReturnFullContactData(boolean returnFullContactData) {
282 this.returnFullContactData = returnFullContactData;
283 }
284
285 /**
286 * Gets the search location.
287 *
288 * @return the search location
289 */
290 public ResolveNameSearchLocation getSearchLocation() {
291 return this.searchLocation;
292 }
293
294 /**
295 * Sets the search location.
296 *
297 * @param searchLocation the new search location
298 */
299 public void setSearchLocation(ResolveNameSearchLocation searchLocation) {
300 this.searchLocation = searchLocation;
301 }
302
303 /**
304 * Gets the parent folder ids.
305 *
306 * @return the parent folder ids
307 */
308 public FolderIdWrapperList getParentFolderIds() {
309 return this.parentFolderIds;
310 }
311
312 /**
313 * Gets or sets the PropertySet for Contact Data
314 * <p/>
315 * The PropertySet
316 */
317 public void setContactDataPropertySet(PropertySet propertySet) {
318
319
320 this.contactDataPropertySet = propertySet;
321 }
322
323 /**
324 * Gets or sets the PropertySet for Contact Data
325 *
326 * @return The PropertySet
327 */
328 public PropertySet getContactDataPropertySet() {
329 return this.contactDataPropertySet;
330 }
331
332 }