/** * Sets the IM capabilities of a specific <tt>ContactDetail</tt> (e.g. <tt>supportedOpSets</tt>). * * @param contactDetail the <tt>ContactDetail</tt> to set the capabilities of * @param protocol protocol * @return <tt>contactDetail</tt> */ private ContactDetail setIMCapabilities( ContactDetail contactDetail, GoogleContactsEntry.IMProtocol protocol) { List<Class<? extends OperationSet>> supportedOpSets = new LinkedList<Class<? extends OperationSet>>(); Map<Class<? extends OperationSet>, String> preferredProtocols = new HashMap<Class<? extends OperationSet>, String>(); switch (protocol) { case GOOGLETALK: supportedOpSets.add(OperationSetBasicInstantMessaging.class); preferredProtocols.put(OperationSetBasicInstantMessaging.class, ProtocolNames.AIM); break; case ICQ: supportedOpSets.add(OperationSetBasicInstantMessaging.class); preferredProtocols.put(OperationSetBasicInstantMessaging.class, ProtocolNames.ICQ); break; case JABBER: supportedOpSets.add(OperationSetBasicInstantMessaging.class); preferredProtocols.put(OperationSetBasicInstantMessaging.class, ProtocolNames.JABBER); supportedOpSets.add(OperationSetBasicTelephony.class); preferredProtocols.put(OperationSetBasicTelephony.class, ProtocolNames.JABBER); break; case MSN: supportedOpSets.add(OperationSetBasicInstantMessaging.class); preferredProtocols.put(OperationSetBasicInstantMessaging.class, ProtocolNames.MSN); break; case YAHOO: supportedOpSets.add(OperationSetBasicInstantMessaging.class); preferredProtocols.put(OperationSetBasicInstantMessaging.class, ProtocolNames.YAHOO); break; default: break; } contactDetail.setSupportedOpSets(supportedOpSets); if (!preferredProtocols.isEmpty()) contactDetail.setPreferredProtocols(preferredProtocols); return contactDetail; }
/** * Gets the <tt>contactDetails</tt> to be set on a <tt>SourceContact</tt>. * * @param entry <tt>GoogleContactsEntry</tt> * @return the <tt>contactDetails</tt> to be set on a <tt>SourceContact</tt> */ private List<ContactDetail> getContactDetails(GoogleContactsEntry entry) { List<ContactDetail> ret = new LinkedList<ContactDetail>(); List<String> homeMails = entry.getHomeMails(); List<String> workMails = entry.getWorkMails(); List<String> mobilePhones = entry.getMobilePhones(); List<String> homePhones = entry.getHomePhones(); List<String> workPhones = entry.getWorkPhones(); Map<String, GoogleContactsEntry.IMProtocol> ims = entry.getIMAddresses(); ContactDetail detail = null; for (String mail : homeMails) { List<Class<? extends OperationSet>> supportedOpSets = new ArrayList<Class<? extends OperationSet>>(1); // can be added as contacts supportedOpSets.add(OperationSetPersistentPresence.class); detail = new ContactDetail( mail, ContactDetail.Category.Email, new ContactDetail.SubCategory[] {ContactDetail.SubCategory.Home}); detail.setSupportedOpSets(supportedOpSets); ret.add(detail); } for (String mail : workMails) { List<Class<? extends OperationSet>> supportedOpSets = new ArrayList<Class<? extends OperationSet>>(1); // can be added as contacts supportedOpSets.add(OperationSetPersistentPresence.class); detail = new ContactDetail( mail, ContactDetail.Category.Email, new ContactDetail.SubCategory[] {ContactDetail.SubCategory.Work}); detail.setSupportedOpSets(supportedOpSets); ret.add(detail); } for (String homePhone : homePhones) { List<Class<? extends OperationSet>> supportedOpSets = new ArrayList<Class<? extends OperationSet>>(2); supportedOpSets.add(OperationSetBasicTelephony.class); // can be added as contacts supportedOpSets.add(OperationSetPersistentPresence.class); homePhone = PhoneNumberI18nService.normalize(homePhone); detail = new ContactDetail( homePhone, ContactDetail.Category.Phone, new ContactDetail.SubCategory[] {ContactDetail.SubCategory.Home}); detail.setSupportedOpSets(supportedOpSets); ret.add(detail); } for (String workPhone : workPhones) { List<Class<? extends OperationSet>> supportedOpSets = new ArrayList<Class<? extends OperationSet>>(2); supportedOpSets.add(OperationSetBasicTelephony.class); // can be added as contacts supportedOpSets.add(OperationSetPersistentPresence.class); workPhone = PhoneNumberI18nService.normalize(workPhone); detail = new ContactDetail( workPhone, ContactDetail.Category.Phone, new ContactDetail.SubCategory[] {ContactDetail.SubCategory.Work}); detail.setSupportedOpSets(supportedOpSets); ret.add(detail); } for (String mobilePhone : mobilePhones) { List<Class<? extends OperationSet>> supportedOpSets = new ArrayList<Class<? extends OperationSet>>(2); supportedOpSets.add(OperationSetBasicTelephony.class); // can be added as contacts supportedOpSets.add(OperationSetPersistentPresence.class); mobilePhone = PhoneNumberI18nService.normalize(mobilePhone); detail = new ContactDetail( mobilePhone, ContactDetail.Category.Phone, new ContactDetail.SubCategory[] {ContactDetail.SubCategory.Mobile}); detail.setSupportedOpSets(supportedOpSets); ret.add(detail); } for (Map.Entry<String, GoogleContactsEntry.IMProtocol> im : ims.entrySet()) { if (im.getValue() != GoogleContactsEntry.IMProtocol.OTHER) { ContactDetail.SubCategory imSubCat; switch (im.getValue()) { case AIM: imSubCat = ContactDetail.SubCategory.AIM; break; case ICQ: imSubCat = ContactDetail.SubCategory.ICQ; break; case YAHOO: imSubCat = ContactDetail.SubCategory.Yahoo; break; case JABBER: imSubCat = ContactDetail.SubCategory.Jabber; break; case MSN: imSubCat = ContactDetail.SubCategory.MSN; break; case GOOGLETALK: imSubCat = ContactDetail.SubCategory.GoogleTalk; break; default: imSubCat = null; break; } detail = new ContactDetail( im.getKey(), ContactDetail.Category.InstantMessaging, new ContactDetail.SubCategory[] {imSubCat}); setIMCapabilities(detail, im.getValue()); // can be added as contacts detail.getSupportedOperationSets().add(OperationSetPersistentPresence.class); ret.add(detail); } } return ret; }