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.request;
025    
026    import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
027    import microsoft.exchange.webservices.data.core.EwsUtilities;
028    import microsoft.exchange.webservices.data.core.ExchangeService;
029    import microsoft.exchange.webservices.data.core.XmlAttributeNames;
030    import microsoft.exchange.webservices.data.core.XmlElementNames;
031    import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling;
032    import microsoft.exchange.webservices.data.core.response.CreateAttachmentResponse;
033    import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
034    import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
035    import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
036    import microsoft.exchange.webservices.data.property.complex.Attachment;
037    import microsoft.exchange.webservices.data.property.complex.ItemAttachment;
038    
039    import java.util.ArrayList;
040    import java.util.ListIterator;
041    
042    /**
043     * Represents a CreateAttachment request.
044     */
045    
046    public final class CreateAttachmentRequest extends
047        MultiResponseServiceRequest<CreateAttachmentResponse> {
048    
049      /**
050       * The parent item id.
051       */
052      private String parentItemId;
053    
054      /**
055       * The attachments.
056       */
057      private ArrayList<Attachment> attachments = new ArrayList<Attachment>();
058    
059      /**
060       * Gets the attachments.
061       *
062       * @return attachments
063       */
064      public ArrayList<Attachment> getAttachments() {
065        return attachments;
066      }
067    
068      /**
069       * Initializes a new instance of the class.
070       *
071       * @param service           the service
072       * @param errorHandlingMode the error handling mode
073       * @throws Exception
074       */
075      public CreateAttachmentRequest(ExchangeService service, ServiceErrorHandling errorHandlingMode)
076          throws Exception {
077        super(service, errorHandlingMode);
078      }
079    
080      /**
081       * Validate request..
082       *
083       * @throws Exception the exception
084       */
085      @Override
086      protected void validate() throws Exception {
087        super.validate();
088        EwsUtilities.validateParam(this.parentItemId, "ParentItemId");
089      }
090    
091      /**
092       * Gets the expected response message count.
093       *
094       * @return Number of expected response messages.
095       */
096      @Override
097      protected int getExpectedResponseMessageCount() {
098        return this.attachments.size();
099      }
100    
101      /**
102       * Gets the name of the XML element.
103       *
104       * @return XML element name.
105       */
106      @Override public String getXmlElementName() {
107        return XmlElementNames.CreateAttachment;
108      }
109    
110      /**
111       * Gets the name of the response XML element.
112       *
113       * @return XML element name.
114       */
115      @Override
116      protected String getResponseXmlElementName() {
117        return XmlElementNames.CreateAttachmentResponse;
118      }
119    
120      /**
121       * Gets the name of the response message XML element.
122       *
123       * @return XML element name.
124       */
125      @Override
126      protected String getResponseMessageXmlElementName() {
127        return XmlElementNames.CreateAttachmentResponseMessage;
128      }
129    
130      /**
131       * Gets the request version.
132       *
133       * @return Earliest Exchange version in which this request is supported.
134       */
135      @Override
136      protected ExchangeVersion getMinimumRequiredServerVersion() {
137        return ExchangeVersion.Exchange2007_SP1;
138      }
139    
140      /**
141       * Gets a value indicating whether the TimeZoneContext SOAP header should be
142       * emitted.
143       */
144      protected boolean emitTimeZoneHeader() throws ServiceLocalException, Exception {
145        {
146    
147          ListIterator<Attachment> items = this.getAttachments()
148              .listIterator();
149    
150          while (items.hasNext())
151    
152          {
153    
154            ItemAttachment itemAttachment = (ItemAttachment) items.next();
155    
156            if ((itemAttachment.getItem() != null)
157                && itemAttachment
158                .getItem()
159                .getIsTimeZoneHeaderRequired(false /* isUpdateOperation */)) {
160              return true;
161            }
162          }
163    
164          return false;
165        }
166      }
167    
168      /**
169       * Gets the parent item id.
170       *
171       * @return parentItemId
172       */
173      public String getParentItemId() {
174        return parentItemId;
175      }
176    
177      /**
178       * Sets the parent item id.
179       *
180       * @param parentItemId the new parent item id
181       */
182      public void setParentItemId(String parentItemId) {
183        this.parentItemId = parentItemId;
184      }
185    
186      /**
187       * Writes the elements to XML.
188       *
189       * @param writer the writer
190       * @throws Exception the exception
191       */
192      @Override
193      protected void writeElementsToXml(EwsServiceXmlWriter writer)
194          throws Exception {
195    
196        writer.writeStartElement(XmlNamespace.Messages,
197            XmlElementNames.ParentItemId);
198        writer.writeAttributeValue(XmlAttributeNames.Id, this.parentItemId);
199        writer.writeEndElement();
200    
201        writer.writeStartElement(XmlNamespace.Messages,
202            XmlElementNames.Attachments);
203        for (Attachment attachment : this.attachments) {
204          attachment.writeToXml(writer, attachment.getXmlElementName());
205        }
206        writer.writeEndElement();
207    
208      }
209    
210      /**
211       * Creates the service response.
212       *
213       * @param service       the service
214       * @param responseIndex the response index
215       * @return the creates the attachment response
216       */
217      @Override
218      protected CreateAttachmentResponse createServiceResponse(
219          ExchangeService service, int responseIndex) {
220        return new CreateAttachmentResponse(
221            this.attachments.get(responseIndex));
222      }
223    
224    }