/* * Copyright (C) 2012 McEvoy Software Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mycontacts.resource; import com.mycontacts.model.ContactsDao; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import java.util.UUID; import net.sourceforge.cardme.engine.VCardEngine; import net.sourceforge.cardme.io.VCardWriter; import net.sourceforge.cardme.vcard.VCard; import net.sourceforge.cardme.vcard.features.EmailFeature; import net.sourceforge.cardme.vcard.features.TelephoneFeature; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author brad */ public class ContactManager { private static final Logger log = LoggerFactory.getLogger(ContactManager.class); private final ContactsDao contactsDao; public ContactManager(ContactsDao contactsDao) { this.contactsDao = contactsDao; } public ContactsDao.Contact createContact(String newName, String icalData) throws UnsupportedEncodingException { ContactsDao.Contact e = contactsDao.addContact(newName); update(e, icalData); return e; } public void update(ContactsDao.Contact contact, String data) { log.info("update: " + data); VCard vcard = parse(data); if (vcard.getUID() != null && vcard.getUID().hasUID()) { contact.setUid(vcard.getUID().getUID()); } else { log.warn("NO UID FOUND, making up our own"); contact.setUid(UUID.randomUUID().toString()); } if (vcard.getName() != null) { contact.setGivenName(vcard.getName().getGivenName()); contact.setSurName(vcard.getName().getFamilyName()); log.info("parsed name: " + contact.getGivenName() + " " + contact.getSurName()); } else { log.warn("No name component found!"); } contact.setMail(""); // reset in case none given Iterator<EmailFeature> it = vcard.getEmails(); while (it.hasNext()) { contact.setMail(it.next().getEmail()); } log.info("email: " + contact.getMail()); if (vcard.getOrganizations() != null) { // contact.setOrganizationName(""); // Iterator<String> itOrg = vcard.getOrganizations().getOrganizations(); // while (itOrg.hasNext()) { // contact.setOrganizationName(itOrg.next()); // } } String ph = getPhone(vcard); contact.setTelephonenumber(ph); log.info("phone: " + contact.getTelephonenumber()); contact.setIcalData(data); contactsDao.incrementContactsVersion(); } public VCard parse(String data) { VCardEngine cardEngine = new VCardEngine(); try { return cardEngine.parse(data); } catch (IOException ex) { throw new RuntimeException(ex); } } private String getPhone(VCard vcard) { Iterator<TelephoneFeature> itPhone = vcard.getTelephoneNumbers(); while (itPhone.hasNext()) { return itPhone.next().getTelephone(); } return null; } public List<VCard> parseMultiple(InputStream inputStream) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); IOUtils.copy(inputStream, bout); String vcardText = bout.toString("UTF-8"); VCardEngine cardEngine = new VCardEngine(); List<VCard> vcards = cardEngine.parseMultiple(vcardText); return vcards; } public ContactsDao getContactsDao() { return contactsDao; } }