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.attribute.EditorBrowsable;
027import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
028import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
029import microsoft.exchange.webservices.data.core.EwsUtilities;
030import microsoft.exchange.webservices.data.core.XmlAttributeNames;
031import microsoft.exchange.webservices.data.core.XmlElementNames;
032import microsoft.exchange.webservices.data.core.enumeration.attribute.EditorBrowsableState;
033import microsoft.exchange.webservices.data.core.enumeration.property.EmailAddressKey;
034import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
035import microsoft.exchange.webservices.data.core.enumeration.property.MailboxType;
036import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
037
038/**
039 * Represents an entry of an EmailAddressDictionary.
040 */
041@EditorBrowsable(state = EditorBrowsableState.Never)
042public final class EmailAddressEntry extends DictionaryEntryProperty<EmailAddressKey> implements
043                                                                                      IComplexPropertyChangedDelegate {
044  // / The email address.
045  /**
046   * The email address.
047   */
048  private EmailAddress emailAddress;
049
050  /**
051   * Initializes a new instance of the <see cref="EmailAddressEntry"/> class.
052   */
053  protected EmailAddressEntry() {
054    super(EmailAddressKey.class);
055    this.emailAddress = new EmailAddress();
056    this.emailAddress.addOnChangeEvent(this);
057  }
058
059  /**
060   * Initializes a new instance of the "EmailAddressEntry" class.
061   *
062   * @param key          The key.
063   * @param emailAddress The email address.
064   */
065  protected EmailAddressEntry(EmailAddressKey key,
066      EmailAddress emailAddress) {
067    super(EmailAddressKey.class, key);
068    this.emailAddress = emailAddress;
069  }
070
071  /**
072   * Reads the attribute from XML.
073   *
074   * @param reader accepts EwsServiceXmlReader
075   * @throws Exception throws Exception
076   */
077  @Override
078  public void readAttributesFromXml(EwsServiceXmlReader reader)
079      throws Exception {
080    super.readAttributesFromXml(reader);
081    this.getEmailAddress().setName(
082        reader.readAttributeValue(XmlAttributeNames.Name));
083    this
084        .getEmailAddress()
085        .setRoutingType(
086            reader
087                .readAttributeValue(XmlAttributeNames.
088                    RoutingType));
089    String mailboxTypeString = reader
090        .readAttributeValue(XmlAttributeNames.MailboxType);
091    if ((mailboxTypeString != null) && (!mailboxTypeString.isEmpty())) {
092      this.getEmailAddress().setMailboxType(
093          EwsUtilities.parse(MailboxType.class, mailboxTypeString));
094    } else {
095      this.getEmailAddress().setMailboxType(null);
096    }
097  }
098
099  /**
100   * Reads the text value from XML.
101   *
102   * @param reader accepts EwsServiceXmlReader
103   * @throws Exception the exception
104   */
105  @Override
106  public void readTextValueFromXml(EwsServiceXmlReader reader)
107      throws Exception {
108    this.getEmailAddress().setAddress(reader.readValue());
109  }
110
111  /**
112   * Writes the attribute to XML.
113   *
114   * @param writer accepts EwsServiceXmlWriter
115   * @throws ServiceXmlSerializationException throws ServiceXmlSerializationException
116   */
117  @Override
118  public void writeAttributesToXml(EwsServiceXmlWriter writer)
119      throws ServiceXmlSerializationException {
120    super.writeAttributesToXml(writer);
121    if (writer.getService().getRequestedServerVersion().ordinal() >
122        ExchangeVersion.Exchange2007_SP1
123            .ordinal()) {
124      writer.writeAttributeValue(XmlAttributeNames.Name, this
125          .getEmailAddress().getName());
126      writer.writeAttributeValue(XmlAttributeNames.RoutingType, this
127          .getEmailAddress().getRoutingType());
128      if (this.getEmailAddress().getMailboxType() != MailboxType.Unknown) {
129        writer.writeAttributeValue(XmlAttributeNames.MailboxType, this
130            .getEmailAddress().getMailboxType());
131      }
132    }
133  }
134
135  /**
136   * Writes elements to XML.
137   *
138   * @param writer accepts EwsServiceXmlWriter
139   * @throws ServiceXmlSerializationException throws ServiceXmlSerializationException
140   */
141  @Override
142  public void writeElementsToXml(EwsServiceXmlWriter writer)
143      throws ServiceXmlSerializationException {
144    writer.writeValue(this.getEmailAddress().getAddress(),
145        XmlElementNames.EmailAddress);
146  }
147
148  /**
149   * Gets the e-mail address of the entry.
150   *
151   * @return the email address
152   */
153  public EmailAddress getEmailAddress() {
154    return this.emailAddress;
155    // set { this.SetFieldValue<EmailAddress>(ref this.emailAddress, value);
156    // }
157  }
158
159  /**
160   * Sets the e-mail address of the entry.
161   *
162   * @param value the new email address
163   */
164  public void setEmailAddress(Object value) {
165    //this.canSetFieldValue((EmailAddress) this.emailAddress, value);
166    if (this.canSetFieldValue(this.emailAddress, value)) {
167      this.emailAddress = (EmailAddress) value;
168    }
169  }
170
171  /**
172   * E-mail address was changed.
173   *
174   * @param complexProperty the complex property
175   */
176  private void emailAddressChanged(ComplexProperty complexProperty) {
177    this.changed();
178  }
179
180  /*
181   * (non-Javadoc)
182   *
183   * @see
184   * microsoft.exchange.webservices.ComplexPropertyChangedDelegateInterface
185   * #complexPropertyChanged(microsoft.exchange.webservices.ComplexProperty)
186   */
187  @Override
188  public void complexPropertyChanged(ComplexProperty complexProperty) {
189    this.emailAddressChanged(complexProperty);
190
191  }
192
193}