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.autodiscover.response; 025 026import microsoft.exchange.webservices.data.autodiscover.AlternateMailboxCollection; 027import microsoft.exchange.webservices.data.autodiscover.ProtocolConnectionCollection; 028import microsoft.exchange.webservices.data.autodiscover.WebClientUrlCollection; 029import microsoft.exchange.webservices.data.autodiscover.exception.error.UserSettingError; 030import microsoft.exchange.webservices.data.core.EwsUtilities; 031import microsoft.exchange.webservices.data.core.EwsXmlReader; 032import microsoft.exchange.webservices.data.core.XmlAttributeNames; 033import microsoft.exchange.webservices.data.core.XmlElementNames; 034import microsoft.exchange.webservices.data.autodiscover.enumeration.UserSettingName; 035import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 036import microsoft.exchange.webservices.data.misc.OutParam; 037import microsoft.exchange.webservices.data.security.XmlNodeType; 038 039import java.util.ArrayList; 040import java.util.Collection; 041import java.util.HashMap; 042import java.util.Map; 043 044/** 045 * Represents the response to a GetUsersSettings call for an individual user. 046 */ 047public final class GetUserSettingsResponse extends AutodiscoverResponse { 048 049 /** 050 * The smtp address. 051 */ 052 private String smtpAddress; 053 054 /** 055 * The redirect target. 056 */ 057 private String redirectTarget; 058 059 /** 060 * The settings. 061 */ 062 private Map<UserSettingName, Object> settings; 063 064 /** 065 * The user setting errors. 066 */ 067 private Collection<UserSettingError> userSettingErrors; 068 069 /** 070 * Initializes a new instance of the {@link GetUserSettingsResponse} class. 071 */ 072 public GetUserSettingsResponse() { 073 super(); 074 this.setSmtpAddress(null); 075 this.setSettings(new HashMap<UserSettingName, Object>()); 076 this.setUserSettingErrors(new ArrayList<UserSettingError>()); 077 } 078 079 /** 080 * Tries the get the user setting value. 081 * 082 * @param cls Type of user setting. 083 * @param setting The setting. 084 * @param value The setting value. 085 * @return True if setting was available. 086 */ 087 public <T> boolean tryGetSettingValue(Class<T> cls, 088 UserSettingName setting, OutParam<T> value) { 089 Object objValue; 090 if (this.getSettings().containsKey(setting)) { 091 objValue = this.getSettings().get(setting); 092 value.setParam((T) objValue); 093 return true; 094 } else { 095 value.setParam(null); 096 return false; 097 } 098 } 099 100 /** 101 * Gets the SMTP address this response applies to. 102 * 103 * @return the smtp address 104 */ 105 public String getSmtpAddress() { 106 return this.smtpAddress; 107 } 108 109 /** 110 * Sets the smtp address. 111 * 112 * @param value the new smtp address 113 */ 114 public void setSmtpAddress(String value) { 115 this.smtpAddress = value; 116 } 117 118 /** 119 * Gets the redirectionTarget (URL or email address). 120 * 121 * @return the redirect target 122 */ 123 public String getRedirectTarget() { 124 return this.redirectTarget; 125 } 126 127 /** 128 * Sets the redirectionTarget (URL or email address). 129 * @param value redirect target value 130 */ 131 public void setRedirectTarget(String value) { 132 this.redirectTarget = value; 133 } 134 135 /** 136 * Gets the requested settings for the user. 137 * 138 * @return the settings 139 */ 140 public Map<UserSettingName, Object> getSettings() { 141 return this.settings; 142 } 143 144 /** 145 * Sets the requested settings for the user. 146 * @param settings settings map 147 */ 148 public void setSettings(Map<UserSettingName, Object> settings) { 149 this.settings = settings; 150 } 151 152 /** 153 * Gets error information for settings that could not be returned. 154 * 155 * @return the user setting errors 156 */ 157 public Collection<UserSettingError> getUserSettingErrors() { 158 return this.userSettingErrors; 159 } 160 161 /** 162 * Sets the requested settings for the user. 163 * @param value user setting errors 164 */ 165 protected void setUserSettingErrors(Collection<UserSettingError> value) { 166 this.userSettingErrors = value; 167 } 168 169 /** 170 * Loads response from XML. 171 * 172 * @param reader The reader. 173 * @param endElementName End element name. 174 * @throws Exception the exception 175 */ 176 @Override public void loadFromXml(EwsXmlReader reader, String endElementName) 177 throws Exception { 178 do { 179 reader.read(); 180 181 if (reader.getNodeType().getNodeType() == XmlNodeType.START_ELEMENT) { 182 if (reader.getLocalName() 183 .equals(XmlElementNames.RedirectTarget)) { 184 185 this.setRedirectTarget(reader.readElementValue()); 186 } else if (reader.getLocalName().equals( 187 XmlElementNames.UserSettingErrors)) { 188 this.loadUserSettingErrorsFromXml(reader); 189 } else if (reader.getLocalName().equals( 190 XmlElementNames.UserSettings)) { 191 this.loadUserSettingsFromXml(reader); 192 } else { 193 super.loadFromXml(reader, endElementName); 194 } 195 } 196 } while (!reader 197 .isEndElement(XmlNamespace.Autodiscover, endElementName)); 198 } 199 200 /** 201 * Loads from XML. 202 * 203 * @param reader The reader. 204 * @throws Exception the exception 205 */ 206 protected void loadUserSettingsFromXml(EwsXmlReader reader) 207 throws Exception { 208 if (!reader.isEmptyElement()) { 209 do { 210 reader.read(); 211 212 if ((reader.getNodeType().getNodeType() == XmlNodeType.START_ELEMENT) && 213 (reader.getLocalName() 214 .equals(XmlElementNames.UserSetting))) { 215 String settingClass = reader.readAttributeValue( 216 XmlNamespace.XmlSchemaInstance, 217 XmlAttributeNames.Type); 218 219 if (settingClass.equals(XmlElementNames.StringSetting)) { 220 this.readSettingFromXml(reader); 221 } else if (settingClass.equals(XmlElementNames.WebClientUrlCollectionSetting)) { 222 this.readSettingFromXml(reader); 223 } else if (settingClass.equals(XmlElementNames.AlternateMailboxCollectionSetting)) { 224 this.readSettingFromXml(reader); 225 } else if (settingClass.equals(XmlElementNames.ProtocolConnectionCollectionSetting)) { 226 this.readSettingFromXml(reader); 227 } else { 228 EwsUtilities.ewsAssert(false, "GetUserSettingsResponse." + "LoadUserSettingsFromXml", String 229 .format("%s,%s", "Invalid setting class '%s' returned", settingClass)); 230 break; 231 } 232 } 233 } while (!reader.isEndElement(XmlNamespace.Autodiscover, 234 XmlElementNames.UserSettings)); 235 } else { 236 reader.read(); 237 } 238 } 239 240 /** 241 * Reads user setting from XML. 242 * 243 * @param reader The reader. 244 * @throws Exception the exception 245 */ 246 private void readSettingFromXml(EwsXmlReader reader) throws Exception { 247 UserSettingName name = null; 248 Object value = null; 249 250 do { 251 reader.read(); 252 253 if (reader.getNodeType().getNodeType() == XmlNodeType.START_ELEMENT) { 254 if (reader.getLocalName().equals(XmlElementNames.Name)) { 255 name = reader.readElementValue(UserSettingName.class); 256 } else if (reader.getLocalName().equals(XmlElementNames.Value)) { 257 value = reader.readElementValue(); 258 } else if (reader.getLocalName().equals( 259 XmlElementNames.WebClientUrls)) { 260 261 value = WebClientUrlCollection.loadFromXml(reader); 262 } else if (reader.getLocalName().equals( 263 XmlElementNames.ProtocolConnections)) { 264 value = ProtocolConnectionCollection.loadFromXml(reader); 265 } else if (reader.getLocalName().equals( 266 XmlElementNames.AlternateMailboxes)) { 267 value = AlternateMailboxCollection.loadFromXml(reader); 268 } 269 } 270 } while (!reader.isEndElement(XmlNamespace.Autodiscover, 271 XmlElementNames.UserSetting)); 272 273 EwsUtilities.ewsAssert(name != null, "GetUserSettingsResponse.ReadSettingFromXml", 274 "Missing name element in user setting"); 275 276 this.getSettings().put(name, value); 277 } 278 279 /** 280 * Loads the user setting errors. 281 * 282 * @param reader The reader. 283 * @throws Exception the exception 284 */ 285 private void loadUserSettingErrorsFromXml(EwsXmlReader reader) 286 throws Exception { 287 if (!reader.isEmptyElement()) { 288 do { 289 reader.read(); 290 291 if ((reader.getNodeType().getNodeType() == XmlNodeType.START_ELEMENT) && 292 (reader.getLocalName() 293 .equals(XmlElementNames.UserSettingError))) { 294 UserSettingError error = new UserSettingError(); 295 error.loadFromXml(reader); 296 this.getUserSettingErrors().add(error); 297 } 298 } while (!reader.isEndElement(XmlNamespace.Autodiscover, 299 XmlElementNames.UserSettingErrors)); 300 } else { 301 reader.read(); 302 } 303 } 304}