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.service.folder;
025
026 import microsoft.exchange.webservices.data.attribute.ServiceObjectDefinition;
027 import microsoft.exchange.webservices.data.core.EwsUtilities;
028 import microsoft.exchange.webservices.data.core.ExchangeService;
029 import microsoft.exchange.webservices.data.core.PropertySet;
030 import microsoft.exchange.webservices.data.core.XmlElementNames;
031 import microsoft.exchange.webservices.data.core.response.FindItemResponse;
032 import microsoft.exchange.webservices.data.core.response.ServiceResponseCollection;
033 import microsoft.exchange.webservices.data.core.service.ServiceObject;
034 import microsoft.exchange.webservices.data.core.service.item.Item;
035 import microsoft.exchange.webservices.data.core.service.schema.FolderSchema;
036 import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema;
037 import microsoft.exchange.webservices.data.core.enumeration.service.calendar.AffectedTaskOccurrence;
038 import microsoft.exchange.webservices.data.core.enumeration.service.DeleteMode;
039 import microsoft.exchange.webservices.data.core.enumeration.service.EffectiveRights;
040 import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
041 import microsoft.exchange.webservices.data.core.enumeration.service.SendCancellationsMode;
042 import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling;
043 import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
044 import microsoft.exchange.webservices.data.core.exception.misc.InvalidOperationException;
045 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
046 import microsoft.exchange.webservices.data.property.complex.ExtendedPropertyCollection;
047 import microsoft.exchange.webservices.data.property.complex.FolderId;
048 import microsoft.exchange.webservices.data.property.complex.FolderPermissionCollection;
049 import microsoft.exchange.webservices.data.property.complex.ManagedFolderInformation;
050 import microsoft.exchange.webservices.data.property.definition.ExtendedPropertyDefinition;
051 import microsoft.exchange.webservices.data.property.definition.PropertyDefinition;
052 import microsoft.exchange.webservices.data.search.FindFoldersResults;
053 import microsoft.exchange.webservices.data.search.FindItemsResults;
054 import microsoft.exchange.webservices.data.search.FolderView;
055 import microsoft.exchange.webservices.data.search.GroupedFindItemsResults;
056 import microsoft.exchange.webservices.data.search.Grouping;
057 import microsoft.exchange.webservices.data.search.ItemView;
058 import microsoft.exchange.webservices.data.search.ViewBase;
059 import microsoft.exchange.webservices.data.search.filter.SearchFilter;
060 import org.apache.commons.logging.Log;
061 import org.apache.commons.logging.LogFactory;
062
063 import java.util.ArrayList;
064 import java.util.EnumSet;
065
066 /**
067 * Represents a generic folder.
068 */
069 @ServiceObjectDefinition(xmlElementName = XmlElementNames.Folder)
070 public class Folder extends ServiceObject {
071
072 private static final Log LOG = LogFactory.getLog(Folder.class);
073
074 /**
075 * Initializes an unsaved local instance of {@link Folder}.
076 *
077 * @param service EWS service to which this object belongs
078 * @throws Exception the exception
079 */
080 public Folder(ExchangeService service) throws Exception {
081 super(service);
082 }
083
084 /**
085 * Binds to an existing folder, whatever its actual type is, and loads the
086 * specified set of property. Calling this method results in a call to
087 * EWS.
088 *
089 * @param service The service to use to bind to the folder.
090 * @param id The Id of the folder to bind to.
091 * @param propertySet The set of property to load.
092 * @return A Folder instance representing the folder corresponding to the
093 * specified Id.
094 * @throws Exception the exception
095 */
096 public static Folder bind(ExchangeService service, FolderId id,
097 PropertySet propertySet) throws Exception {
098 return service.bindToFolder(Folder.class, id, propertySet);
099 }
100
101 /**
102 * Binds to an existing folder, whatever its actual type is, and loads the
103 * specified set of property. Calling this method results in a call to
104 * EWS.
105 *
106 * @param service , The service to use to bind to the folder.
107 * @param id , The Id of the folder to bind to.
108 * @return A Folder instance representing the folder corresponding to the
109 * specified Id.
110 * @throws Exception the exception
111 */
112 public static Folder bind(ExchangeService service, FolderId id)
113 throws Exception {
114 return Folder.bind(service, id, PropertySet.getFirstClassProperties());
115 }
116
117 /**
118 * Binds to an existing folder, whatever its actual type is, and loads the
119 * specified set of property. Calling this method results in a call to
120 * EWS.
121 *
122 * @param service The service to use to bind to the folder.
123 * @param name The name of the folder to bind to.
124 * @param propertySet The set of property to load.
125 * @return A Folder instance representing the folder corresponding to the
126 * specified Id.
127 * @throws Exception the exception
128 */
129 public static Folder bind(ExchangeService service,
130 WellKnownFolderName name, PropertySet propertySet)
131 throws Exception {
132 return Folder.bind(service, new FolderId(name), propertySet);
133 }
134
135 /**
136 * Binds to an existing folder, whatever its actual type is, and loads the
137 * specified set of property. Calling this method results in a call to
138 * EWS.
139 *
140 * @param service The service to use to bind to the folder.
141 * @param name The name of the folder to bind to.
142 * @return the folder
143 * @throws Exception the exception
144 */
145 public static Folder bind(ExchangeService service, WellKnownFolderName name)
146 throws Exception {
147 return Folder.bind(service, new FolderId(name), PropertySet
148 .getFirstClassProperties());
149 }
150
151 /**
152 * Validates this instance.
153 *
154 * @throws Exception the exception
155 */
156 @Override public void validate() throws Exception {
157 super.validate();
158
159 // Validate folder permissions
160 try {
161 if (this.getPropertyBag().contains(FolderSchema.Permissions)) {
162 this.getPermissions().validate();
163 }
164 } catch (ServiceLocalException e) {
165 LOG.error(e);
166 }
167 }
168
169 /**
170 * Internal method to return the schema associated with this type of object.
171 *
172 * @return The schema associated with this type of object.
173 */
174 @Override public ServiceObjectSchema getSchema() {
175 return FolderSchema.Instance;
176 }
177
178 /**
179 * Gets the minimum required server version.
180 *
181 * @return Earliest Exchange version in which this service object type is
182 * supported.
183 */
184 @Override public ExchangeVersion getMinimumRequiredServerVersion() {
185 return ExchangeVersion.Exchange2007_SP1;
186 }
187
188 /**
189 * Gets the name of the change XML element.
190 *
191 * @return Xml element name
192 */
193 @Override public String getChangeXmlElementName() {
194 return XmlElementNames.FolderChange;
195 }
196
197 /**
198 * Gets the name of the set field XML element.
199 *
200 * @return Xml element name
201 */
202 @Override public String getSetFieldXmlElementName() {
203 return XmlElementNames.SetFolderField;
204 }
205
206 /**
207 * Gets the name of the delete field XML element.
208 *
209 * @return Xml element name
210 */
211 @Override public String getDeleteFieldXmlElementName() {
212 return XmlElementNames.DeleteFolderField;
213 }
214
215 /**
216 * Loads the specified set of property on the object.
217 *
218 * @param propertySet The property to load.
219 * @throws Exception the exception
220 */
221 @Override
222 protected void internalLoad(PropertySet propertySet) throws Exception {
223 this.throwIfThisIsNew();
224
225 this.getService().loadPropertiesForFolder(this, propertySet);
226 }
227
228 /**
229 * Deletes the object.
230 *
231 * @param deleteMode the delete mode
232 * @param sendCancellationsMode Indicates whether meeting cancellation messages should be
233 * sent.
234 * @param affectedTaskOccurrences Indicate which occurrence of a recurring task should be
235 * deleted.
236 * @throws Exception the exception
237 */
238 @Override
239 protected void internalDelete(DeleteMode deleteMode,
240 SendCancellationsMode sendCancellationsMode,
241 AffectedTaskOccurrence affectedTaskOccurrences) throws Exception {
242 try {
243 this.throwIfThisIsNew();
244 } catch (InvalidOperationException e) {
245 LOG.error(e);
246 }
247
248 this.getService().deleteFolder(this.getId(), deleteMode);
249 }
250
251 /**
252 * Deletes the folder. Calling this method results in a call to EWS.
253 *
254 * @param deleteMode the delete mode
255 * @throws Exception the exception
256 */
257 public void delete(DeleteMode deleteMode) throws Exception {
258 this.internalDelete(deleteMode, null, null);
259 }
260
261 /**
262 * Empties the folder. Calling this method results in a call to EWS.
263 *
264 * @param deletemode the delete mode
265 * @param deleteSubFolders Indicates whether sub-folder should also be deleted.
266 * @throws Exception
267 */
268 public void empty(DeleteMode deletemode, boolean deleteSubFolders)
269 throws Exception {
270 this.throwIfThisIsNew();
271 this.getService().emptyFolder(this.getId(),
272 deletemode, deleteSubFolders);
273 }
274
275 /**
276 * Saves this folder in a specific folder. Calling this method results in a
277 * call to EWS.
278 *
279 * @param parentFolderId The Id of the folder in which to save this folder.
280 * @throws Exception the exception
281 */
282 public void save(FolderId parentFolderId) throws Exception {
283 this.throwIfThisIsNotNew();
284
285 EwsUtilities.validateParam(parentFolderId, "parentFolderId");
286
287 if (this.isDirty()) {
288 this.getService().createFolder(this, parentFolderId);
289 }
290 }
291
292 /**
293 * Saves this folder in a specific folder. Calling this method results in a
294 * call to EWS.
295 *
296 * @param parentFolderName The name of the folder in which to save this folder.
297 * @throws Exception the exception
298 */
299 public void save(WellKnownFolderName parentFolderName) throws Exception {
300 this.save(new FolderId(parentFolderName));
301 }
302
303 /**
304 * Applies the local changes that have been made to this folder. Calling
305 * this method results in a call to EWS.
306 *
307 * @throws Exception the exception
308 */
309 public void update() throws Exception {
310 if (this.isDirty()) {
311 if (this.getPropertyBag().getIsUpdateCallNecessary()) {
312 this.getService().updateFolder(this);
313 }
314 }
315 }
316
317 /**
318 * Copies this folder into a specific folder. Calling this method results in
319 * a call to EWS.
320 *
321 * @param destinationFolderId The Id of the folder in which to copy this folder.
322 * @return A Folder representing the copy of this folder.
323 * @throws Exception the exception
324 */
325 public Folder copy(FolderId destinationFolderId) throws Exception {
326 this.throwIfThisIsNew();
327
328 EwsUtilities.validateParam(destinationFolderId, "destinationFolderId");
329
330 return this.getService().copyFolder(this.getId(), destinationFolderId);
331 }
332
333 /**
334 * Copies this folder into the specified folder. Calling this method results
335 * in a call to EWS.
336 *
337 * @param destinationFolderName The name of the folder in which to copy this folder.
338 * @return A Folder representing the copy of this folder.
339 * @throws Exception the exception
340 */
341 public Folder copy(WellKnownFolderName destinationFolderName)
342 throws Exception {
343 return this.copy(new FolderId(destinationFolderName));
344 }
345
346 /**
347 * Moves this folder to a specific folder. Calling this method results in a
348 * call to EWS.
349 *
350 * @param destinationFolderId The Id of the folder in which to move this folder.
351 * @return A new folder representing this folder in its new location. After
352 * Move completes, this folder does not exist anymore.
353 * @throws Exception the exception
354 */
355 public Folder move(FolderId destinationFolderId) throws Exception {
356 this.throwIfThisIsNew();
357
358 EwsUtilities.validateParam(destinationFolderId, "destinationFolderId");
359
360 return this.getService().moveFolder(this.getId(), destinationFolderId);
361 }
362
363 /**
364 * Moves this folder to a specific folder. Calling this method results in a
365 * call to EWS.
366 *
367 * @param destinationFolderName The name of the folder in which to move this folder.
368 * @return A new folder representing this folder in its new location. After
369 * Move completes, this folder does not exist anymore.
370 * @throws Exception the exception
371 */
372 public Folder move(WellKnownFolderName destinationFolderName)
373 throws Exception {
374 return this.move(new FolderId(destinationFolderName));
375 }
376
377 /**
378 * Find item.
379 *
380 * @param <TItem> The type of the item.
381 * @param queryString query string to be used for indexed search
382 * @param view The view controlling the number of item returned.
383 * @param groupBy The group by.
384 * @return FindItems response collection.
385 * @throws Exception the exception
386 */
387 <TItem extends Item> ServiceResponseCollection<FindItemResponse<TItem>>
388 internalFindItems(String queryString,
389 ViewBase view, Grouping groupBy)
390 throws Exception {
391 ArrayList<FolderId> folderIdArry = new ArrayList<FolderId>();
392 folderIdArry.add(this.getId());
393
394 this.throwIfThisIsNew();
395 return this.getService().findItems(folderIdArry,
396 null, /* searchFilter */
397 queryString, view, groupBy, ServiceErrorHandling.ThrowOnError);
398
399 }
400
401 /**
402 * Find item.
403 *
404 * @param <TItem> The type of the item.
405 * @param searchFilter The search filter. Available search filter classes include
406 * SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and
407 * SearchFilter.SearchFilterCollection
408 * @param view The view controlling the number of item returned.
409 * @param groupBy The group by.
410 * @return FindItems response collection.
411 * @throws Exception the exception
412 */
413 <TItem extends Item> ServiceResponseCollection<FindItemResponse<TItem>>
414 internalFindItems(SearchFilter searchFilter,
415 ViewBase view, Grouping groupBy)
416 throws Exception {
417 ArrayList<FolderId> folderIdArry = new ArrayList<FolderId>();
418 folderIdArry.add(this.getId());
419 this.throwIfThisIsNew();
420
421 return this.getService().findItems(folderIdArry, searchFilter,
422 null, /* queryString */
423 view, groupBy, ServiceErrorHandling.ThrowOnError);
424 }
425
426 /**
427 * Find item.
428 *
429 * @param searchFilter The search filter. Available search filter classes include
430 * SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and
431 * SearchFilter.SearchFilterCollection
432 * @param view The view controlling the number of item returned.
433 * @return FindItems results collection.
434 * @throws Exception the exception
435 */
436 public FindItemsResults<Item> findItems(SearchFilter searchFilter,
437 ItemView view) throws Exception {
438 EwsUtilities.validateParamAllowNull(searchFilter, "searchFilter");
439
440 ServiceResponseCollection<FindItemResponse<Item>> responses = this
441 .internalFindItems(searchFilter, view, null /* groupBy */);
442
443 return responses.getResponseAtIndex(0).getResults();
444 }
445
446 /**
447 * Find item.
448 *
449 * @param queryString query string to be used for indexed search
450 * @param view The view controlling the number of item returned.
451 * @return FindItems results collection.
452 * @throws Exception the exception
453 */
454 public FindItemsResults<Item> findItems(String queryString, ItemView view)
455 throws Exception {
456 EwsUtilities.validateParamAllowNull(queryString, "queryString");
457
458 ServiceResponseCollection<FindItemResponse<Item>> responses = this
459 .internalFindItems(queryString, view, null /* groupBy */);
460
461 return responses.getResponseAtIndex(0).getResults();
462 }
463
464 /**
465 * Find item.
466 *
467 * @param view The view controlling the number of item returned.
468 * @return FindItems results collection.
469 * @throws Exception the exception
470 */
471 public FindItemsResults<Item> findItems(ItemView view) throws Exception {
472 ServiceResponseCollection<FindItemResponse<Item>> responses = this
473 .internalFindItems((SearchFilter) null, view,
474 null /* groupBy */);
475
476 return responses.getResponseAtIndex(0).getResults();
477 }
478
479 /**
480 * Find item.
481 *
482 * @param searchFilter The search filter. Available search filter classes include
483 * SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and
484 * SearchFilter.SearchFilterCollection
485 * @param view The view controlling the number of item returned.
486 * @param groupBy The group by.
487 * @return A collection of grouped item representing the contents of this
488 * folder.
489 * @throws Exception the exception
490 */
491 public GroupedFindItemsResults<Item> findItems(SearchFilter searchFilter,
492 ItemView view, Grouping groupBy) throws Exception {
493 EwsUtilities.validateParam(groupBy, "groupBy");
494 EwsUtilities.validateParamAllowNull(searchFilter, "searchFilter");
495
496 ServiceResponseCollection<FindItemResponse<Item>> responses = this
497 .internalFindItems(searchFilter, view, groupBy);
498
499 return responses.getResponseAtIndex(0).getGroupedFindResults();
500 }
501
502 /**
503 * Find item.
504 *
505 * @param queryString query string to be used for indexed search
506 * @param view The view controlling the number of item returned.
507 * @param groupBy The group by.
508 * @return A collection of grouped item representing the contents of this
509 * folder.
510 * @throws Exception the exception
511 */
512 public GroupedFindItemsResults<Item> findItems(String queryString,
513 ItemView view, Grouping groupBy) throws Exception {
514 EwsUtilities.validateParam(groupBy, "groupBy");
515
516 ServiceResponseCollection<FindItemResponse<Item>> responses = this
517 .internalFindItems(queryString, view, groupBy);
518
519 return responses.getResponseAtIndex(0).getGroupedFindResults();
520 }
521
522 /**
523 * Obtains a list of folder by searching the sub-folder of this folder.
524 * Calling this method results in a call to EWS.
525 *
526 * @param view The view controlling the number of folder returned.
527 * @return An object representing the results of the search operation.
528 * @throws Exception the exception
529 */
530 public FindFoldersResults findFolders(FolderView view) throws Exception {
531 this.throwIfThisIsNew();
532
533 return this.getService().findFolders(this.getId(), view);
534 }
535
536 /**
537 * Obtains a list of folder by searching the sub-folder of this folder.
538 * Calling this method results in a call to EWS.
539 *
540 * @param searchFilter The search filter. Available search filter classes include
541 * SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and
542 * SearchFilter.SearchFilterCollection
543 * @param view The view controlling the number of folder returned.
544 * @return An object representing the results of the search operation.
545 * @throws Exception the exception
546 */
547 public FindFoldersResults findFolders(SearchFilter searchFilter,
548 FolderView view) throws Exception {
549 this.throwIfThisIsNew();
550
551 return this.getService().findFolders(this.getId(), searchFilter, view);
552 }
553
554 /**
555 * Obtains a grouped list of item by searching the contents of this folder.
556 * Calling this method results in a call to EWS.
557 *
558 * @param view The view controlling the number of folder returned.
559 * @param groupBy The grouping criteria.
560 * @return A collection of grouped item representing the contents of this
561 * folder.
562 * @throws Exception the exception
563 */
564 public GroupedFindItemsResults<Item> findItems(ItemView view,
565 Grouping groupBy) throws Exception {
566 EwsUtilities.validateParam(groupBy, "groupBy");
567
568 return this.findItems((SearchFilter) null, view, groupBy);
569 }
570
571 /**
572 * Get the property definition for the Id property.
573 *
574 * @return the id property definition
575 */
576 @Override public PropertyDefinition getIdPropertyDefinition() {
577 return FolderSchema.Id;
578 }
579
580 /**
581 * Sets the extended property.
582 *
583 * @param extendedPropertyDefinition The extended property definition.
584 * @param value The value.
585 * @throws Exception the exception
586 */
587 public void setExtendedProperty(
588 ExtendedPropertyDefinition extendedPropertyDefinition, Object value)
589 throws Exception {
590 this.getExtendedProperties().setExtendedProperty(
591 extendedPropertyDefinition, value);
592 }
593
594 /**
595 * Removes an extended property.
596 *
597 * @param extendedPropertyDefinition The extended property definition.
598 * @return True if property was removed.
599 * @throws Exception the exception
600 */
601 public boolean removeExtendedProperty(
602 ExtendedPropertyDefinition extendedPropertyDefinition)
603 throws Exception {
604 return this.getExtendedProperties().removeExtendedProperty(
605 extendedPropertyDefinition);
606 }
607
608 /**
609 * True if property was removed.
610 *
611 * @return Extended property collection.
612 * @throws Exception the exception
613 */
614 @Override
615 protected ExtendedPropertyCollection getExtendedProperties()
616 throws Exception {
617 return this.getExtendedPropertiesForService();
618 }
619
620 /**
621 * Gets the Id of the folder.
622 *
623 * @return the id
624 */
625 public FolderId getId() {
626 try {
627 return getPropertyBag().getObjectFromPropertyDefinition(
628 getIdPropertyDefinition());
629 } catch (ServiceLocalException e) {
630 LOG.error(e);
631 return null;
632 }
633 }
634
635 /**
636 * Gets the Id of this folder's parent folder.
637 *
638 * @return the parent folder id
639 * @throws ServiceLocalException the service local exception
640 */
641 public FolderId getParentFolderId() throws ServiceLocalException {
642 return getPropertyBag().getObjectFromPropertyDefinition(
643 FolderSchema.ParentFolderId);
644 }
645
646 /**
647 * Gets the number of child folder this folder has.
648 *
649 * @return the child folder count
650 * @throws NumberFormatException the number format exception
651 * @throws ServiceLocalException the service local exception
652 */
653 public int getChildFolderCount() throws NumberFormatException,
654 ServiceLocalException {
655 return (Integer.parseInt(this.getPropertyBag()
656 .getObjectFromPropertyDefinition(FolderSchema.ChildFolderCount)
657 .toString()));
658 }
659
660 /**
661 * Gets the display name of the folder.
662 *
663 * @return the display name
664 * @throws ServiceLocalException the service local exception
665 */
666 public String getDisplayName() throws ServiceLocalException {
667 return getPropertyBag().getObjectFromPropertyDefinition(
668 FolderSchema.DisplayName);
669 }
670
671 /**
672 * Sets the display name of the folder.
673 *
674 * @param value Name of the folder
675 * @throws Exception the exception
676 */
677 public void setDisplayName(String value) throws Exception {
678 this.getPropertyBag().setObjectFromPropertyDefinition(
679 FolderSchema.DisplayName, value);
680 }
681
682 /**
683 * Gets the custom class name of this folder.
684 *
685 * @return the folder class
686 * @throws ServiceLocalException the service local exception
687 */
688 public String getFolderClass() throws ServiceLocalException {
689 return getPropertyBag().getObjectFromPropertyDefinition(
690 FolderSchema.FolderClass);
691 }
692
693 /**
694 * Sets the custom class name of this folder.
695 *
696 * @param value name of the folder
697 * @throws Exception the exception
698 */
699 public void setFolderClass(String value) throws Exception {
700 this.getPropertyBag().setObjectFromPropertyDefinition(
701 FolderSchema.FolderClass, value);
702 }
703
704 /**
705 * Gets the total number of item contained in the folder.
706 *
707 * @return the total count
708 * @throws NumberFormatException the number format exception
709 * @throws ServiceLocalException the service local exception
710 */
711 public int getTotalCount() throws NumberFormatException,
712 ServiceLocalException {
713 return (Integer.parseInt(this.getPropertyBag()
714 .getObjectFromPropertyDefinition(FolderSchema.TotalCount)
715 .toString()));
716 }
717
718 /**
719 * Gets a list of extended property associated with the folder.
720 *
721 * @return the extended property for service
722 * @throws ServiceLocalException the service local exception
723 */
724 // changed the name of method as another method with same name exists
725 public ExtendedPropertyCollection getExtendedPropertiesForService()
726 throws ServiceLocalException {
727 return getPropertyBag().getObjectFromPropertyDefinition(
728 ServiceObjectSchema.extendedProperties);
729 }
730
731 /**
732 * Gets the Email Lifecycle Management (ELC) information associated with the
733 * folder.
734 *
735 * @return the managed folder information
736 * @throws ServiceLocalException the service local exception
737 */
738 public ManagedFolderInformation getManagedFolderInformation()
739 throws ServiceLocalException {
740 return getPropertyBag().getObjectFromPropertyDefinition(
741 FolderSchema.ManagedFolderInformation);
742 }
743
744 /**
745 * Gets a value indicating the effective rights the current authenticated
746 * user has on the folder.
747 *
748 * @return the effective rights
749 * @throws ServiceLocalException the service local exception
750 */
751 public EnumSet<EffectiveRights> getEffectiveRights() throws ServiceLocalException {
752 return getPropertyBag().getObjectFromPropertyDefinition(
753 FolderSchema.EffectiveRights);
754 }
755
756 /**
757 * Gets a list of permissions for the folder.
758 *
759 * @return the permissions
760 * @throws ServiceLocalException the service local exception
761 */
762 public FolderPermissionCollection getPermissions()
763 throws ServiceLocalException {
764 return getPropertyBag().getObjectFromPropertyDefinition(
765 FolderSchema.Permissions);
766 }
767
768 /**
769 * Gets the number of unread item in the folder.
770 *
771 * @return the unread count
772 * @throws NumberFormatException the number format exception
773 * @throws ServiceLocalException the service local exception
774 */
775 public int getUnreadCount() throws NumberFormatException,
776 ServiceLocalException {
777 return (Integer.parseInt(this.getPropertyBag()
778 .getObjectFromPropertyDefinition(FolderSchema.UnreadCount)
779 .toString()));
780 }
781
782 }