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.XmlAttributeNames; 030import microsoft.exchange.webservices.data.core.XmlElementNames; 031import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling; 032import microsoft.exchange.webservices.data.core.response.UpdateItemResponse; 033import microsoft.exchange.webservices.data.core.service.item.Item; 034import microsoft.exchange.webservices.data.core.enumeration.service.ConflictResolutionMode; 035import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; 036import microsoft.exchange.webservices.data.core.enumeration.service.MessageDisposition; 037import microsoft.exchange.webservices.data.core.enumeration.service.SendInvitationsOrCancellationsMode; 038import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 039import microsoft.exchange.webservices.data.core.exception.misc.ArgumentException; 040import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException; 041import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException; 042import microsoft.exchange.webservices.data.property.complex.FolderId; 043 044import java.util.ArrayList; 045import java.util.List; 046 047/** 048 * The Class UpdateItemRequest. 049 */ 050public final class UpdateItemRequest extends 051 MultiResponseServiceRequest<UpdateItemResponse> { 052 053 /** 054 * The item. 055 */ 056 private List<Item> items = new ArrayList<Item>(); 057 058 /** 059 * The saved item destination folder. 060 */ 061 private FolderId savedItemsDestinationFolder; 062 063 /** 064 * The conflict resolution mode. 065 */ 066 private ConflictResolutionMode conflictResolutionMode; 067 068 /** 069 * The message disposition. 070 */ 071 private MessageDisposition messageDisposition; 072 073 /** 074 * The send invitations or cancellations mode. 075 */ 076 private SendInvitationsOrCancellationsMode 077 sendInvitationsOrCancellationsMode; 078 079 /** 080 * Instantiates a new update item request. 081 * 082 * @param service the service 083 * @param errorHandlingMode the error handling mode 084 * @throws Exception 085 */ 086 public UpdateItemRequest(ExchangeService service, ServiceErrorHandling errorHandlingMode) 087 throws Exception { 088 super(service, errorHandlingMode); 089 } 090 091 /* 092 * (non-Javadoc) 093 * 094 * @see microsoft.exchange.webservices.ServiceRequestBase#validate() 095 */ 096 @Override 097 protected void validate() throws ServiceLocalException, Exception { 098 super.validate(); 099 EwsUtilities.validateParamCollection(this.getItems().iterator(), "Items"); 100 for (int i = 0; i < this.getItems().size(); i++) { 101 if ((this.getItems().get(i) == null) || 102 this.getItems().get(i).isNew()) { 103 throw new ArgumentException(String.format("Items[%d] is either null or does not have an Id.", i)); 104 } 105 } 106 107 if (this.savedItemsDestinationFolder != null) { 108 this.savedItemsDestinationFolder.validate(this.getService() 109 .getRequestedServerVersion()); 110 } 111 112 // Validate each item. 113 for (Item item : this.getItems()) { 114 item.validate(); 115 } 116 } 117 118 /* 119 * (non-Javadoc) 120 * 121 * @seemicrosoft.exchange.webservices.MultiResponseServiceRequest# 122 * createServiceResponse(microsoft.exchange.webservices.ExchangeService, 123 * int) 124 */ 125 @Override 126 protected UpdateItemResponse createServiceResponse(ExchangeService service, 127 int responseIndex) { 128 return new UpdateItemResponse(this.getItems().get(responseIndex)); 129 } 130 131 /* 132 * (non-Javadoc) 133 * 134 * @see 135 * microsoft.exchange.webservices.ServiceRequestBase#getXmlElementName() 136 */ 137 @Override public String getXmlElementName() { 138 return XmlElementNames.UpdateItem; 139 } 140 141 /* 142 * (non-Javadoc) 143 * 144 * @see 145 * microsoft.exchange.webservices.ServiceRequestBase 146 * #getResponseXmlElementName 147 * () 148 */ 149 @Override 150 protected String getResponseXmlElementName() { 151 return XmlElementNames.UpdateItemResponse; 152 } 153 154 /* 155 * (non-Javadoc) 156 * 157 * @seemicrosoft.exchange.webservices.MultiResponseServiceRequest# 158 * getResponseMessageXmlElementName() 159 */ 160 @Override 161 protected String getResponseMessageXmlElementName() { 162 return XmlElementNames.UpdateItemResponseMessage; 163 } 164 165 /* 166 * (non-Javadoc) 167 * 168 * @seemicrosoft.exchange.webservices.MultiResponseServiceRequest# 169 * getExpectedResponseMessageCount() 170 */ 171 @Override 172 protected int getExpectedResponseMessageCount() { 173 return this.items.size(); 174 } 175 176 /* 177 * (non-Javadoc) 178 * 179 * @see 180 * microsoft.exchange.webservices.ServiceRequestBase#writeAttributesToXml 181 * (microsoft.exchange.webservices.EwsServiceXmlWriter) 182 */ 183 @Override 184 protected void writeAttributesToXml(EwsServiceXmlWriter writer) 185 throws ServiceXmlSerializationException { 186 super.writeAttributesToXml(writer); 187 188 if (this.messageDisposition != null) { 189 writer.writeAttributeValue(XmlAttributeNames.MessageDisposition, 190 this.messageDisposition); 191 } 192 193 writer.writeAttributeValue(XmlAttributeNames.ConflictResolution, 194 this.conflictResolutionMode); 195 196 if (this.sendInvitationsOrCancellationsMode != null) { 197 writer.writeAttributeValue( 198 XmlAttributeNames.SendMeetingInvitationsOrCancellations, 199 this.sendInvitationsOrCancellationsMode); 200 } 201 } 202 203 /* 204 * (non-Javadoc) 205 * 206 * @see 207 * microsoft.exchange.webservices.ServiceRequestBase#writeElementsToXml( 208 * microsoft.exchange.webservices.EwsServiceXmlWriter) 209 */ 210 @Override 211 protected void writeElementsToXml(EwsServiceXmlWriter writer) 212 throws Exception { 213 if (this.savedItemsDestinationFolder != null) { 214 writer.writeStartElement(XmlNamespace.Messages, 215 XmlElementNames.SavedItemFolderId); 216 this.savedItemsDestinationFolder.writeToXml(writer); 217 writer.writeEndElement(); 218 } 219 220 writer.writeStartElement(XmlNamespace.Messages, 221 XmlElementNames.ItemChanges); 222 223 for (Item item : this.items) { 224 item.writeToXmlForUpdate(writer); 225 } 226 227 writer.writeEndElement(); 228 } 229 230 /* 231 * (non-Javadoc) 232 * 233 * @seemicrosoft.exchange.webservices.ServiceRequestBase# 234 * getMinimumRequiredServerVersion() 235 */ 236 @Override 237 protected ExchangeVersion getMinimumRequiredServerVersion() { 238 return ExchangeVersion.Exchange2007_SP1; 239 } 240 241 /** 242 * Gets the message disposition. 243 * 244 * @return the message disposition 245 */ 246 public MessageDisposition getMessageDisposition() { 247 return this.messageDisposition; 248 } 249 250 /** 251 * Sets the message disposition. 252 * 253 * @param value the new message disposition 254 */ 255 public void setMessageDisposition(MessageDisposition value) { 256 this.messageDisposition = value; 257 } 258 259 /** 260 * Gets the conflict resolution mode. 261 * 262 * @return the conflict resolution mode 263 */ 264 public ConflictResolutionMode getConflictResolutionMode() { 265 return this.conflictResolutionMode; 266 } 267 268 /** 269 * Sets the conflict resolution mode. 270 * 271 * @param value the new conflict resolution mode 272 */ 273 public void setConflictResolutionMode(ConflictResolutionMode value) { 274 this.conflictResolutionMode = value; 275 } 276 277 /** 278 * Gets the send invitations or cancellations mode. 279 * 280 * @return the send invitations or cancellations mode 281 */ 282 public SendInvitationsOrCancellationsMode 283 getSendInvitationsOrCancellationsMode() { 284 return this.sendInvitationsOrCancellationsMode; 285 } 286 287 /** 288 * Sets the send invitations or cancellations mode. 289 * 290 * @param value the new send invitations or cancellations mode 291 */ 292 public void setSendInvitationsOrCancellationsMode( 293 SendInvitationsOrCancellationsMode value) { 294 this.sendInvitationsOrCancellationsMode = value; 295 } 296 297 /** 298 * Gets the item. 299 * 300 * @return the item 301 */ 302 public List<Item> getItems() { 303 return this.items; 304 } 305 306 /** 307 * Gets the saved item destination folder. 308 * 309 * @return the saved item destination folder 310 */ 311 public FolderId getSavedItemsDestinationFolder() { 312 return this.savedItemsDestinationFolder; 313 } 314 315 /** 316 * Sets the saved item destination folder. 317 * 318 * @param value the new saved item destination folder 319 */ 320 public void setSavedItemsDestinationFolder(FolderId value) { 321 this.savedItemsDestinationFolder = value; 322 } 323 324}