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.core.response;
025
026import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
027import microsoft.exchange.webservices.data.core.EwsUtilities;
028import microsoft.exchange.webservices.data.core.ExchangeService;
029import microsoft.exchange.webservices.data.core.XmlElementNames;
030import microsoft.exchange.webservices.data.core.service.ServiceObject;
031import microsoft.exchange.webservices.data.core.service.item.Item;
032
033import java.util.List;
034
035/**
036 * Represents a response to a Move or Copy operation.
037 */
038public final class MoveCopyItemResponse extends ServiceResponse implements
039                                                                IGetObjectInstanceDelegate<ServiceObject> {
040
041  /**
042   * The item.
043   */
044  private Item item;
045
046  /**
047   * Represents a response to a Move or Copy operation.
048   */
049  public MoveCopyItemResponse() {
050    super();
051  }
052
053  /**
054   * Gets Item instance.
055   *
056   * @param service        the service
057   * @param xmlElementName the xml element name
058   * @return the object instance
059   * @throws Exception the exception
060   */
061  private Item getObjectInstance(ExchangeService service,
062      String xmlElementName) throws Exception {
063    return EwsUtilities.createEwsObjectFromXmlElementName(Item.class, service, xmlElementName);
064  }
065
066  /**
067   * Reads response elements from XML.
068   *
069   * @param reader the reader
070   * @throws Exception the exception
071   */
072  @Override
073  protected void readElementsFromXml(EwsServiceXmlReader reader)
074      throws Exception {
075    super.readElementsFromXml(reader);
076    List<Item> items = reader.readServiceObjectsCollectionFromXml(
077        XmlElementNames.Items, this, false, /* clearPropertyBag */
078        null, /* requestedPropertySet */
079        false); /* summaryPropertiesOnly */
080
081    // We only receive the copied or moved item if the copy or move
082    // operation was within
083    // a single mailbox. No item is returned if the operation is
084    // cross-mailbox, from a
085    // mailbox to a public folder or from a public folder to a mailbox.
086    if (items.size() > 0) {
087      this.item = items.get(0);
088    }
089  }
090
091  /**
092   * Gets the object instance delegate.
093   *
094   * @param service        the service
095   * @param xmlElementName the xml element name
096   * @return the object instance delegate
097   * @throws Exception the exception
098   */
099  @Override
100  public ServiceObject getObjectInstanceDelegate(ExchangeService service,
101      String xmlElementName) throws Exception {
102    return this.getObjectInstance(service, xmlElementName);
103  }
104
105  /**
106   * Gets the copied or moved item. Item is null if the copy or move
107   * operation was between two mailboxes or between a mailbox and a public
108   * folder.
109   *
110   * @return the item
111   */
112  public Item getItem() {
113    return this.item;
114  }
115
116}