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.request; 025 026import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter; 027import microsoft.exchange.webservices.data.core.EwsUtilities; 028import microsoft.exchange.webservices.data.core.ExchangeService; 029import microsoft.exchange.webservices.data.core.PropertySet; 030import microsoft.exchange.webservices.data.core.XmlAttributeNames; 031import microsoft.exchange.webservices.data.core.XmlElementNames; 032import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling; 033import microsoft.exchange.webservices.data.core.response.GetAttachmentResponse; 034import microsoft.exchange.webservices.data.core.enumeration.property.BodyType; 035import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; 036import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 037import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException; 038import microsoft.exchange.webservices.data.property.complex.Attachment; 039import microsoft.exchange.webservices.data.property.definition.PropertyDefinitionBase; 040 041import javax.xml.stream.XMLStreamException; 042 043import java.util.ArrayList; 044import java.util.List; 045 046/** 047 * Represents a GetAttachment request. 048 */ 049public final class GetAttachmentRequest extends 050 MultiResponseServiceRequest<GetAttachmentResponse> { 051 052 /** 053 * The attachments. 054 */ 055 private List<Attachment> attachments = new ArrayList<Attachment>(); 056 057 /** 058 * The additional property. 059 */ 060 private List<PropertyDefinitionBase> additionalProperties = 061 new ArrayList<PropertyDefinitionBase>(); 062 063 /** 064 * The body type. 065 */ 066 private BodyType bodyType; 067 068 /** 069 * Initializes a new instance of the GetAttachmentRequest class. 070 * 071 * @param service The service. 072 * @param errorHandlingMode Indicates how errors should be handled. 073 * @throws Exception 074 */ 075 public GetAttachmentRequest(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.validateParamCollection(this.getAttachments().iterator(), "Attachments"); 089 for (int i = 0; i < this.getAdditionalProperties().size(); i++) { 090 EwsUtilities.validateParam(this.getAdditionalProperties().get(i), 091 String.format("AdditionalProperties[%d]", i)); 092 } 093 } 094 095 /** 096 * Creates the service response. 097 * 098 * @param service The service. 099 * @param responseIndex Index of the response. 100 * @return Service response. 101 */ 102 @Override 103 protected GetAttachmentResponse createServiceResponse( 104 ExchangeService service, int responseIndex) { 105 return new GetAttachmentResponse(this.getAttachments().get( 106 responseIndex)); 107 } 108 109 /** 110 * Gets the expected response message count. 111 * 112 * @return Number of expected response messages. 113 */ 114 @Override 115 protected int getExpectedResponseMessageCount() { 116 return this.getAttachments().size(); 117 } 118 119 /** 120 * Gets the name of the XML element. 121 * 122 * @return XML element name 123 */ 124 @Override public String getXmlElementName() { 125 return XmlElementNames.GetAttachment; 126 } 127 128 /** 129 * Gets the name of the response XML element. 130 * 131 * @return XML element name 132 */ 133 @Override 134 protected String getResponseXmlElementName() { 135 return XmlElementNames.GetAttachmentResponse; 136 } 137 138 /** 139 * Gets the name of the response message XML element. 140 * 141 * @return XML element name 142 */ 143 @Override 144 protected String getResponseMessageXmlElementName() { 145 return XmlElementNames.GetAttachmentResponseMessage; 146 } 147 148 /** 149 * Writes XML elements. 150 * 151 * @param writer the writer 152 * @throws XMLStreamException the XML stream exception 153 * @throws ServiceXmlSerializationException the service xml serialization exception 154 */ 155 @Override 156 protected void writeElementsToXml(EwsServiceXmlWriter writer) 157 throws XMLStreamException, ServiceXmlSerializationException { 158 if ((this.getBodyType() != null) 159 || this.getAdditionalProperties().size() > 0) { 160 writer.writeStartElement(XmlNamespace.Messages, 161 XmlElementNames.AttachmentShape); 162 163 if (this.getBodyType() != null) { 164 writer.writeElementValue(XmlNamespace.Types, 165 XmlElementNames.BodyType, this.getBodyType()); 166 } 167 168 if (this.getAdditionalProperties().size() > 0) { 169 PropertySet.writeAdditionalPropertiesToXml(writer, this.getAdditionalProperties().iterator()); 170 } 171 172 writer.writeEndElement(); // AttachmentShape 173 } 174 175 writer.writeStartElement(XmlNamespace.Messages, 176 XmlElementNames.AttachmentIds); 177 178 for (Attachment attachment : this.getAttachments()) { 179 writer.writeStartElement(XmlNamespace.Types, 180 XmlElementNames.AttachmentId); 181 writer 182 .writeAttributeValue(XmlAttributeNames.Id, attachment 183 .getId()); 184 writer.writeEndElement(); 185 } 186 187 writer.writeEndElement(); 188 } 189 190 /** 191 * Gets the request version. 192 * 193 * @return Earliest Exchange version in which this request is supported. 194 */ 195 @Override 196 protected ExchangeVersion getMinimumRequiredServerVersion() { 197 return ExchangeVersion.Exchange2007_SP1; 198 } 199 200 /** 201 * Gets the attachments. 202 * 203 * @return the attachments 204 */ 205 public List<Attachment> getAttachments() { 206 return this.attachments; 207 } 208 209 /** 210 * Gets the additional property. 211 * 212 * @return the additional property 213 */ 214 public List<PropertyDefinitionBase> getAdditionalProperties() { 215 return this.additionalProperties; 216 } 217 218 /** 219 * Gets the type of the body. 220 * 221 * @return the body type 222 */ 223 public BodyType getBodyType() { 224 225 return this.bodyType; 226 227 } 228 229 /** 230 * Sets the body type. 231 * 232 * @param bodyType the new body type 233 */ 234 public void setBodyType(BodyType bodyType) { 235 this.bodyType = bodyType; 236 } 237 238}