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.service.item; 025 026import microsoft.exchange.webservices.data.attribute.Attachable; 027import microsoft.exchange.webservices.data.attribute.ServiceObjectDefinition; 028import microsoft.exchange.webservices.data.core.EwsUtilities; 029import microsoft.exchange.webservices.data.core.ExchangeService; 030import microsoft.exchange.webservices.data.core.PropertySet; 031import microsoft.exchange.webservices.data.core.XmlElementNames; 032import microsoft.exchange.webservices.data.core.service.ServiceObject; 033import microsoft.exchange.webservices.data.core.service.schema.ItemSchema; 034import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema; 035import microsoft.exchange.webservices.data.core.enumeration.service.calendar.AffectedTaskOccurrence; 036import microsoft.exchange.webservices.data.core.enumeration.service.ConflictResolutionMode; 037import microsoft.exchange.webservices.data.core.enumeration.service.DeleteMode; 038import microsoft.exchange.webservices.data.core.enumeration.service.EffectiveRights; 039import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; 040import microsoft.exchange.webservices.data.core.enumeration.property.Importance; 041import microsoft.exchange.webservices.data.core.enumeration.service.MessageDisposition; 042import microsoft.exchange.webservices.data.core.enumeration.service.ResponseActions; 043import microsoft.exchange.webservices.data.core.enumeration.service.SendCancellationsMode; 044import microsoft.exchange.webservices.data.core.enumeration.service.SendInvitationsMode; 045import microsoft.exchange.webservices.data.core.enumeration.service.SendInvitationsOrCancellationsMode; 046import microsoft.exchange.webservices.data.core.enumeration.property.Sensitivity; 047import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling; 048import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName; 049import microsoft.exchange.webservices.data.core.exception.misc.InvalidOperationException; 050import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException; 051import microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException; 052import microsoft.exchange.webservices.data.property.complex.Attachment; 053import microsoft.exchange.webservices.data.property.complex.AttachmentCollection; 054import microsoft.exchange.webservices.data.property.complex.ConversationId; 055import microsoft.exchange.webservices.data.property.complex.ExtendedPropertyCollection; 056import microsoft.exchange.webservices.data.property.complex.FolderId; 057import microsoft.exchange.webservices.data.property.complex.InternetMessageHeaderCollection; 058import microsoft.exchange.webservices.data.property.complex.ItemAttachment; 059import microsoft.exchange.webservices.data.property.complex.ItemId; 060import microsoft.exchange.webservices.data.property.complex.MessageBody; 061import microsoft.exchange.webservices.data.property.complex.MimeContent; 062import microsoft.exchange.webservices.data.property.complex.StringList; 063import microsoft.exchange.webservices.data.property.complex.UniqueBody; 064import microsoft.exchange.webservices.data.property.definition.ExtendedPropertyDefinition; 065import microsoft.exchange.webservices.data.property.definition.PropertyDefinition; 066 067import java.util.ArrayList; 068import java.util.Date; 069import java.util.EnumSet; 070import java.util.ListIterator; 071 072/** 073 * Represents a generic item. Properties available on item are defined in the 074 * ItemSchema class. 075 */ 076@Attachable 077@ServiceObjectDefinition(xmlElementName = XmlElementNames.Item) 078public class Item extends ServiceObject { 079 080 /** 081 * The parent attachment. 082 */ 083 private ItemAttachment parentAttachment; 084 085 /** 086 * Initializes an unsaved local instance of <see cref="Item"/>. To bind to 087 * an existing item, use Item.Bind() instead. 088 * 089 * @param service the service 090 * @throws Exception the exception 091 */ 092 public Item(ExchangeService service) throws Exception { 093 super(service); 094 } 095 096 /** 097 * Initializes a new instance of the item class. 098 * 099 * @param parentAttachment The parent attachment. 100 * @throws Exception the exception 101 */ 102 public Item(final ItemAttachment parentAttachment) throws Exception { 103 this(parentAttachment.getOwner().getService()); 104 this.parentAttachment = parentAttachment; 105 } 106 107 /** 108 * Binds to an existing item, whatever its actual type is, and loads the 109 * specified set of property. Calling this method results in a call to 110 * EWS. 111 * 112 * @param service The service to use to bind to the item. 113 * @param id The Id of the item to bind to. 114 * @param propertySet The set of property to load. 115 * @return An Item instance representing the item corresponding to the 116 * specified Id. 117 * @throws Exception the exception 118 */ 119 public static Item bind(ExchangeService service, ItemId id, 120 PropertySet propertySet) throws Exception { 121 return service.bindToItem(Item.class, id, propertySet); 122 } 123 124 /** 125 * Binds to an existing item, whatever its actual type is, and loads the 126 * specified set of property. Calling this method results in a call to 127 * EWS. 128 * 129 * @param service The service to use to bind to the item. 130 * @param id The Id of the item to bind to. 131 * @return An Item instance representing the item corresponding to the 132 * specified Id. 133 * @throws Exception the exception 134 */ 135 public static Item bind(ExchangeService service, ItemId id) 136 throws Exception { 137 return Item.bind(service, id, PropertySet.getFirstClassProperties()); 138 } 139 140 /** 141 * Internal method to return the schema associated with this type of object. 142 * 143 * @return The schema associated with this type of object. 144 */ 145 @Override public ServiceObjectSchema getSchema() { 146 return ItemSchema.getInstance(); 147 } 148 149 /** 150 * Gets the minimum required server version. 151 * 152 * @return Earliest Exchange version in which this service object type is 153 * supported. 154 */ 155 @Override public ExchangeVersion getMinimumRequiredServerVersion() { 156 157 return ExchangeVersion.Exchange2007_SP1; 158 } 159 160 /** 161 * Throws exception if this is attachment. 162 * 163 * @throws InvalidOperationException the invalid operation exception 164 */ 165 protected void throwIfThisIsAttachment() throws InvalidOperationException { 166 if (this.isAttachment()) { 167 throw new InvalidOperationException("This operation isn't supported on attachments."); 168 } 169 } 170 171 /** 172 * The property definition for the Id of this object. 173 * 174 * @return A PropertyDefinition instance. 175 */ 176 public PropertyDefinition getIdPropertyDefinition() { 177 return ItemSchema.Id; 178 } 179 180 /** 181 * The property definition for the Id of this object. 182 * 183 * @param propertySet the property set 184 * @throws Exception the exception 185 */ 186 @Override 187 protected void internalLoad(PropertySet propertySet) throws Exception { 188 this.throwIfThisIsNew(); 189 this.throwIfThisIsAttachment(); 190 191 ArrayList<Item> itemArry = new ArrayList<Item>(); 192 itemArry.add(this); 193 this.getService().internalLoadPropertiesForItems(itemArry, propertySet, 194 ServiceErrorHandling.ThrowOnError); 195 } 196 197 /** 198 * Deletes the object. 199 * 200 * @param deleteMode the delete mode 201 * @param sendCancellationsMode the send cancellations mode 202 * @param affectedTaskOccurrences the affected task occurrences 203 * @throws ServiceLocalException the service local exception 204 * @throws Exception the exception 205 */ 206 @Override 207 protected void internalDelete(DeleteMode deleteMode, 208 SendCancellationsMode sendCancellationsMode, 209 AffectedTaskOccurrence affectedTaskOccurrences) 210 throws ServiceLocalException, Exception { 211 this.throwIfThisIsNew(); 212 this.throwIfThisIsAttachment(); 213 214 // If sendCancellationsMode is null, use the default value that's 215 // appropriate for item type. 216 if (sendCancellationsMode == null) { 217 sendCancellationsMode = this.getDefaultSendCancellationsMode(); 218 } 219 220 // If affectedTaskOccurrences is null, use the default value that's 221 // appropriate for item type. 222 if (affectedTaskOccurrences == null) { 223 affectedTaskOccurrences = this.getDefaultAffectedTaskOccurrences(); 224 } 225 226 this.getService().deleteItem(this.getId(), deleteMode, 227 sendCancellationsMode, affectedTaskOccurrences); 228 } 229 230 /** 231 * Create item. 232 * 233 * @param parentFolderId the parent folder id 234 * @param messageDisposition the message disposition 235 * @param sendInvitationsMode the send invitations mode 236 * @throws Exception the exception 237 */ 238 protected void internalCreate(FolderId parentFolderId, 239 MessageDisposition messageDisposition, 240 SendInvitationsMode sendInvitationsMode) throws Exception { 241 this.throwIfThisIsNotNew(); 242 this.throwIfThisIsAttachment(); 243 244 if (this.isNew() || this.isDirty()) { 245 this.getService().createItem( 246 this, 247 parentFolderId, 248 messageDisposition, 249 sendInvitationsMode != null ? sendInvitationsMode : this 250 .getDefaultSendInvitationsMode()); 251 252 this.getAttachments().save(); 253 } 254 } 255 256 /** 257 * Update item. 258 * 259 * @param parentFolderId the parent folder id 260 * @param conflictResolutionMode the conflict resolution mode 261 * @param messageDisposition the message disposition 262 * @param sendInvitationsOrCancellationsMode the send invitations or cancellations mode 263 * @return Updated item. 264 * @throws ServiceResponseException the service response exception 265 * @throws Exception the exception 266 */ 267 protected Item internalUpdate( 268 FolderId parentFolderId, 269 ConflictResolutionMode conflictResolutionMode, 270 MessageDisposition messageDisposition, 271 SendInvitationsOrCancellationsMode sendInvitationsOrCancellationsMode) 272 throws ServiceResponseException, Exception { 273 this.throwIfThisIsNew(); 274 this.throwIfThisIsAttachment(); 275 276 Item returnedItem = null; 277 278 if (this.isDirty() && this.getPropertyBag().getIsUpdateCallNecessary()) { 279 returnedItem = this 280 .getService() 281 .updateItem( 282 this, 283 parentFolderId, 284 conflictResolutionMode, 285 messageDisposition, 286 sendInvitationsOrCancellationsMode != null ? sendInvitationsOrCancellationsMode 287 : this 288 .getDefaultSendInvitationsOrCancellationsMode()); 289 } 290 if (this.hasUnprocessedAttachmentChanges()) { 291 // Validation of the item and its attachments occurs in 292 // UpdateItems. 293 // If we didn't update the item we still need to validate 294 // attachments. 295 this.getAttachments().validate(); 296 this.getAttachments().save(); 297 298 } 299 300 return returnedItem; 301 } 302 303 /** 304 * Gets a value indicating whether this instance has unprocessed attachment 305 * collection changes. 306 * 307 * @throws ServiceLocalException 308 */ 309 public boolean hasUnprocessedAttachmentChanges() 310 throws ServiceLocalException { 311 return this.getAttachments().hasUnprocessedChanges(); 312 313 } 314 315 /** 316 * Gets the parent attachment of this item. 317 * 318 * @return the parent attachment 319 */ 320 public ItemAttachment getParentAttachment() { 321 return this.parentAttachment; 322 } 323 324 /** 325 * Gets Id of the root item for this item. 326 * 327 * @return the root item id 328 * @throws ServiceLocalException the service local exception 329 */ 330 public ItemId getRootItemId() throws ServiceLocalException { 331 332 if (this.isAttachment()) { 333 return this.getParentAttachment().getOwner().getRootItemId(); 334 } else { 335 return this.getId(); 336 } 337 } 338 339 /** 340 * Deletes the item. Calling this method results in a call to EWS. 341 * 342 * @param deleteMode the delete mode 343 * @throws ServiceLocalException the service local exception 344 * @throws Exception the exception 345 */ 346 public void delete(DeleteMode deleteMode) throws ServiceLocalException, 347 Exception { 348 this.internalDelete(deleteMode, null, null); 349 } 350 351 /** 352 * Saves this item in a specific folder. Calling this method results in at 353 * least one call to EWS. Mutliple calls to EWS might be made if attachments 354 * have been added. 355 * 356 * @param parentFolderId the parent folder id 357 * @throws Exception the exception 358 */ 359 public void save(FolderId parentFolderId) throws Exception { 360 EwsUtilities.validateParam(parentFolderId, "parentFolderId"); 361 this.internalCreate(parentFolderId, MessageDisposition.SaveOnly, null); 362 } 363 364 /** 365 * Saves this item in a specific folder. Calling this method results in at 366 * least one call to EWS. Mutliple calls to EWS might be made if attachments 367 * have been added. 368 * 369 * @param parentFolderName the parent folder name 370 * @throws Exception the exception 371 */ 372 public void save(WellKnownFolderName parentFolderName) throws Exception { 373 this.internalCreate(new FolderId(parentFolderName), 374 MessageDisposition.SaveOnly, null); 375 } 376 377 /** 378 * Saves this item in the default folder based on the item's type (for 379 * example, an e-mail message is saved to the Drafts folder). Calling this 380 * method results in at least one call to EWS. Mutliple calls to EWS might 381 * be made if attachments have been added. 382 * 383 * @throws Exception the exception 384 */ 385 public void save() throws Exception { 386 this.internalCreate(null, MessageDisposition.SaveOnly, null); 387 } 388 389 /** 390 * Applies the local changes that have been made to this item. Calling this 391 * method results in at least one call to EWS. Mutliple calls to EWS might 392 * be made if attachments have been added or removed. 393 * 394 * @param conflictResolutionMode the conflict resolution mode 395 * @throws ServiceResponseException the service response exception 396 * @throws Exception the exception 397 */ 398 public void update(ConflictResolutionMode conflictResolutionMode) 399 throws ServiceResponseException, Exception { 400 this.internalUpdate(null /* parentFolder */, conflictResolutionMode, 401 MessageDisposition.SaveOnly, null); 402 } 403 404 /** 405 * Creates a copy of this item in the specified folder. Calling this method 406 * results in a call to EWS. Copy returns null if the copy operation is 407 * across two mailboxes or between a mailbox and a public folder. 408 * 409 * @param destinationFolderId the destination folder id 410 * @return The copy of this item. 411 * @throws Exception the exception 412 */ 413 public Item copy(FolderId destinationFolderId) throws Exception { 414 415 this.throwIfThisIsNew(); 416 this.throwIfThisIsAttachment(); 417 418 EwsUtilities.validateParam(destinationFolderId, "destinationFolderId"); 419 420 return this.getService().copyItem(this.getId(), destinationFolderId); 421 } 422 423 /** 424 * Creates a copy of this item in the specified folder. Calling this method 425 * results in a call to EWS. Copy returns null if the copy operation is 426 * across two mailboxes or between a mailbox and a public folder. 427 * 428 * @param destinationFolderName the destination folder name 429 * @return The copy of this item. 430 * @throws Exception the exception 431 */ 432 public Item copy(WellKnownFolderName destinationFolderName) 433 throws Exception { 434 return this.copy(new FolderId(destinationFolderName)); 435 } 436 437 /** 438 * Moves this item to a the specified folder. Calling this method results in 439 * a call to EWS. Move returns null if the move operation is across two 440 * mailboxes or between a mailbox and a public folder. 441 * 442 * @param destinationFolderId the destination folder id 443 * @return The moved copy of this item. 444 * @throws Exception the exception 445 */ 446 public Item move(FolderId destinationFolderId) throws Exception { 447 this.throwIfThisIsNew(); 448 this.throwIfThisIsAttachment(); 449 450 EwsUtilities.validateParam(destinationFolderId, "destinationFolderId"); 451 452 return this.getService().moveItem(this.getId(), destinationFolderId); 453 } 454 455 /** 456 * Moves this item to a the specified folder. Calling this method results in 457 * a call to EWS. Move returns null if the move operation is across two 458 * mailboxes or between a mailbox and a public folder. 459 * 460 * @param destinationFolderName the destination folder name 461 * @return The moved copy of this item. 462 * @throws Exception the exception 463 */ 464 public Item move(WellKnownFolderName destinationFolderName) 465 throws Exception { 466 return this.move(new FolderId(destinationFolderName)); 467 } 468 469 /** 470 * Sets the extended property. 471 * 472 * @param extendedPropertyDefinition the extended property definition 473 * @param value the value 474 * @throws Exception the exception 475 */ 476 public void setExtendedProperty( 477 ExtendedPropertyDefinition extendedPropertyDefinition, Object value) 478 throws Exception { 479 this.getExtendedProperties().setExtendedProperty( 480 extendedPropertyDefinition, value); 481 } 482 483 /** 484 * Removes an extended property. 485 * 486 * @param extendedPropertyDefinition the extended property definition 487 * @return True if property was removed. 488 * @throws Exception the exception 489 */ 490 public boolean removeExtendedProperty( 491 ExtendedPropertyDefinition extendedPropertyDefinition) 492 throws Exception { 493 return this.getExtendedProperties().removeExtendedProperty( 494 extendedPropertyDefinition); 495 } 496 497 /** 498 * Validates this instance. 499 * 500 * @throws Exception the exception 501 */ 502 @Override public void validate() throws Exception { 503 super.validate(); 504 this.getAttachments().validate(); 505 } 506 507 /** 508 * Gets a value indicating whether a time zone SOAP header should be emitted 509 * in a CreateItem or UpdateItem request so this item can be property saved 510 * or updated. 511 * 512 * @param isUpdateOperation Indicates whether the operation being petrformed is an update 513 * operation. 514 * @return true if a time zone SOAP header should be emitted; 515 * otherwise,false 516 */ 517 public boolean getIsTimeZoneHeaderRequired(boolean isUpdateOperation) 518 throws Exception { 519 // Starting E14SP2, attachment will be sent along with CreateItem 520 // request. 521 // if the attachment used to require the Timezone header, CreateItem 522 // request should do so too. 523 // 524 525 if (!isUpdateOperation 526 && (this.getService().getRequestedServerVersion().ordinal() >= ExchangeVersion.Exchange2010_SP2 527 .ordinal())) { 528 529 ListIterator<Attachment> items = this.getAttachments().getItems() 530 .listIterator(); 531 532 while (items.hasNext()) { 533 534 ItemAttachment itemAttachment = (ItemAttachment) items.next(); 535 536 if ((itemAttachment.getItem() != null) 537 && itemAttachment 538 .getItem() 539 .getIsTimeZoneHeaderRequired(false /* isUpdateOperation */)) { 540 return true; 541 } 542 } 543 } 544 545 /* 546 * for (ItemAttachment itemAttachment : 547 * this.getAttachments().OfType<ItemAttachment>().getc) { if 548 * ((itemAttachment.Item != null) && 549 * itemAttachment.Item.GetIsTimeZoneHeaderRequired(false /* // 550 * isUpdateOperation )) { return true; } } 551 */ 552 553 return super.getIsTimeZoneHeaderRequired(isUpdateOperation); 554 } 555 556 // region Properties 557 558 /** 559 * Gets a value indicating whether the item is an attachment. 560 * 561 * @return true, if is attachment 562 */ 563 public boolean isAttachment() { 564 return this.parentAttachment != null; 565 } 566 567 /** 568 * Gets a value indicating whether this object is a real store item, or if 569 * it's a local object that has yet to be saved. 570 * 571 * @return the checks if is new 572 * @throws ServiceLocalException the service local exception 573 */ 574 public boolean getIsNew() throws ServiceLocalException { 575 576 // Item attachments don't have an Id, need to check whether the 577 // parentAttachment is new or not. 578 if (this.isAttachment()) { 579 return this.getParentAttachment().isNew(); 580 } else { 581 return super.isNew(); 582 } 583 } 584 585 /** 586 * Gets the Id of this item. 587 * 588 * @return the id 589 * @throws ServiceLocalException the service local exception 590 */ 591 public ItemId getId() throws ServiceLocalException { 592 return getPropertyBag().getObjectFromPropertyDefinition( 593 getIdPropertyDefinition()); 594 } 595 596 /** 597 * Get the MIME content of this item. 598 * 599 * @return the mime content 600 * @throws ServiceLocalException the service local exception 601 */ 602 public MimeContent getMimeContent() throws ServiceLocalException { 603 return getPropertyBag().getObjectFromPropertyDefinition( 604 ItemSchema.MimeContent); 605 } 606 607 /** 608 * Sets the mime content. 609 * 610 * @param value the new mime content 611 * @throws Exception the exception 612 */ 613 public void setMimeContent(MimeContent value) throws Exception { 614 this.getPropertyBag().setObjectFromPropertyDefinition( 615 ItemSchema.MimeContent, value); 616 } 617 618 /** 619 * Gets the Id of the parent folder of this item. 620 * 621 * @return the parent folder id 622 * @throws ServiceLocalException the service local exception 623 */ 624 public FolderId getParentFolderId() throws ServiceLocalException { 625 return getPropertyBag().getObjectFromPropertyDefinition( 626 ItemSchema.ParentFolderId); 627 } 628 629 /** 630 * Gets the sensitivity of this item. 631 * 632 * @return the sensitivity 633 * @throws ServiceLocalException the service local exception 634 */ 635 public Sensitivity getSensitivity() throws ServiceLocalException { 636 return getPropertyBag().getObjectFromPropertyDefinition( 637 ItemSchema.Sensitivity); 638 } 639 640 /** 641 * Sets the sensitivity. 642 * 643 * @param value the new sensitivity 644 * @throws Exception the exception 645 */ 646 public void setSensitivity(Sensitivity value) throws Exception { 647 this.getPropertyBag().setObjectFromPropertyDefinition( 648 ItemSchema.Sensitivity, value); 649 } 650 651 /** 652 * Gets a list of the attachments to this item. 653 * 654 * @return the attachments 655 * @throws ServiceLocalException the service local exception 656 */ 657 public AttachmentCollection getAttachments() throws ServiceLocalException { 658 return getPropertyBag().getObjectFromPropertyDefinition( 659 ItemSchema.Attachments); 660 } 661 662 /** 663 * Gets the time when this item was received. 664 * 665 * @return the date time received 666 * @throws ServiceLocalException the service local exception 667 */ 668 public Date getDateTimeReceived() throws ServiceLocalException { 669 return getPropertyBag().getObjectFromPropertyDefinition( 670 ItemSchema.DateTimeReceived); 671 } 672 673 /** 674 * Gets the size of this item. 675 * 676 * @return the size 677 * @throws ServiceLocalException the service local exception 678 */ 679 public int getSize() throws ServiceLocalException { 680 return getPropertyBag().<Integer>getObjectFromPropertyDefinition(ItemSchema.Size); 681 } 682 683 /** 684 * Gets the list of categories associated with this item. 685 * 686 * @return the categories 687 * @throws ServiceLocalException the service local exception 688 */ 689 public StringList getCategories() throws ServiceLocalException { 690 return getPropertyBag().getObjectFromPropertyDefinition( 691 ItemSchema.Categories); 692 } 693 694 /** 695 * Sets the categories. 696 * 697 * @param value the new categories 698 * @throws Exception the exception 699 */ 700 public void setCategories(StringList value) throws Exception { 701 this.getPropertyBag().setObjectFromPropertyDefinition( 702 ItemSchema.Categories, value); 703 } 704 705 /** 706 * Gets the culture associated with this item. 707 * 708 * @return the culture 709 * @throws ServiceLocalException the service local exception 710 */ 711 public String getCulture() throws ServiceLocalException { 712 return getPropertyBag().getObjectFromPropertyDefinition( 713 ItemSchema.Culture); 714 } 715 716 /** 717 * Sets the culture. 718 * 719 * @param value the new culture 720 * @throws Exception the exception 721 */ 722 public void setCulture(String value) throws Exception { 723 this.getPropertyBag().setObjectFromPropertyDefinition( 724 ItemSchema.Culture, value); 725 } 726 727 /** 728 * Gets the importance of this item. 729 * 730 * @return the importance 731 * @throws ServiceLocalException the service local exception 732 */ 733 public Importance getImportance() throws ServiceLocalException { 734 return getPropertyBag().getObjectFromPropertyDefinition( 735 ItemSchema.Importance); 736 } 737 738 /** 739 * Sets the importance. 740 * 741 * @param value the new importance 742 * @throws Exception the exception 743 */ 744 public void setImportance(Importance value) throws Exception { 745 this.getPropertyBag().setObjectFromPropertyDefinition( 746 ItemSchema.Importance, value); 747 } 748 749 /** 750 * Gets the In-Reply-To reference of this item. 751 * 752 * @return the in reply to 753 * @throws ServiceLocalException the service local exception 754 */ 755 public String getInReplyTo() throws ServiceLocalException { 756 return getPropertyBag().getObjectFromPropertyDefinition( 757 ItemSchema.InReplyTo); 758 } 759 760 /** 761 * Sets the in reply to. 762 * 763 * @param value the new in reply to 764 * @throws Exception the exception 765 */ 766 public void setInReplyTo(String value) throws Exception { 767 this.getPropertyBag().setObjectFromPropertyDefinition( 768 ItemSchema.InReplyTo, value); 769 } 770 771 /** 772 * Gets a value indicating whether the message has been submitted to be 773 * sent. 774 * 775 * @return the checks if is submitted 776 * @throws ServiceLocalException the service local exception 777 */ 778 public boolean getIsSubmitted() throws ServiceLocalException { 779 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition(ItemSchema.IsSubmitted); 780 } 781 782 /** 783 * Gets a value indicating whether the message has been submitted to be 784 * sent. 785 * 786 * @return the checks if is associated 787 * @throws ServiceLocalException the service local exception 788 */ 789 public boolean getIsAssociated() throws ServiceLocalException { 790 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 791 ItemSchema.IsAssociated); 792 } 793 794 /** 795 * Gets a value indicating whether the message has been submitted to be 796 * sent. 797 * 798 * @return the checks if is draft 799 * @throws ServiceLocalException the service local exception 800 */ 801 public boolean getIsDraft() throws ServiceLocalException { 802 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 803 ItemSchema.IsDraft); 804 } 805 806 /** 807 * Gets a value indicating whether the item has been sent by the current 808 * authenticated user. 809 * 810 * @return the checks if is from me 811 * @throws ServiceLocalException the service local exception 812 */ 813 public boolean getIsFromMe() throws ServiceLocalException { 814 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 815 ItemSchema.IsFromMe); 816 } 817 818 /** 819 * Gets a value indicating whether the item is a resend of another item. 820 * 821 * @return the checks if is resend 822 * @throws ServiceLocalException the service local exception 823 */ 824 public boolean getIsResend() throws ServiceLocalException { 825 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 826 ItemSchema.IsResend); 827 } 828 829 /** 830 * Gets a value indicating whether the item has been modified since it was 831 * created. 832 * 833 * @return the checks if is unmodified 834 * @throws ServiceLocalException the service local exception 835 */ 836 public boolean getIsUnmodified() throws ServiceLocalException { 837 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 838 ItemSchema.IsUnmodified); 839 } 840 841 /** 842 * Gets a list of Internet headers for this item. 843 * 844 * @return the internet message headers 845 * @throws ServiceLocalException the service local exception 846 */ 847 public InternetMessageHeaderCollection getInternetMessageHeaders() 848 throws ServiceLocalException { 849 return getPropertyBag().getObjectFromPropertyDefinition( 850 ItemSchema.InternetMessageHeaders); 851 } 852 853 /** 854 * Gets the date and time this item was sent. 855 * 856 * @return the date time sent 857 * @throws ServiceLocalException the service local exception 858 */ 859 public Date getDateTimeSent() throws ServiceLocalException { 860 return getPropertyBag().getObjectFromPropertyDefinition( 861 ItemSchema.DateTimeSent); 862 } 863 864 /** 865 * Gets the date and time this item was created. 866 * 867 * @return the date time created 868 * @throws ServiceLocalException the service local exception 869 */ 870 public Date getDateTimeCreated() throws ServiceLocalException { 871 return getPropertyBag().getObjectFromPropertyDefinition( 872 ItemSchema.DateTimeCreated); 873 } 874 875 /** 876 * Gets a value indicating which response actions are allowed on this item. 877 * Examples of response actions are Reply and Forward. 878 * 879 * @return the allowed response actions 880 * @throws ServiceLocalException the service local exception 881 */ 882 public EnumSet<ResponseActions> getAllowedResponseActions() 883 throws ServiceLocalException { 884 return getPropertyBag().getObjectFromPropertyDefinition( 885 ItemSchema.AllowedResponseActions); 886 } 887 888 /** 889 * Gets the date and time when the reminder is due for this item. 890 * 891 * @return the reminder due by 892 * @throws ServiceLocalException the service local exception 893 */ 894 public Date getReminderDueBy() throws ServiceLocalException { 895 return getPropertyBag().getObjectFromPropertyDefinition( 896 ItemSchema.ReminderDueBy); 897 } 898 899 /** 900 * Sets the reminder due by. 901 * 902 * @param value the new reminder due by 903 * @throws Exception the exception 904 */ 905 public void setReminderDueBy(Date value) throws Exception { 906 this.getPropertyBag().setObjectFromPropertyDefinition( 907 ItemSchema.ReminderDueBy, value); 908 } 909 910 /** 911 * Gets a value indicating whether a reminder is set for this item. 912 * 913 * @return the checks if is reminder set 914 * @throws ServiceLocalException the service local exception 915 */ 916 public boolean getIsReminderSet() throws ServiceLocalException { 917 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 918 ItemSchema.IsReminderSet); 919 } 920 921 /** 922 * Sets the checks if is reminder set. 923 * 924 * @param value the new checks if is reminder set 925 * @throws Exception the exception 926 */ 927 public void setIsReminderSet(Boolean value) throws Exception { 928 this.getPropertyBag().setObjectFromPropertyDefinition( 929 ItemSchema.IsReminderSet, value); 930 } 931 932 /** 933 * Gets the number of minutes before the start of this item when the 934 * reminder should be triggered. 935 * 936 * @return the reminder minutes before start 937 * @throws ServiceLocalException the service local exception 938 */ 939 public int getReminderMinutesBeforeStart() throws ServiceLocalException { 940 return getPropertyBag().<Integer>getObjectFromPropertyDefinition( 941 ItemSchema.ReminderMinutesBeforeStart); 942 } 943 944 /** 945 * Sets the reminder minutes before start. 946 * 947 * @param value the new reminder minutes before start 948 * @throws Exception the exception 949 */ 950 public void setReminderMinutesBeforeStart(int value) throws Exception { 951 this.getPropertyBag().setObjectFromPropertyDefinition( 952 ItemSchema.ReminderMinutesBeforeStart, value); 953 } 954 955 /** 956 * Gets a text summarizing the Cc receipients of this item. 957 * 958 * @return the display cc 959 * @throws ServiceLocalException the service local exception 960 */ 961 public String getDisplayCc() throws ServiceLocalException { 962 return getPropertyBag().getObjectFromPropertyDefinition( 963 ItemSchema.DisplayCc); 964 } 965 966 /** 967 * Gets a text summarizing the To recipients of this item. 968 * 969 * @return the display to 970 * @throws ServiceLocalException the service local exception 971 */ 972 public String getDisplayTo() throws ServiceLocalException { 973 return getPropertyBag().getObjectFromPropertyDefinition( 974 ItemSchema.DisplayTo); 975 } 976 977 /** 978 * Gets a value indicating whether the item has attachments. 979 * 980 * @return the checks for attachments 981 * @throws ServiceLocalException the service local exception 982 */ 983 public boolean getHasAttachments() throws ServiceLocalException { 984 return getPropertyBag().<Boolean>getObjectFromPropertyDefinition( 985 ItemSchema.HasAttachments); 986 } 987 988 /** 989 * Gets the body of this item. 990 * 991 * @return MessageBody 992 * @throws ServiceLocalException the service local exception 993 */ 994 public MessageBody getBody() throws ServiceLocalException { 995 return getPropertyBag().getObjectFromPropertyDefinition(ItemSchema.Body); 996 } 997 998 /** 999 * Sets the body. 1000 * 1001 * @param value the new body 1002 * @throws Exception the exception 1003 */ 1004 public void setBody(MessageBody value) throws Exception { 1005 this.getPropertyBag().setObjectFromPropertyDefinition(ItemSchema.Body, 1006 value); 1007 } 1008 1009 /** 1010 * Gets the custom class name of this item. 1011 * 1012 * @return the item class 1013 * @throws ServiceLocalException the service local exception 1014 */ 1015 public String getItemClass() throws ServiceLocalException { 1016 return getPropertyBag().getObjectFromPropertyDefinition( 1017 ItemSchema.ItemClass); 1018 } 1019 1020 /** 1021 * Sets the item class. 1022 * 1023 * @param value the new item class 1024 * @throws Exception the exception 1025 */ 1026 public void setItemClass(String value) throws Exception { 1027 this.getPropertyBag().setObjectFromPropertyDefinition( 1028 ItemSchema.ItemClass, value); 1029 } 1030 1031 /** 1032 * Sets the subject. 1033 * 1034 * @param subject the new subject 1035 * @throws Exception the exception 1036 */ 1037 public void setSubject(String subject) throws Exception { 1038 this.getPropertyBag().setObjectFromPropertyDefinition( 1039 ItemSchema.Subject, subject); 1040 } 1041 1042 /** 1043 * Gets the subject. 1044 * 1045 * @return the subject 1046 * @throws ServiceLocalException the service local exception 1047 */ 1048 public String getSubject() throws ServiceLocalException { 1049 return getPropertyBag().getObjectFromPropertyDefinition( 1050 ItemSchema.Subject); 1051 } 1052 1053 /** 1054 * Gets the query string that should be appended to the Exchange Web client 1055 * URL to open this item using the appropriate read form in a web browser. 1056 * 1057 * @return the web client read form query string 1058 * @throws ServiceLocalException the service local exception 1059 */ 1060 public String getWebClientReadFormQueryString() 1061 throws ServiceLocalException { 1062 return getPropertyBag().getObjectFromPropertyDefinition( 1063 ItemSchema.WebClientReadFormQueryString); 1064 } 1065 1066 /** 1067 * Gets the query string that should be appended to the Exchange Web client 1068 * URL to open this item using the appropriate read form in a web browser. 1069 * 1070 * @return the web client edit form query string 1071 * @throws ServiceLocalException the service local exception 1072 */ 1073 public String getWebClientEditFormQueryString() 1074 throws ServiceLocalException { 1075 return getPropertyBag().getObjectFromPropertyDefinition( 1076 ItemSchema.WebClientEditFormQueryString); 1077 } 1078 1079 /** 1080 * Gets a list of extended property defined on this item. 1081 * 1082 * @return the extended property 1083 * @throws ServiceLocalException the service local exception 1084 */ 1085 @Override 1086 public ExtendedPropertyCollection getExtendedProperties() 1087 throws ServiceLocalException { 1088 return getPropertyBag().getObjectFromPropertyDefinition( 1089 ServiceObjectSchema.extendedProperties); 1090 } 1091 1092 /** 1093 * Gets a value indicating the effective rights the current authenticated 1094 * user has on this item. 1095 * 1096 * @return the effective rights 1097 * @throws ServiceLocalException the service local exception 1098 */ 1099 public EnumSet<EffectiveRights> getEffectiveRights() 1100 throws ServiceLocalException { 1101 return getPropertyBag().getObjectFromPropertyDefinition( 1102 ItemSchema.EffectiveRights); 1103 } 1104 1105 /** 1106 * Gets the name of the user who last modified this item. 1107 * 1108 * @return the last modified name 1109 * @throws ServiceLocalException the service local exception 1110 */ 1111 public String getLastModifiedName() throws ServiceLocalException { 1112 return getPropertyBag().getObjectFromPropertyDefinition( 1113 ItemSchema.LastModifiedName); 1114 } 1115 1116 /** 1117 * Gets the date and time this item was last modified. 1118 * 1119 * @return the last modified time 1120 * @throws ServiceLocalException the service local exception 1121 */ 1122 public Date getLastModifiedTime() throws ServiceLocalException { 1123 return getPropertyBag().getObjectFromPropertyDefinition( 1124 ItemSchema.LastModifiedTime); 1125 } 1126 1127 /** 1128 * Gets the Id of the conversation this item is part of. 1129 * 1130 * @return the conversation id 1131 * @throws ServiceLocalException the service local exception 1132 */ 1133 public ConversationId getConversationId() throws ServiceLocalException { 1134 return getPropertyBag().getObjectFromPropertyDefinition( 1135 ItemSchema.ConversationId); 1136 } 1137 1138 /** 1139 * Gets the body part that is unique to the conversation this item is part 1140 * of. 1141 * 1142 * @return the unique body 1143 * @throws ServiceLocalException the service local exception 1144 */ 1145 public UniqueBody getUniqueBody() throws ServiceLocalException { 1146 return getPropertyBag().getObjectFromPropertyDefinition( 1147 ItemSchema.UniqueBody); 1148 } 1149 1150 /** 1151 * Gets the default setting for how to treat affected task occurrences on 1152 * Delete. Subclasses will override this for different default behavior. 1153 * 1154 * @return the default affected task occurrences 1155 */ 1156 protected AffectedTaskOccurrence getDefaultAffectedTaskOccurrences() { 1157 return null; 1158 } 1159 1160 /** 1161 * Gets the default setting for sending cancellations on Delete. Subclasses 1162 * will override this for different default behavior. 1163 * 1164 * @return the default send cancellations mode 1165 */ 1166 protected SendCancellationsMode getDefaultSendCancellationsMode() { 1167 return null; 1168 } 1169 1170 /** 1171 * Gets the default settings for sending invitations on Save. Subclasses 1172 * will override this for different default behavior. 1173 * 1174 * @return the default send invitations mode 1175 */ 1176 protected SendInvitationsMode getDefaultSendInvitationsMode() { 1177 return null; 1178 } 1179 1180 /** 1181 * Gets the default settings for sending invitations or cancellations on 1182 * Update. Subclasses will override this for different default behavior. 1183 * 1184 * @return the default send invitations or cancellations mode 1185 */ 1186 protected SendInvitationsOrCancellationsMode getDefaultSendInvitationsOrCancellationsMode() { 1187 return null; 1188 } 1189 1190}