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.item;
025
026 import microsoft.exchange.webservices.data.attribute.Attachable;
027 import microsoft.exchange.webservices.data.attribute.ServiceObjectDefinition;
028 import microsoft.exchange.webservices.data.core.EwsUtilities;
029 import microsoft.exchange.webservices.data.core.ExchangeService;
030 import microsoft.exchange.webservices.data.core.PropertySet;
031 import microsoft.exchange.webservices.data.core.XmlElementNames;
032 import microsoft.exchange.webservices.data.core.service.schema.ContactSchema;
033 import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema;
034 import microsoft.exchange.webservices.data.core.enumeration.service.ContactSource;
035 import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
036 import microsoft.exchange.webservices.data.core.enumeration.service.FileAsMapping;
037 import microsoft.exchange.webservices.data.core.enumeration.property.PhysicalAddressIndex;
038 import microsoft.exchange.webservices.data.core.exception.service.local.PropertyException;
039 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
040 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceVersionException;
041 import microsoft.exchange.webservices.data.misc.OutParam;
042 import microsoft.exchange.webservices.data.property.complex.Attachment;
043 import microsoft.exchange.webservices.data.property.complex.ByteArrayArray;
044 import microsoft.exchange.webservices.data.property.complex.CompleteName;
045 import microsoft.exchange.webservices.data.property.complex.EmailAddress;
046 import microsoft.exchange.webservices.data.property.complex.EmailAddressCollection;
047 import microsoft.exchange.webservices.data.property.complex.EmailAddressDictionary;
048 import microsoft.exchange.webservices.data.property.complex.FileAttachment;
049 import microsoft.exchange.webservices.data.property.complex.ImAddressDictionary;
050 import microsoft.exchange.webservices.data.property.complex.ItemAttachment;
051 import microsoft.exchange.webservices.data.property.complex.ItemId;
052 import microsoft.exchange.webservices.data.property.complex.PhoneNumberDictionary;
053 import microsoft.exchange.webservices.data.property.complex.PhysicalAddressDictionary;
054 import microsoft.exchange.webservices.data.property.complex.StringList;
055
056 import java.io.File;
057 import java.io.InputStream;
058 import java.util.Date;
059
060 /**
061 * Represents a contact. Properties available on contacts are defined in the
062 * ContactSchema class.
063 */
064 @Attachable
065 @ServiceObjectDefinition(xmlElementName = XmlElementNames.Contact, returnedByServer = true)
066 public class Contact extends Item {
067
068 /**
069 * The Contact picture name.
070 */
071 private final String ContactPictureName = "ContactPicture.jpg";
072
073 /**
074 * Initializes an unsaved local instance of {@link Contact}.
075 * To bind to an existing contact, use Contact.Bind() instead.
076 *
077 * @param service the service
078 * @throws Exception the exception
079 */
080 public Contact(ExchangeService service) throws Exception {
081 super(service);
082 }
083
084 /**
085 * Initializes a new instance of the {@link Contact} class.
086 *
087 * @param parentAttachment the parent attachment
088 * @throws Exception the exception
089 */
090 public Contact(ItemAttachment parentAttachment) throws Exception {
091 super(parentAttachment);
092 }
093
094 /**
095 * Binds to an existing contact and loads the specified set of property.
096 * Calling this method results in a call to EWS.
097 *
098 * @param service the service
099 * @param id the id
100 * @param propertySet the property set
101 * @return A Contact instance representing the contact corresponding to the
102 * specified Id.
103 * @throws Exception the exception
104 */
105 public static Contact bind(ExchangeService service, ItemId id,
106 PropertySet propertySet) throws Exception {
107 return service.bindToItem(Contact.class, id, propertySet);
108 }
109
110 /**
111 * Binds to an existing contact and loads its first class property.
112 * Calling this method results in a call to EWS.
113 *
114 * @param service the service
115 * @param id the id
116 * @return A Contact instance representing the contact corresponding to the
117 * specified Id.
118 * @throws Exception the exception
119 */
120 public static Contact bind(ExchangeService service, ItemId id)
121 throws Exception {
122 return Contact.bind(service, id, PropertySet.getFirstClassProperties());
123 }
124
125 /**
126 * Internal method to return the schema associated with this type of object.
127 *
128 * @return The schema associated with this type of object.
129 */
130 @Override public ServiceObjectSchema getSchema() {
131 return ContactSchema.Instance;
132 }
133
134 /**
135 * Gets the minimum required server version.
136 *
137 * @return Earliest Exchange version in which this service object type is
138 * supported.
139 */
140 @Override public ExchangeVersion getMinimumRequiredServerVersion() {
141 return ExchangeVersion.Exchange2007_SP1;
142 }
143
144 /**
145 * Sets the contact's picture using the specified byte array.
146 *
147 * @param content the new contact picture
148 * @throws Exception the exception
149 */
150 public void setContactPicture(byte[] content) throws Exception {
151 EwsUtilities.validateMethodVersion(this.getService(), ExchangeVersion.Exchange2010, "SetContactPicture");
152
153 internalRemoveContactPicture();
154 FileAttachment fileAttachment = getAttachments().addFileAttachment(
155 ContactPictureName, content);
156 fileAttachment.setIsContactPhoto(true);
157 }
158
159 /**
160 * Sets the contact's picture using the specified stream.
161 *
162 * @param contentStream the new contact picture
163 * @throws Exception the exception
164 */
165 public void setContactPicture(InputStream contentStream) throws Exception {
166 EwsUtilities.validateMethodVersion(this.getService(),
167 ExchangeVersion.Exchange2010, "SetContactPicture");
168
169 internalRemoveContactPicture();
170 FileAttachment fileAttachment = getAttachments().addFileAttachment(
171 ContactPictureName, contentStream);
172 fileAttachment.setIsContactPhoto(true);
173 }
174
175 /**
176 * Sets the contact's picture using the specified file.
177 *
178 * @param fileName the new contact picture
179 * @throws Exception the exception
180 */
181 public void setContactPicture(String fileName) throws Exception {
182 EwsUtilities.validateMethodVersion(this.getService(),
183 ExchangeVersion.Exchange2010, "SetContactPicture");
184
185 internalRemoveContactPicture();
186 FileAttachment fileAttachment = getAttachments().addFileAttachment(
187 new File(fileName).getName(), fileName);
188 fileAttachment.setIsContactPhoto(true);
189 }
190
191 /**
192 * Retrieves the file attachment that holds the contact's picture.
193 *
194 * @return The file attachment that holds the contact's picture.
195 * @throws ServiceLocalException the service local exception
196 */
197 public FileAttachment getContactPictureAttachment()
198 throws ServiceLocalException {
199 EwsUtilities.validateMethodVersion(this.getService(),
200 ExchangeVersion.Exchange2010, "GetContactPictureAttachment");
201
202 if (!this.getPropertyBag().isPropertyLoaded(ContactSchema.Attachments)) {
203 throw new PropertyException("The attachment collection must be loaded.");
204 }
205
206 for (Attachment fileAttachment : this.getAttachments()) {
207 if (fileAttachment instanceof FileAttachment) {
208 if (((FileAttachment) fileAttachment).isContactPhoto()) {
209 return (FileAttachment) fileAttachment;
210 }
211 }
212 }
213 return null;
214 }
215
216 /**
217 * Removes the picture from local attachment collection.
218 *
219 * @throws Exception the exception
220 */
221 private void internalRemoveContactPicture() throws Exception {
222 // Iterates in reverse order to remove file attachments that have
223 // IsContactPhoto set to true.
224 for (int index = this.getAttachments().getCount() - 1; index >= 0; index--) {
225 FileAttachment fileAttachment = (FileAttachment) this
226 .getAttachments().getPropertyAtIndex(index);
227 if (fileAttachment != null) {
228 if (fileAttachment.isContactPhoto()) {
229 this.getAttachments().remove(fileAttachment);
230 }
231 }
232 }
233
234 }
235
236 /**
237 * Removes the contact's picture.
238 *
239 * @throws Exception the exception
240 */
241 public void removeContactPicture() throws Exception {
242 EwsUtilities.validateMethodVersion(this.getService(),
243 ExchangeVersion.Exchange2010, "RemoveContactPicture");
244
245 if (!this.getPropertyBag().isPropertyLoaded(ContactSchema.Attachments)) {
246 throw new PropertyException("The attachment collection must be loaded.");
247 }
248
249 internalRemoveContactPicture();
250 }
251
252 /**
253 * Validates this instance.
254 *
255 * @throws ServiceVersionException the service version exception
256 * @throws Exception the exception
257 */
258 @Override public void validate() throws ServiceVersionException, Exception {
259 super.validate();
260
261 Object fileAsMapping;
262 OutParam<Object> outParam = new OutParam<Object>();
263 if (this.tryGetProperty(ContactSchema.FileAsMapping, outParam)) {
264 fileAsMapping = outParam.getParam();
265 // FileAsMapping is extended by 5 new values in 2010 mode. Validate
266 // that they are used according the version.
267 EwsUtilities.validateEnumVersionValue(
268 (FileAsMapping) fileAsMapping, this.getService()
269 .getRequestedServerVersion());
270 }
271 }
272
273 /**
274 * Gets the name under which this contact is filed as. FileAs can be
275 * manually set or can be automatically calculated based on the value of the
276 * FileAsMapping property.
277 *
278 * @return the file as
279 * @throws ServiceLocalException the service local exception
280 */
281 public String getFileAs() throws ServiceLocalException {
282 return getPropertyBag().getObjectFromPropertyDefinition(
283 ContactSchema.FileAs);
284
285 }
286
287 /**
288 * Sets the file as.
289 *
290 * @param value the new file as
291 * @throws Exception the exception
292 */
293 public void setFileAs(String value) throws Exception {
294 this.getPropertyBag().setObjectFromPropertyDefinition(
295 ContactSchema.FileAs, value);
296 }
297
298 /**
299 * Gets a value indicating how the FileAs property should be
300 * automatically calculated.
301 *
302 * @return the file as mapping
303 * @throws ServiceLocalException the service local exception
304 */
305 public FileAsMapping getFileAsMapping() throws ServiceLocalException {
306 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.FileAsMapping);
307 }
308
309 /**
310 * Sets the file as.
311 *
312 * @param value the new file as
313 * @throws Exception the exception
314 */
315 public void setFileAs(FileAsMapping value) throws Exception {
316 this.getPropertyBag().setObjectFromPropertyDefinition(
317 ContactSchema.FileAsMapping, value);
318 }
319
320 /**
321 * Gets the display name of the contact.
322 *
323 * @return the display name
324 * @throws ServiceLocalException the service local exception
325 */
326 public String getDisplayName() throws ServiceLocalException {
327 return getPropertyBag().getObjectFromPropertyDefinition(
328 ContactSchema.DisplayName);
329 }
330
331 /**
332 * Sets the display name.
333 *
334 * @param value the new display name
335 * @throws Exception the exception
336 */
337 public void setDisplayName(String value) throws Exception {
338 this.getPropertyBag().setObjectFromPropertyDefinition(
339 ContactSchema.DisplayName, value);
340 }
341
342 /**
343 * Gets the given name of the contact.
344 *
345 * @return the given name
346 * @throws ServiceLocalException the service local exception
347 */
348 public String getGivenName() throws ServiceLocalException {
349 return getPropertyBag().getObjectFromPropertyDefinition(
350 ContactSchema.GivenName);
351 }
352
353 /**
354 * Sets the given name.
355 *
356 * @param value the new given name
357 * @throws Exception the exception
358 */
359 public void setGivenName(String value) throws Exception {
360 this.getPropertyBag().setObjectFromPropertyDefinition(
361 ContactSchema.GivenName, value);
362 }
363
364 /**
365 * Gets the initials of the contact.
366 *
367 * @return the initials
368 * @throws ServiceLocalException the service local exception
369 */
370 public String getInitials() throws ServiceLocalException {
371 return getPropertyBag().getObjectFromPropertyDefinition(
372 ContactSchema.Initials);
373 }
374
375 /**
376 * Sets the initials.
377 *
378 * @param value the new initials
379 * @throws Exception the exception
380 */
381 public void setInitials(String value) throws Exception {
382 this.getPropertyBag().setObjectFromPropertyDefinition(
383 ContactSchema.Initials, value);
384 }
385
386 /**
387 * Gets the middle name of the contact.
388 *
389 * @return the middle name
390 * @throws ServiceLocalException the service local exception
391 */
392 public String getMiddleName() throws ServiceLocalException {
393 return getPropertyBag().getObjectFromPropertyDefinition(
394 ContactSchema.MiddleName);
395 }
396
397 /**
398 * Sets the middle name.
399 *
400 * @param value the new middle name
401 * @throws Exception the exception
402 */
403 public void setMiddleName(String value) throws Exception {
404 this.getPropertyBag().setObjectFromPropertyDefinition(
405 ContactSchema.MiddleName, value);
406 }
407
408 /**
409 * Gets the nick name of the contact.
410 *
411 * @return the nick name
412 * @throws ServiceLocalException the service local exception
413 */
414 public String getNickName() throws ServiceLocalException {
415 return getPropertyBag().getObjectFromPropertyDefinition(
416 ContactSchema.NickName);
417 }
418
419 /**
420 * Sets the nick name.
421 *
422 * @param value the new nick name
423 * @throws Exception the exception
424 */
425 public void setNickName(String value) throws Exception {
426 this.getPropertyBag().setObjectFromPropertyDefinition(
427 ContactSchema.NickName, value);
428 }
429
430 /**
431 * Gets the complete name of the contact.
432 *
433 * @return the complete name
434 * @throws ServiceLocalException the service local exception
435 */
436 public CompleteName getCompleteName() throws ServiceLocalException {
437 return getPropertyBag().getObjectFromPropertyDefinition(
438 ContactSchema.CompleteName);
439 }
440
441 /**
442 * Gets the company name of the contact.
443 *
444 * @return the company name
445 * @throws ServiceLocalException the service local exception
446 */
447 public String getCompanyName() throws ServiceLocalException {
448 return getPropertyBag().getObjectFromPropertyDefinition(
449 ContactSchema.CompanyName);
450 }
451
452 /**
453 * Sets the company name.
454 *
455 * @param value the new company name
456 * @throws Exception the exception
457 */
458 public void setCompanyName(String value) throws Exception {
459 this.getPropertyBag().setObjectFromPropertyDefinition(
460 ContactSchema.CompanyName, value);
461 }
462
463 /**
464 * Gets an indexed list of e-mail addresses for the contact. For example, to
465 * set the first e-mail address, use the following syntax:
466 * EmailAddresses[EmailAddressKey.EmailAddress1] = "john.doe@contoso.com"
467 *
468 * @return the email addresses
469 * @throws ServiceLocalException the service local exception
470 */
471 public EmailAddressDictionary getEmailAddresses()
472 throws ServiceLocalException {
473 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.EmailAddresses);
474 }
475
476 /**
477 * Gets an indexed list of physical addresses for the contact. For example,
478 * to set the first business address, use the following syntax:
479 * physical[PhysicalAddressKey.Business] = new PhysicalAddressEntry()
480 *
481 * @return the physical addresses
482 * @throws ServiceLocalException the service local exception
483 */
484 public PhysicalAddressDictionary getPhysicalAddresses()
485 throws ServiceLocalException {
486 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.PhysicalAddresses);
487 }
488
489 /**
490 * Gets an indexed list of phone numbers for the contact. For example, to
491 * set the home phone number, use the following syntax:
492 * PhoneNumbers[PhoneNumberKey.HomePhone] = "phone number"
493 *
494 * @return the phone numbers
495 * @throws ServiceLocalException the service local exception
496 */
497 public PhoneNumberDictionary getPhoneNumbers()
498 throws ServiceLocalException {
499 return getPropertyBag()
500 .getObjectFromPropertyDefinition(ContactSchema.PhoneNumbers);
501 }
502
503 /**
504 * Gets the contact's assistant name.
505 *
506 * @return the assistant name
507 * @throws ServiceLocalException the service local exception
508 */
509 public String getAssistantName() throws ServiceLocalException {
510 return getPropertyBag().getObjectFromPropertyDefinition(
511 ContactSchema.AssistantName);
512 }
513
514 /**
515 * Sets the assistant name.
516 *
517 * @param value the new assistant name
518 * @throws Exception the exception
519 */
520 public void setAssistantName(String value) throws Exception {
521 this.getPropertyBag().setObjectFromPropertyDefinition(
522 ContactSchema.AssistantName, value);
523 }
524
525 /**
526 * Gets the contact's assistant name.
527 *
528 * @return the birthday
529 * @throws ServiceLocalException the service local exception
530 */
531 public Date getBirthday() throws ServiceLocalException {
532 return getPropertyBag().getObjectFromPropertyDefinition(
533 ContactSchema.Birthday);
534
535 }
536
537 /**
538 * Sets the birthday.
539 *
540 * @param value the new birthday
541 * @throws Exception the exception
542 */
543 public void setBirthday(Date value) throws Exception {
544 this.getPropertyBag().setObjectFromPropertyDefinition(
545 ContactSchema.Birthday, value);
546 }
547
548 /**
549 * Gets the business home page of the contact.
550 *
551 * @return the business home page
552 * @throws ServiceLocalException the service local exception
553 */
554 public String getBusinessHomePage() throws ServiceLocalException {
555 return getPropertyBag().getObjectFromPropertyDefinition(
556 ContactSchema.BusinessHomePage);
557
558 }
559
560 /**
561 * Sets the business home page.
562 *
563 * @param value the new business home page
564 * @throws Exception the exception
565 */
566 public void setBusinessHomePage(String value) throws Exception {
567 this.getPropertyBag().setObjectFromPropertyDefinition(
568 ContactSchema.BusinessHomePage, value);
569 }
570
571 /**
572 * Gets a list of children for the contact.
573 *
574 * @return the children
575 * @throws ServiceLocalException the service local exception
576 */
577 public StringList getChildren() throws ServiceLocalException {
578 return getPropertyBag().getObjectFromPropertyDefinition(
579 ContactSchema.Children);
580 }
581
582 /**
583 * Sets the children.
584 *
585 * @param value the new children
586 * @throws Exception the exception
587 */
588 public void setChildren(StringList value) throws Exception {
589 this.getPropertyBag().setObjectFromPropertyDefinition(
590 ContactSchema.Children, value);
591 }
592
593 /**
594 * Gets a list of companies for the contact.
595 *
596 * @return the companies
597 * @throws ServiceLocalException the service local exception
598 */
599 public StringList getCompanies() throws ServiceLocalException {
600 return getPropertyBag().getObjectFromPropertyDefinition(
601 ContactSchema.Companies);
602 }
603
604 /**
605 * Sets the companies.
606 *
607 * @param value the new companies
608 * @throws Exception the exception
609 */
610 public void setCompanies(StringList value) throws Exception {
611 this.getPropertyBag().setObjectFromPropertyDefinition(
612 ContactSchema.Companies, value);
613 }
614
615 /**
616 * Gets the source of the contact.
617 *
618 * @return the contact source
619 * @throws ServiceLocalException the service local exception
620 */
621 public ContactSource getContactSource() throws ServiceLocalException {
622 return getPropertyBag()
623 .getObjectFromPropertyDefinition(ContactSchema.ContactSource);
624 }
625
626 /**
627 * Gets the department of the contact.
628 *
629 * @return the department
630 * @throws ServiceLocalException the service local exception
631 */
632 public String getDepartment() throws ServiceLocalException {
633 return getPropertyBag().getObjectFromPropertyDefinition(
634 ContactSchema.Department);
635 }
636
637 /**
638 * Sets the department.
639 *
640 * @param value the new department
641 * @throws Exception the exception
642 */
643 public void setDepartment(String value) throws Exception {
644 this.getPropertyBag().setObjectFromPropertyDefinition(
645 ContactSchema.Department, value);
646 }
647
648 /**
649 * Gets the generation of the contact.
650 *
651 * @return the generation
652 * @throws ServiceLocalException the service local exception
653 */
654 public String getGeneration() throws ServiceLocalException {
655 return getPropertyBag().getObjectFromPropertyDefinition(
656 ContactSchema.Generation);
657 }
658
659 /**
660 * Sets the generation.
661 *
662 * @param value the new generation
663 * @throws Exception the exception
664 */
665 public void setGeneration(String value) throws Exception {
666 this.getPropertyBag().setObjectFromPropertyDefinition(
667 ContactSchema.Generation, value);
668 }
669
670 /**
671 * Gets an indexed list of Instant Messaging addresses for the contact. For
672 * example, to set the first IM address, use the following syntax:
673 * ImAddresses[ImAddressKey.ImAddress1] = "john.doe@contoso.com"
674 *
675 * @return the im addresses
676 * @throws ServiceLocalException the service local exception
677 */
678 public ImAddressDictionary getImAddresses() throws ServiceLocalException {
679 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.ImAddresses);
680 }
681
682 /**
683 * Gets the contact's job title.
684 *
685 * @return the job title
686 * @throws ServiceLocalException the service local exception
687 */
688 public String getJobTitle() throws ServiceLocalException {
689 return getPropertyBag().getObjectFromPropertyDefinition(
690 ContactSchema.JobTitle);
691 }
692
693 /**
694 * Sets the job title.
695 *
696 * @param value the new job title
697 * @throws Exception the exception
698 */
699 public void setJobTitle(String value) throws Exception {
700 this.getPropertyBag().setObjectFromPropertyDefinition(
701 ContactSchema.JobTitle, value);
702 }
703
704 /**
705 * Gets the name of the contact's manager.
706 *
707 * @return the manager
708 * @throws ServiceLocalException the service local exception
709 */
710 public String getManager() throws ServiceLocalException {
711 return getPropertyBag().getObjectFromPropertyDefinition(
712 ContactSchema.Manager);
713 }
714
715 /**
716 * Sets the manager.
717 *
718 * @param value the new manager
719 * @throws Exception the exception
720 */
721 public void setManager(String value) throws Exception {
722 this.getPropertyBag().setObjectFromPropertyDefinition(
723 ContactSchema.Manager, value);
724 }
725
726 /**
727 * Gets the mileage for the contact.
728 *
729 * @return the mileage
730 * @throws ServiceLocalException the service local exception
731 */
732 public String getMileage() throws ServiceLocalException {
733 return getPropertyBag().getObjectFromPropertyDefinition(
734 ContactSchema.Mileage);
735 }
736
737 /**
738 * Sets the mileage.
739 *
740 * @param value the new mileage
741 * @throws Exception the exception
742 */
743 public void setMileage(String value) throws Exception {
744 this.getPropertyBag().setObjectFromPropertyDefinition(
745 ContactSchema.Mileage, value);
746 }
747
748 /**
749 * Gets the location of the contact's office.
750 *
751 * @return the office location
752 * @throws ServiceLocalException the service local exception
753 */
754 public String getOfficeLocation() throws ServiceLocalException {
755 return getPropertyBag().getObjectFromPropertyDefinition(
756 ContactSchema.OfficeLocation);
757 }
758
759 /**
760 * Sets the office location.
761 *
762 * @param value the new office location
763 * @throws Exception the exception
764 */
765 public void setOfficeLocation(String value) throws Exception {
766 this.getPropertyBag().setObjectFromPropertyDefinition(
767 ContactSchema.OfficeLocation, value);
768 }
769
770 /**
771 * Gets the index of the contact's postal address. When set,
772 * PostalAddressIndex refers to an entry in the PhysicalAddresses indexed
773 * list.
774 *
775 * @return the postal address index
776 * @throws ServiceLocalException the service local exception
777 */
778 public PhysicalAddressIndex getPostalAddressIndex()
779 throws ServiceLocalException {
780 return getPropertyBag().getObjectFromPropertyDefinition(
781 ContactSchema.PostalAddressIndex);
782 }
783
784 /**
785 * Sets the postal address index.
786 *
787 * @param value the new postal address index
788 * @throws Exception the exception
789 */
790 public void setPostalAddressIndex(PhysicalAddressIndex value)
791 throws Exception {
792 this.getPropertyBag().setObjectFromPropertyDefinition(
793 ContactSchema.PostalAddressIndex, value);
794 }
795
796 /**
797 * Gets the contact's profession.
798 *
799 * @return the profession
800 * @throws ServiceLocalException the service local exception
801 */
802 public String getProfession() throws ServiceLocalException {
803 return getPropertyBag().getObjectFromPropertyDefinition(
804 ContactSchema.Profession);
805 }
806
807 /**
808 * Sets the profession.
809 *
810 * @param value the new profession
811 * @throws Exception the exception
812 */
813 public void setProfession(String value) throws Exception {
814 this.getPropertyBag().setObjectFromPropertyDefinition(
815 ContactSchema.Profession, value);
816 }
817
818 /**
819 * Gets the name of the contact's spouse.
820 *
821 * @return the spouse name
822 * @throws ServiceLocalException the service local exception
823 */
824 public String getSpouseName() throws ServiceLocalException {
825 return getPropertyBag().getObjectFromPropertyDefinition(
826 ContactSchema.SpouseName);
827 }
828
829 /**
830 * Sets the spouse name.
831 *
832 * @param value the new spouse name
833 * @throws Exception the exception
834 */
835 public void setSpouseName(String value) throws Exception {
836 this.getPropertyBag().setObjectFromPropertyDefinition(
837 ContactSchema.SpouseName, value);
838 }
839
840 /**
841 * Gets the surname of the contact.
842 *
843 * @return the surname
844 * @throws ServiceLocalException the service local exception
845 */
846 public String getSurname() throws ServiceLocalException {
847 return getPropertyBag().getObjectFromPropertyDefinition(
848 ContactSchema.Surname);
849 }
850
851 /**
852 * Sets the surname.
853 *
854 * @param value the new surname
855 * @throws Exception the exception
856 */
857 public void setSurname(String value) throws Exception {
858 this.getPropertyBag().setObjectFromPropertyDefinition(
859 ContactSchema.Surname, value);
860 }
861
862 /**
863 * Gets the date of the contact's wedding anniversary.
864 *
865 * @return the wedding anniversary
866 * @throws ServiceLocalException the service local exception
867 */
868 public Date getWeddingAnniversary() throws ServiceLocalException {
869 return getPropertyBag().getObjectFromPropertyDefinition(
870 ContactSchema.WeddingAnniversary);
871 }
872
873 /**
874 * Sets the wedding anniversary.
875 *
876 * @param value the new wedding anniversary
877 * @throws Exception the exception
878 */
879 public void setWeddingAnniversary(Date value) throws Exception {
880 this.getPropertyBag().setObjectFromPropertyDefinition(
881 ContactSchema.WeddingAnniversary, value);
882 }
883
884 /**
885 * Gets a value indicating whether this contact has a picture associated
886 * with it.
887 *
888 * @return the checks for picture
889 * @throws ServiceLocalException the service local exception
890 */
891 public Boolean getHasPicture() throws ServiceLocalException {
892 return getPropertyBag().getObjectFromPropertyDefinition(
893 ContactSchema.HasPicture);
894 }
895
896 /**
897 * Gets the funn phonetic name from the directory
898 */
899 public String getPhoneticFullName() throws Exception {
900 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.PhoneticFullName);
901 }
902
903 /**
904 * Gets the funn phonetic name from the directory
905 */
906 public String getPhoneticFirstName() throws Exception {
907 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.PhoneticFirstName);
908 }
909
910 /**
911 * Gets the phonetic last name from the directory
912 *
913 * @throws ServiceLocalException
914 */
915 public String getPhoneticLastName() throws ServiceLocalException {
916 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.PhoneticLastName);
917 }
918
919 /**
920 * Gets the Alias from the directory
921 *
922 * @throws ServiceLocalException
923 */
924 public String getAlias() throws ServiceLocalException {
925 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.Alias);
926 }
927
928 /**
929 * Get the Notes from the directory
930 *
931 * @throws ServiceLocalException
932 */
933 public String getNotes() throws ServiceLocalException {
934 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.Notes);
935 }
936
937 /**
938 * Gets the Photo from the directory
939 *
940 * @throws ServiceLocalException
941 */
942 public byte[] getDirectoryPhoto() throws ServiceLocalException {
943 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.Photo);
944 }
945
946 /**
947 * Gets the User SMIME certificate from the directory
948 *
949 * @throws ServiceLocalException
950 */
951 public byte[][] getUserSMIMECertificate() throws ServiceLocalException {
952 ByteArrayArray array = this.getPropertyBag()
953 .getObjectFromPropertyDefinition(ContactSchema.UserSMIMECertificate);
954 return array.getContent();
955 }
956
957 /**
958 * Gets the MSExchange certificate from the directory
959 *
960 * @throws ServiceLocalException
961 */
962 public byte[][] getMSExchangeCertificate() throws ServiceLocalException {
963 ByteArrayArray array = getPropertyBag()
964 .getObjectFromPropertyDefinition(ContactSchema.MSExchangeCertificate);
965 return array.getContent();
966 }
967
968 /**
969 * Gets the DirectoryID as Guid or DN string
970 *
971 * @throws ServiceLocalException
972 */
973 public String getDirectoryId() throws ServiceLocalException {
974 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.DirectoryId);
975 }
976
977 /**
978 * Gets the manager mailbox information
979 *
980 * @throws ServiceLocalException
981 */
982 public EmailAddress getManagerMailbox() throws ServiceLocalException {
983 return getPropertyBag().getObjectFromPropertyDefinition(ContactSchema.ManagerMailbox);
984 }
985
986 /**
987 * Get the direct reports mailbox information
988 *
989 * @throws ServiceLocalException
990 */
991 public EmailAddressCollection getDirectReports() throws ServiceLocalException {
992 return getPropertyBag()
993 .getObjectFromPropertyDefinition(ContactSchema.DirectReports);
994 }
995 }