Search in sources :

Example 1 with ContentType

use of com.google.gdata.util.ContentType in project janrufmonitor by tbrandt77.

the class GoogleContactsProxy method createContacts.

public synchronized void createContacts(ICallerList cl) throws GoogleContactsException {
    this.m_current = 0;
    this.m_total = 0;
    this.m_total = cl.size();
    try {
        fetchCategories();
    } catch (IOException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    } catch (ServiceException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    }
    if (cl.size() == 0)
        return;
    ContactsService cs = login();
    ICaller caller = null;
    ContactEntry entry = null;
    for (int i = 0, j = cl.size(); i < j; i++) {
        this.m_current++;
        caller = cl.get(i);
        IAttributeMap m = caller.getAttributes();
        try {
            entry = new ContactEntry();
            Name name = new Name();
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_LASTNAME))
                name.setFamilyName(new FamilyName((m.get(IJAMConst.ATTRIBUTE_NAME_LASTNAME).getValue().length() == 0 ? " " : m.get(IJAMConst.ATTRIBUTE_NAME_LASTNAME).getValue()), null));
            else
                name.setFamilyName(new FamilyName(" ", null));
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_FIRSTNAME))
                name.setGivenName(new GivenName((m.get(IJAMConst.ATTRIBUTE_NAME_FIRSTNAME).getValue().length() == 0 ? " " : m.get(IJAMConst.ATTRIBUTE_NAME_FIRSTNAME).getValue()), null));
            else
                name.setGivenName(new GivenName(" ", null));
            name.setFullName(new FullName(Formatter.getInstance(getRuntime()).parse("%a:ln%, %a:fn%", m), null));
            entry.setName(name);
            entry.addStructuredPostalAddress(createPostalAddress(m));
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_EMAIL)) {
                String emails = m.get(IJAMConst.ATTRIBUTE_NAME_EMAIL).getValue();
                Email email = new Email();
                email.setAddress(emails);
                entry.addEmailAddress(email);
            }
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_CATEGORY)) {
                String cat = m.get(IJAMConst.ATTRIBUTE_NAME_CATEGORY).getValue();
                if (this.m_reverseCategories.containsKey(cat)) {
                    GroupMembershipInfo gmi = new GroupMembershipInfo();
                    gmi.setHref((String) this.m_reverseCategories.get(cat));
                    entry.addGroupMembershipInfo(gmi);
                }
            }
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_GEO_ACC)) {
                ExtendedProperty acc = new ExtendedProperty();
                acc.setName(IJAMConst.ATTRIBUTE_NAME_GEO_ACC);
                acc.setValue(m.get(IJAMConst.ATTRIBUTE_NAME_GEO_ACC).getValue());
                entry.addExtendedProperty(acc);
            }
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_GEO_LNG)) {
                ExtendedProperty acc = new ExtendedProperty();
                acc.setName(IJAMConst.ATTRIBUTE_NAME_GEO_LNG);
                acc.setValue(m.get(IJAMConst.ATTRIBUTE_NAME_GEO_LNG).getValue());
                entry.addExtendedProperty(acc);
            }
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_GEO_LAT)) {
                ExtendedProperty acc = new ExtendedProperty();
                acc.setName(IJAMConst.ATTRIBUTE_NAME_GEO_LAT);
                acc.setValue(m.get(IJAMConst.ATTRIBUTE_NAME_GEO_LAT).getValue());
                entry.addExtendedProperty(acc);
            }
            PhoneNumber pn = null;
            if (caller instanceof IMultiPhoneCaller) {
                List phones = ((IMultiPhoneCaller) caller).getPhonenumbers();
                IPhonenumber p = null;
                for (int k = 0, l = phones.size(); k < l; k++) {
                    p = (IPhonenumber) phones.get(k);
                    pn = new PhoneNumber();
                    pn.setPrimary(k == 0);
                    IAttribute type = m.get(IJAMConst.ATTRIBUTE_NAME_NUMBER_TYPE + p.getTelephoneNumber());
                    if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_MOBILE_TYPE)) {
                        pn.setRel(PhoneNumber.Rel.MOBILE);
                    } else if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_FAX_TYPE)) {
                        pn.setRel(PhoneNumber.Rel.HOME_FAX);
                    } else {
                        pn.setRel(PhoneNumber.Rel.HOME);
                    }
                    pn.setPhoneNumber(Formatter.getInstance(getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNUMBER, p));
                    entry.addPhoneNumber(pn);
                }
            } else {
                pn = new PhoneNumber();
                IAttribute type = m.get(IJAMConst.ATTRIBUTE_NAME_NUMBER_TYPE + caller.getPhoneNumber().getTelephoneNumber());
                if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_MOBILE_TYPE)) {
                    pn.setRel(PhoneNumber.Rel.MOBILE);
                } else if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_FAX_TYPE)) {
                    pn.setRel(PhoneNumber.Rel.HOME_FAX);
                } else {
                    pn.setRel(PhoneNumber.Rel.HOME);
                }
                pn.setPhoneNumber(Formatter.getInstance(getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNUMBER, caller.getPhoneNumber()));
                entry.addPhoneNumber(pn);
            }
            URL postUrl = new URL("https://www.google.com/m8/feeds/contacts/" + getLoginUser() + "/full");
            entry = (ContactEntry) cs.insert(postUrl, entry);
            if (m.contains(IJAMConst.ATTRIBUTE_NAME_IMAGEPATH)) {
                String file = PathResolver.getInstance(getRuntime()).resolve(m.get(IJAMConst.ATTRIBUTE_NAME_IMAGEPATH).getValue());
                if (new File(file).exists()) {
                    FileInputStream in = new FileInputStream(file);
                    Link photoLink = entry.getContactPhotoLink();
                    URL photoUrl = new URL(photoLink.getHref());
                    GDataRequest request = cs.createRequest(GDataRequest.RequestType.UPDATE, photoUrl, new ContentType("image/jpeg"));
                    Stream.copy(in, request.getRequestStream());
                    request.execute();
                }
            }
            if (entry != null && this.m_dbh != null) {
                try {
                    if (caller instanceof IMultiPhoneCaller) {
                        List phones = ((IMultiPhoneCaller) caller).getPhonenumbers();
                        IPhonenumber p = null;
                        for (int k = 0; k < phones.size(); k++) {
                            p = (IPhonenumber) phones.get(k);
                            this.m_dbh.insert(caller.getUUID(), p.getIntAreaCode(), p.getAreaCode(), p.getCallNumber());
                        }
                    } else {
                        IPhonenumber p = caller.getPhoneNumber();
                        this.m_dbh.insert(caller.getUUID(), p.getIntAreaCode(), p.getAreaCode(), p.getCallNumber());
                    }
                } catch (SQLException e) {
                    throw new GoogleContactsException(e.getMessage(), e);
                }
            } else {
                this.m_logger.warning("GoogleContacts proxy datahandler not initialized. Could not insert google contacts...");
            }
        } catch (MalformedURLException e) {
            this.m_logger.log(Level.SEVERE, e.toString(), e);
        } catch (IOException e) {
            this.m_logger.log(Level.SEVERE, e.toString(), e);
        } catch (ServiceException e) {
            this.m_logger.log(Level.SEVERE, e.toString(), e);
        }
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) Email(com.google.gdata.data.extensions.Email) ContentType(com.google.gdata.util.ContentType) FamilyName(com.google.gdata.data.extensions.FamilyName) SQLException(java.sql.SQLException) GivenName(com.google.gdata.data.extensions.GivenName) GDataRequest(com.google.gdata.client.Service.GDataRequest) URL(java.net.URL) FamilyName(com.google.gdata.data.extensions.FamilyName) Name(com.google.gdata.data.extensions.Name) GivenName(com.google.gdata.data.extensions.GivenName) FullName(com.google.gdata.data.extensions.FullName) ContactsService(com.google.gdata.client.contacts.ContactsService) ContactEntry(com.google.gdata.data.contacts.ContactEntry) GroupMembershipInfo(com.google.gdata.data.contacts.GroupMembershipInfo) IAttributeMap(de.janrufmonitor.framework.IAttributeMap) IMultiPhoneCaller(de.janrufmonitor.framework.IMultiPhoneCaller) List(java.util.List) ArrayList(java.util.ArrayList) ICallerList(de.janrufmonitor.framework.ICallerList) IOException(java.io.IOException) ExtendedProperty(com.google.gdata.data.extensions.ExtendedProperty) FileInputStream(java.io.FileInputStream) ICaller(de.janrufmonitor.framework.ICaller) ServiceException(com.google.gdata.util.ServiceException) FullName(com.google.gdata.data.extensions.FullName) IAttribute(de.janrufmonitor.framework.IAttribute) PhoneNumber(com.google.gdata.data.extensions.PhoneNumber) File(java.io.File) Link(com.google.gdata.data.Link) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 2 with ContentType

use of com.google.gdata.util.ContentType in project janrufmonitor by tbrandt77.

the class GoogleContactsProxy method updateContact.

public synchronized void updateContact(ICaller caller) throws GoogleContactsException {
    try {
        fetchCategories();
    } catch (IOException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    } catch (ServiceException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    }
    if (caller == null)
        return;
    ContactsService cs = login();
    ContactEntry entry = null;
    IAttributeMap m = caller.getAttributes();
    try {
        if (caller.getAttributes().contains("entryUrl")) {
            String entryUrl = caller.getAttribute("entryUrl").getValue();
            if (entryUrl.length() > 0) {
                entry = (ContactEntry) cs.getEntry(new URL(entryUrl), ContactEntry.class);
                if (entry == null) {
                    this.m_logger.warning("Cannot update google contact: " + caller.toString());
                    return;
                }
            } else {
                this.m_logger.warning("Invalid entryUrl parameter. Cannot update google contact: " + caller.toString());
                return;
            }
        } else {
            // no update possible, contact must be new
            if (this.m_logger.isLoggable(Level.INFO))
                this.m_logger.info("No update possible dur to missing entryUrl. Creating google contact: " + caller.toString());
            ICallerList cl = getRuntime().getCallerFactory().createCallerList();
            cl.add(caller);
            this.createContacts(cl);
            return;
        }
        Name name = new Name();
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_LASTNAME))
            name.setFamilyName(new FamilyName((m.get(IJAMConst.ATTRIBUTE_NAME_LASTNAME).getValue().length() == 0 ? " " : m.get(IJAMConst.ATTRIBUTE_NAME_LASTNAME).getValue()), null));
        else
            name.setFamilyName(new FamilyName(" ", null));
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_FIRSTNAME))
            name.setGivenName(new GivenName((m.get(IJAMConst.ATTRIBUTE_NAME_FIRSTNAME).getValue().length() == 0 ? " " : m.get(IJAMConst.ATTRIBUTE_NAME_FIRSTNAME).getValue()), null));
        else
            name.setGivenName(new GivenName(" ", null));
        name.setFullName(new FullName(Formatter.getInstance(getRuntime()).parse("%a:ln%, %a:fn%", m), null));
        entry.setName(name);
        entry.getStructuredPostalAddresses().clear();
        entry.addStructuredPostalAddress(createPostalAddress(m));
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_EMAIL)) {
            List emaillist = entry.getEmailAddresses();
            String rel = Email.Rel.HOME;
            if (emaillist.size() > 0) {
                Email eold = entry.getEmailAddresses().remove(0);
                rel = eold.getRel();
            }
            Email email = new Email();
            email.setAddress(m.get(IJAMConst.ATTRIBUTE_NAME_EMAIL).getValue());
            email.setRel(rel);
            entry.addEmailAddress(email);
        }
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_CATEGORY)) {
            String cat = m.get(IJAMConst.ATTRIBUTE_NAME_CATEGORY).getValue();
            if (this.m_reverseCategories.containsKey(cat)) {
                GroupMembershipInfo gmi = new GroupMembershipInfo();
                gmi.setHref((String) this.m_reverseCategories.get(cat));
                entry.addGroupMembershipInfo(gmi);
            }
        }
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_GEO_ACC)) {
            ExtendedProperty acc = new ExtendedProperty();
            acc.setName(IJAMConst.ATTRIBUTE_NAME_GEO_ACC);
            acc.setValue(m.get(IJAMConst.ATTRIBUTE_NAME_GEO_ACC).getValue());
            entry.addExtendedProperty(acc);
        }
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_GEO_LNG)) {
            ExtendedProperty acc = new ExtendedProperty();
            acc.setName(IJAMConst.ATTRIBUTE_NAME_GEO_LNG);
            acc.setValue(m.get(IJAMConst.ATTRIBUTE_NAME_GEO_LNG).getValue());
            entry.addExtendedProperty(acc);
        }
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_GEO_LAT)) {
            ExtendedProperty acc = new ExtendedProperty();
            acc.setName(IJAMConst.ATTRIBUTE_NAME_GEO_LAT);
            acc.setValue(m.get(IJAMConst.ATTRIBUTE_NAME_GEO_LAT).getValue());
            entry.addExtendedProperty(acc);
        }
        PhoneNumber pn = null;
        entry.getPhoneNumbers().clear();
        if (caller instanceof IMultiPhoneCaller) {
            List phones = ((IMultiPhoneCaller) caller).getPhonenumbers();
            IPhonenumber p = null;
            for (int k = 0, l = phones.size(); k < l; k++) {
                p = (IPhonenumber) phones.get(k);
                pn = new PhoneNumber();
                pn.setPrimary(k == 0);
                IAttribute type = m.get(IJAMConst.ATTRIBUTE_NAME_NUMBER_TYPE + p.getTelephoneNumber());
                if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_MOBILE_TYPE)) {
                    pn.setRel(PhoneNumber.Rel.MOBILE);
                } else if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_FAX_TYPE)) {
                    pn.setRel(PhoneNumber.Rel.HOME_FAX);
                } else {
                    pn.setRel(PhoneNumber.Rel.HOME);
                }
                pn.setPhoneNumber(Formatter.getInstance(getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNUMBER, p));
                entry.addPhoneNumber(pn);
            }
        } else {
            pn = new PhoneNumber();
            IAttribute type = m.get(IJAMConst.ATTRIBUTE_NAME_NUMBER_TYPE + caller.getPhoneNumber().getTelephoneNumber());
            if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_MOBILE_TYPE)) {
                pn.setRel(PhoneNumber.Rel.MOBILE);
            } else if (type != null && type.getValue().equalsIgnoreCase(IJAMConst.ATTRIBUTE_VALUE_FAX_TYPE)) {
                pn.setRel(PhoneNumber.Rel.HOME_FAX);
            } else {
                pn.setRel(PhoneNumber.Rel.HOME);
            }
            pn.setPhoneNumber(Formatter.getInstance(getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNUMBER, caller.getPhoneNumber()));
            entry.addPhoneNumber(pn);
        }
        URL editUrl = new URL(entry.getEditLink().getHref());
        entry = (ContactEntry) cs.update(editUrl, entry);
        if (m.contains(IJAMConst.ATTRIBUTE_NAME_IMAGEPATH)) {
            String file = PathResolver.getInstance(getRuntime()).resolve(m.get(IJAMConst.ATTRIBUTE_NAME_IMAGEPATH).getValue());
            if (new File(file).exists()) {
                FileInputStream in = new FileInputStream(file);
                Link photoLink = entry.getContactPhotoLink();
                URL photoUrl = new URL(photoLink.getHref());
                GDataRequest request = cs.createRequest(GDataRequest.RequestType.UPDATE, photoUrl, new ContentType("image/jpeg"));
                if (photoLink.getEtag() != null) {
                    request.setEtag(photoLink.getEtag());
                }
                Stream.copy(in, request.getRequestStream());
                request.execute();
            }
        }
        if (entry != null && this.m_dbh != null) {
            try {
                if (caller instanceof IMultiPhoneCaller) {
                    List phones = ((IMultiPhoneCaller) caller).getPhonenumbers();
                    IPhonenumber p = null;
                    this.m_dbh.delete(caller.getUUID());
                    for (int k = 0; k < phones.size(); k++) {
                        p = (IPhonenumber) phones.get(k);
                        this.m_dbh.insert(caller.getUUID(), p.getIntAreaCode(), p.getAreaCode(), p.getCallNumber());
                    }
                } else {
                    IPhonenumber p = caller.getPhoneNumber();
                    this.m_dbh.delete(caller.getUUID());
                    this.m_dbh.insert(caller.getUUID(), p.getIntAreaCode(), p.getAreaCode(), p.getCallNumber());
                }
            } catch (SQLException e) {
                throw new GoogleContactsException(e.getMessage(), e);
            }
        } else {
            this.m_logger.warning("GoogleContacts proxy datahandler not initialized. Could not insert google contacts...");
        }
    } catch (MalformedURLException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    } catch (IOException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    } catch (ServiceException e) {
        throw new GoogleContactsException(e.getMessage(), e);
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) Email(com.google.gdata.data.extensions.Email) ContentType(com.google.gdata.util.ContentType) FamilyName(com.google.gdata.data.extensions.FamilyName) SQLException(java.sql.SQLException) GivenName(com.google.gdata.data.extensions.GivenName) GDataRequest(com.google.gdata.client.Service.GDataRequest) URL(java.net.URL) FamilyName(com.google.gdata.data.extensions.FamilyName) Name(com.google.gdata.data.extensions.Name) GivenName(com.google.gdata.data.extensions.GivenName) FullName(com.google.gdata.data.extensions.FullName) ContactsService(com.google.gdata.client.contacts.ContactsService) ContactEntry(com.google.gdata.data.contacts.ContactEntry) GroupMembershipInfo(com.google.gdata.data.contacts.GroupMembershipInfo) IAttributeMap(de.janrufmonitor.framework.IAttributeMap) List(java.util.List) ArrayList(java.util.ArrayList) ICallerList(de.janrufmonitor.framework.ICallerList) IMultiPhoneCaller(de.janrufmonitor.framework.IMultiPhoneCaller) IOException(java.io.IOException) ExtendedProperty(com.google.gdata.data.extensions.ExtendedProperty) FileInputStream(java.io.FileInputStream) ICallerList(de.janrufmonitor.framework.ICallerList) ServiceException(com.google.gdata.util.ServiceException) FullName(com.google.gdata.data.extensions.FullName) IAttribute(de.janrufmonitor.framework.IAttribute) PhoneNumber(com.google.gdata.data.extensions.PhoneNumber) File(java.io.File) Link(com.google.gdata.data.Link) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Aggregations

GDataRequest (com.google.gdata.client.Service.GDataRequest)2 ContactsService (com.google.gdata.client.contacts.ContactsService)2 Link (com.google.gdata.data.Link)2 ContactEntry (com.google.gdata.data.contacts.ContactEntry)2 GroupMembershipInfo (com.google.gdata.data.contacts.GroupMembershipInfo)2 Email (com.google.gdata.data.extensions.Email)2 ExtendedProperty (com.google.gdata.data.extensions.ExtendedProperty)2 FamilyName (com.google.gdata.data.extensions.FamilyName)2 FullName (com.google.gdata.data.extensions.FullName)2 GivenName (com.google.gdata.data.extensions.GivenName)2 Name (com.google.gdata.data.extensions.Name)2 PhoneNumber (com.google.gdata.data.extensions.PhoneNumber)2 ContentType (com.google.gdata.util.ContentType)2 ServiceException (com.google.gdata.util.ServiceException)2 IAttribute (de.janrufmonitor.framework.IAttribute)2 IAttributeMap (de.janrufmonitor.framework.IAttributeMap)2 ICallerList (de.janrufmonitor.framework.ICallerList)2 IMultiPhoneCaller (de.janrufmonitor.framework.IMultiPhoneCaller)2 IPhonenumber (de.janrufmonitor.framework.IPhonenumber)2 File (java.io.File)2