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.property.complex;
025
026import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
027import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
028import microsoft.exchange.webservices.data.core.XmlElementNames;
029import microsoft.exchange.webservices.data.core.enumeration.property.StandardUser;
030import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
031import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
032
033import javax.xml.stream.XMLStreamException;
034
035/**
036 * Represents the Id of a user.
037 */
038public class UserId extends ComplexProperty {
039
040  /**
041   * The s id.
042   */
043  private String sID;
044
045  /**
046   * The primary smtp address.
047   */
048  private String primarySmtpAddress;
049
050  /**
051   * The display name.
052   */
053  private String displayName;
054
055  /**
056   * The standard user.
057   */
058  private StandardUser standardUser;
059
060  /**
061   * Initializes a new instance.
062   */
063  public UserId() {
064    super();
065  }
066
067  /**
068   * Initializes a new instance.
069   *
070   * @param primarySmtpAddress the primary smtp address
071   */
072  public UserId(String primarySmtpAddress) {
073
074    this.primarySmtpAddress = primarySmtpAddress;
075  }
076
077  /**
078   * Initializes a new instance.
079   *
080   * @param standardUser the standard user
081   */
082  public UserId(StandardUser standardUser) {
083    this();
084    this.standardUser = standardUser;
085  }
086
087  /**
088   * Determines whether this instance is valid.
089   *
090   * @return true, if this instance is valid. Else, false
091   */
092  protected boolean isValid() {
093    return (this.standardUser != null ||
094        !(this.primarySmtpAddress == null || this.primarySmtpAddress
095            .isEmpty()) || !(this.sID == null ||
096        this.sID.isEmpty()));
097  }
098
099  /**
100   * Gets the SID of the user.
101   *
102   * @return the sID
103   */
104  public String getSID() {
105    return this.sID;
106  }
107
108  /**
109   * Sets the sID.
110   *
111   * @param sID the new sID
112   */
113  public void setSID(String sID) {
114    if (this.canSetFieldValue(this.sID, sID)) {
115      this.sID = sID;
116      this.changed();
117    }
118  }
119
120  /**
121   * Gets the primary SMTP address or the user.
122   *
123   * @return the primary smtp address
124   */
125  public String getPrimarySmtpAddress() {
126    return this.primarySmtpAddress;
127  }
128
129  /**
130   * Sets the primary smtp address.
131   *
132   * @param primarySmtpAddress the new primary smtp address
133   */
134  public void setPrimarySmtpAddress(String primarySmtpAddress) {
135    if (this.canSetFieldValue(this.primarySmtpAddress, primarySmtpAddress)) {
136      this.primarySmtpAddress = primarySmtpAddress;
137      this.changed();
138    }
139
140  }
141
142  /**
143   * Gets the display name of the user.
144   *
145   * @return the display name
146   */
147  public String getDisplayName() {
148    return this.displayName;
149  }
150
151  /**
152   * Sets the display name.
153   *
154   * @param displayName the new display name
155   */
156  public void setDisplayName(String displayName) {
157    if (this.canSetFieldValue(this.displayName, displayName)) {
158      this.displayName = displayName;
159      this.changed();
160    }
161  }
162
163  /**
164   * Gets  a value indicating which standard user the user
165   * represents.
166   *
167   * @return the standard user
168   */
169  public StandardUser getstandardUser() {
170    return this.standardUser;
171  }
172
173  /**
174   * Sets the standard user.
175   *
176   * @param standardUser the new standard user
177   */
178  public void setStandardUser(StandardUser standardUser) {
179    if (this.canSetFieldValue(this.standardUser, standardUser)) {
180      this.standardUser = standardUser;
181      this.changed();
182    }
183  }
184
185  /**
186   * Implements an implicit conversion between a string representing a
187   * primary SMTP address and UserId.
188   *
189   * @param primarySmtpAddress the primary smtp address
190   * @return A UserId initialized with the specified primary SMTP address
191   */
192  public static UserId getUserId(String primarySmtpAddress) {
193    return new UserId(primarySmtpAddress);
194  }
195
196  /**
197   * Implements an implicit conversion between StandardUser and UserId.
198   *
199   * @param standardUser the standard user
200   * @return A UserId initialized with the specified standard user value
201   */
202  public static UserId getUserIdFromStandardUser(StandardUser standardUser) {
203    return new UserId(standardUser);
204  }
205
206  /**
207   * Tries to read element from XML.
208   *
209   * @param reader the reader
210   * @return True if element was read.
211   * @throws Exception the exception
212   */
213  public boolean tryReadElementFromXml(EwsServiceXmlReader reader)
214      throws Exception {
215    if (reader.getLocalName().equals(XmlElementNames.SID)) {
216      this.sID = reader.readValue();
217      return true;
218    } else if (reader.getLocalName().equals(
219        XmlElementNames.PrimarySmtpAddress)) {
220      this.primarySmtpAddress = reader.readValue();
221      return true;
222    } else if (reader.getLocalName().equals(XmlElementNames.DisplayName)) {
223      this.displayName = reader.readValue();
224      return true;
225    } else if (reader.getLocalName().equals(
226        XmlElementNames.DistinguishedUser)) {
227      this.standardUser = reader.readValue(StandardUser.class);
228      return true;
229    } else {
230      return false;
231    }
232  }
233
234  /**
235   * Writes elements to XML.
236   *
237   * @param writer the writer
238   * @throws XMLStreamException the XML stream exception
239   * @throws ServiceXmlSerializationException the service xml serialization exception
240   */
241  public void writeElementsToXml(EwsServiceXmlWriter writer)
242      throws XMLStreamException, ServiceXmlSerializationException {
243    writer.writeElementValue(XmlNamespace.Types, XmlElementNames.SID,
244        this.sID);
245    writer.writeElementValue(XmlNamespace.Types,
246        XmlElementNames.PrimarySmtpAddress, this.primarySmtpAddress);
247    writer.writeElementValue(XmlNamespace.Types,
248        XmlElementNames.DisplayName, this.displayName);
249    writer.writeElementValue(XmlNamespace.Types,
250        XmlElementNames.DistinguishedUser, this.standardUser);
251  }
252}