/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.googlecontacts; import java.util.*; import net.java.sip.communicator.service.googlecontacts.*; import com.google.gdata.data.*; import com.google.gdata.data.contacts.ContactEntry; import com.google.gdata.data.extensions.*; //disambiguation /** * Google Contacts entry implementation. * * @author Sebastien Vincent */ public class GoogleContactsEntryImpl implements GoogleContactsEntry { /** * Google Talk protocol type. */ private static final String GOOGLETALK_PROTOCOL = "http://schemas.google.com/g/2005#GOOGLE_TALK"; /** * Google Talk protocol type. */ private static final String AIM_PROTOCOL = "http://schemas.google.com/g/2005#AIM"; /** * Google Talk protocol type. */ private static final String SKYPE_PROTOCOL = "http://schemas.google.com/g/2005#SKYPE"; /** * Google Talk protocol type. */ private static final String ICQ_PROTOCOL = "http://schemas.google.com/g/2005#ICQ"; /** * Google Talk protocol type. */ private static final String JABBER_PROTOCOL = "http://schemas.google.com/g/2005#JABBER"; /** * Full name. */ private String fullName = null; /** * Family name. */ private String familyName = null; /** * Given name. */ private String givenName = null; /** * Home mails list. */ private final List<String> homeMails = new ArrayList<String>(); /** * Work mails list. */ private final List<String> workMails = new ArrayList<String>(); /** * Home phones list. */ private final List<String> homePhones = new ArrayList<String>(); /** * Work phones list. */ private final List<String> workPhones = new ArrayList<String>(); /** * Mobile phones list. */ private final List<String> mobilePhones = new ArrayList<String>(); /** * IM addresses map. */ private final Map<String, IMProtocol> imAddresses = new HashMap<String, IMProtocol>(); /** * Photo link. */ private String photoLink = null; /** * Google photo link. */ private Link googlePhotoLink = null; /** * Get the full name. * * @return full name */ public String getFullName() { return fullName; } /** * Get the family name. * * @return family name */ public String getFamilyName() { return familyName; } /** * Get the given name. * * @return given name */ public String getGivenName() { return givenName; } /** * Returns mails. * * @return mails */ public List<String> getAllMails() { List<String> mails = new ArrayList<String>(); for(String mail : homeMails) { mails.add(mail); } for(String mail : workMails) { mails.add(mail); } return mails; } /** * Adds a home mail address. * * @param mail the mail address */ public void addHomeMail(String mail) { homeMails.add(mail); } /** * Returns home mail addresses. * * @return home mail addresses */ public List<String> getHomeMails() { return homeMails; } /** * Adds a work mail address. * * @param mail the mail address */ public void addWorkMails(String mail) { workMails.add(mail); } /** * Returns work mail addresses. * * @return work mail addresses */ public List<String> getWorkMails() { return workMails; } /** * Returns telephone numbers. * * @return telephone numbers */ public List<String> getAllPhones() { List<String> phones = new ArrayList<String>(); for(String phone : mobilePhones) { phones.add(phone); } for(String phone : homePhones) { phones.add(phone); } for(String phone : workPhones) { phones.add(phone); } return phones; } /** * Adds a work telephone number. * * @param telephoneNumber the work telephone number */ public void addWorkPhone(String telephoneNumber) { workPhones.add(telephoneNumber); } /** * Returns work telephone numbers. * * @return work telephone numbers */ public List<String> getWorkPhones() { return workPhones; } /** * Adds a mobile telephone numbers. * * @param telephoneNumber the mobile telephone number */ public void addMobilePhone(String telephoneNumber) { mobilePhones.add(telephoneNumber); } /** * Returns mobile telephone numbers. * * @return mobile telephone numbers */ public List<String> getMobilePhones() { return mobilePhones; } /** * Adds a home telephone numbers. * * @param telephoneNumber the home telephone number */ public void addHomePhone(String telephoneNumber) { homePhones.add(telephoneNumber); } /** * Returns home telephone numbers. * * @return home telephone numbers */ public List<String> getHomePhones() { return homePhones; } /** * Get the photo full URI. * * @return the photo URI or null if there isn't */ public String getPhoto() { return photoLink; } /** * Get the Google photo full URI. * * @return the Google photo URI or null if there isn't */ public Link getPhotoLink() { return googlePhotoLink; } /** * Returns IM addresses. * * @return IM addresses */ public Map<String, IMProtocol> getIMAddresses() { return imAddresses; } /** * Adds an IM address. * * @param imAddress IM address */ public void addIMAddress(String imAddress, IMProtocol protocol) { imAddresses.put(imAddress, protocol); } /** * Set information. * * @param contact Google Contacts's <tt>ContactEntry</tt> */ public void setField(ContactEntry contact) { Name name = contact.getName(); if(name != null) { if(name.hasFullName()) { fullName = name.getFullName().getValue(); } if(name.hasFamilyName()) { familyName = name.getFamilyName().getValue(); } if(name.hasGivenName()) { givenName = name.getGivenName().getValue(); } } googlePhotoLink = contact.getContactPhotoLink(); photoLink = googlePhotoLink.getHref(); for(Email mail : contact.getEmailAddresses()) { if(mail.getRel() == null) { homeMails.add(mail.getAddress()); } else if(mail.getRel().contains("#home")) { homeMails.add(mail.getAddress()); } else if(mail.getRel().contains("#work")) { workMails.add(mail.getAddress()); } else { homeMails.add(mail.getAddress()); } } for(PhoneNumber phone : contact.getPhoneNumbers()) { if(phone.getRel() == null) { homePhones.add(phone.getPhoneNumber()); } else if(phone.getRel().contains("#work")) { workPhones.add(phone.getPhoneNumber()); } else if(phone.getRel().contains("#mobile")) { mobilePhones.add(phone.getPhoneNumber()); } else if(phone.getRel().contains("#home")) { homePhones.add(phone.getPhoneNumber()); } else { homePhones.add(phone.getPhoneNumber()); } } for(Im imAddress : contact.getImAddresses()) { String protocol = imAddress.getProtocol(); IMProtocol proto; if(protocol == null) { proto = GoogleContactsEntry.IMProtocol.OTHER; } else if(protocol.equals(GOOGLETALK_PROTOCOL)) { proto = GoogleContactsEntry.IMProtocol.GOOGLETALK; } else if(protocol.equals(AIM_PROTOCOL)) { proto = GoogleContactsEntry.IMProtocol.AIM; } else if(protocol.equals(SKYPE_PROTOCOL)) { proto = GoogleContactsEntry.IMProtocol.SKYPE; } else if(protocol.equals(ICQ_PROTOCOL)) { proto = GoogleContactsEntry.IMProtocol.ICQ; } else if(protocol.equals(JABBER_PROTOCOL)) { proto = GoogleContactsEntry.IMProtocol.JABBER; } else { proto = GoogleContactsEntry.IMProtocol.OTHER; } imAddresses.put(imAddress.getAddress(), proto); } } /** * String representation of the <tt>GoogleContactsEntry</tt>. */ @Override public String toString() { StringBuffer buffer = new StringBuffer(); if(fullName != null) { buffer.append("Full name: "); buffer.append(fullName); buffer.append("\n"); } if(givenName != null || familyName != null) { buffer.append("Display name: "); buffer.append(givenName != null ? givenName : ""); buffer.append(" "); buffer.append(familyName != null ? familyName : ""); buffer.append("\n"); } if(getAllMails().size() > 0) { buffer.append("Mail:\n"); for(String mail : getAllMails()) { buffer.append("\t"); buffer.append(mail); buffer.append("\n"); } } if(workPhones.size() > 0) { buffer.append("Work phones:\n"); for(String phone : workPhones) { buffer.append("\t"); buffer.append(phone); buffer.append("\n"); } } if(homePhones.size() > 0) { buffer.append("Home phones:\n"); for(String phone : homePhones) { buffer.append("\t"); buffer.append(phone); buffer.append("\n"); } } if(mobilePhones.size() > 0) { buffer.append("Mobile phones:\n"); for(String phone : mobilePhones) { buffer.append("\t"); buffer.append(phone); buffer.append("\n"); } } if(imAddresses.size() > 0) { buffer.append("IM addresses:\n"); for(Map.Entry<String, IMProtocol> entry : imAddresses.entrySet()) { buffer.append("\t"); buffer.append(entry.getKey()); buffer.append(" ("); buffer.append(entry.getValue()); buffer.append(")\n"); } } buffer.append("\n"); return buffer.toString(); } }