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    
024    package microsoft.exchange.webservices.data.core.response;
025    
026    import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
027    import microsoft.exchange.webservices.data.core.XmlElementNames;
028    import microsoft.exchange.webservices.data.core.enumeration.misc.error.ServiceError;
029    import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
030    import microsoft.exchange.webservices.data.property.complex.DelegateUser;
031    
032    import java.util.ArrayList;
033    import java.util.Collection;
034    import java.util.List;
035    
036    /**
037     * Represents the response to a delegate managent-related operation.
038     */
039    public class DelegateManagementResponse extends ServiceResponse {
040    
041      /**
042       * The read delegate users.
043       */
044      private boolean readDelegateUsers;
045    
046      /**
047       * The delegate users.
048       */
049      private List<DelegateUser> delegateUsers;
050    
051      /**
052       * The delegate user response.
053       */
054      private Collection<DelegateUserResponse> delegateUserResponses;
055    
056      /**
057       * Initializes a new instance of the class.
058       *
059       * @param readDelegateUsers the read delegate users
060       * @param delegateUsers     the delegate users
061       */
062      public DelegateManagementResponse(boolean readDelegateUsers, List<DelegateUser> delegateUsers) {
063        super();
064        this.readDelegateUsers = readDelegateUsers;
065        this.delegateUsers = delegateUsers;
066      }
067    
068      /**
069       * Reads response elements from XML.
070       *
071       * @param reader the reader
072       * @throws Exception the exception
073       */
074      @Override
075      protected void readElementsFromXml(EwsServiceXmlReader reader)
076          throws Exception {
077        if (this.getErrorCode() == ServiceError.NoError) {
078          this.delegateUserResponses = new ArrayList<DelegateUserResponse>();
079    
080          reader.read();
081    
082          if (reader.isStartElement(XmlNamespace.Messages,
083              XmlElementNames.ResponseMessages)) {
084            int delegateUserIndex = 0;
085            do {
086              reader.read();
087              if (reader.isStartElement(XmlNamespace.Messages,
088                  XmlElementNames.DelegateUserResponseMessageType)) {
089                DelegateUser delegateUser = null;
090                if (this.readDelegateUsers &&
091                    (this.delegateUsers != null)) {
092                  delegateUser = this.delegateUsers
093                      .get(delegateUserIndex);
094                }
095    
096                DelegateUserResponse delegateUserResponse =
097                    new DelegateUserResponse(
098                        readDelegateUsers, delegateUser);
099                delegateUserResponse
100                    .loadFromXml(
101                        reader,
102                        XmlElementNames.
103                            DelegateUserResponseMessageType);
104                this.delegateUserResponses.add(delegateUserResponse);
105    
106                delegateUserIndex++;
107              }
108            } while (!reader.isEndElement(XmlNamespace.Messages,
109                XmlElementNames.ResponseMessages));
110          }
111        }
112      }
113    
114      /**
115       * Gets a collection of response for each of the delegate users concerned
116       * by the operation.
117       *
118       * @return the delegate user response
119       */
120      public Collection<DelegateUserResponse> getDelegateUserResponses() {
121        return this.delegateUserResponses;
122      }
123    }