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.misc.id;
025
026import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
027import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
028import microsoft.exchange.webservices.data.core.EwsUtilities;
029import microsoft.exchange.webservices.data.core.XmlAttributeNames;
030import microsoft.exchange.webservices.data.core.XmlElementNames;
031import microsoft.exchange.webservices.data.core.enumeration.misc.IdFormat;
032import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
033
034/**
035 * Represents an Id expressed in a specific format.
036 */
037public class AlternateId extends AlternateIdBase {
038
039  /**
040   * Name of schema type used for AlternateId.
041   */
042  public final static String SchemaTypeName = "AlternateIdType";
043
044  /**
045   * Id.
046   */
047  private String id;
048
049  /**
050   * SMTP address of the mailbox that the id belongs to.
051   */
052  private String mailbox;
053
054  /**
055   * Type (primary or archive) mailbox to which the Id belongs
056   */
057  private boolean isArchive;
058
059  /**
060   * Initializes a new instance of the class.
061   */
062  public AlternateId() {
063    super();
064  }
065
066  /**
067   * Initializes a new instance of the class.
068   *
069   * @param format  the format
070   * @param id      the id
071   * @param mailbox the mailbox
072   */
073  public AlternateId(IdFormat format, String id, String mailbox) {
074    super(format);
075    this.setUniqueId(id);
076    this.setMailbox(mailbox);
077  }
078
079  /**
080   * Initializes a new instance of the AlternateId class.
081   *
082   * @param format    The format the Id is expressed in.
083   * @param id        The Id.
084   * @param mailbox   The SMTP address of the mailbox that the Id belongs to.
085   * @param isArchive Primary (false) or archive (true) mailbox.
086   */
087  public AlternateId(
088      IdFormat format,
089      String id,
090      String mailbox,
091      boolean isArchive) {
092    super(format);
093    this.setUniqueId(id);
094    this.setMailbox(mailbox);
095    this.setIsArchive(isArchive);
096  }
097
098  /**
099   * Gets the Id.
100   *
101   * @return the unique id
102   */
103  public String getUniqueId() {
104    return this.id;
105  }
106
107  /**
108   * Sets the unique id.
109   *
110   * @param id the new unique id
111   */
112  public void setUniqueId(String id) {
113    this.id = id;
114  }
115
116  /**
117   * Gets the mailbox to which the Id belongs.
118   *
119   * @return the mailbox
120   */
121  public String getMailbox() {
122    return this.mailbox;
123  }
124
125  /**
126   * Sets the mailbox.
127   *
128   * @param mailbox the new mailbox
129   */
130  public void setMailbox(String mailbox) {
131    this.mailbox = mailbox;
132  }
133
134  /**
135   * Gets the type (primary or archive) mailbox to which the Id belongs.
136   */
137  public boolean getIsArchive() {
138    return this.isArchive;
139  }
140
141  /**
142   * Sets the type (primary or archive) mailbox to which the Id belongs.
143   *
144   * @param isArchive the new isArchive
145   */
146  public void setIsArchive(boolean isArchive) {
147    this.isArchive = isArchive;
148  }
149
150  /**
151   * Gets the name of the XML element.
152   *
153   * @return XML element name.
154   */
155  @Override
156  protected String getXmlElementName() {
157    return XmlElementNames.AlternateId;
158  }
159
160  /**
161   * Gets the name of the XML element.
162   *
163   * @param writer the writer
164   * @throws ServiceXmlSerializationException the service xml serialization exception
165   */
166  @Override
167  protected void writeAttributesToXml(EwsServiceXmlWriter writer)
168      throws ServiceXmlSerializationException {
169    super.writeAttributesToXml(writer);
170    writer.writeAttributeValue(XmlAttributeNames.Id, this.getUniqueId());
171    writer.writeAttributeValue(XmlAttributeNames.Mailbox,
172        this.getMailbox());
173    //.getMailbox() == null || this.getMailbox().isEmpty()) ? ""
174    //: this.getMailbox());
175    if (this.getIsArchive()) {
176      writer.writeAttributeValue(XmlAttributeNames.IsArchive, true);
177    }
178
179  }
180
181  /**
182   * Gets the name of the XML element.
183   *
184   * @param reader the reader
185   * @throws Exception// the exception
186   */
187  @Override public void loadAttributesFromXml(EwsServiceXmlReader reader)
188      throws Exception {
189    super.loadAttributesFromXml(reader);
190
191    this.setUniqueId(reader.readAttributeValue(XmlAttributeNames.Id));
192    this.setMailbox(reader.readAttributeValue(XmlAttributeNames.Mailbox));
193    String isArchive = reader.readAttributeValue(
194        XmlAttributeNames.IsArchive);
195
196    if (!(isArchive == null || isArchive.isEmpty())) {
197      this.isArchive = reader.readAttributeValue(Boolean.class,
198          XmlAttributeNames.IsArchive);
199    } else {
200      this.isArchive = false;
201    }
202  }
203
204  /**
205   * Validate this instance.
206   */
207  @Override
208  protected void internalValidate() throws Exception {
209    EwsUtilities.validateParam(this.getMailbox(), "mailbox");
210  }
211}
212
213