Search in sources :

Example 6 with VCard

use of ezvcard.VCard in project data-transfer-project by google.

the class GoogleContactsExporterTest method exportFirstPage.

@Test
public void exportFirstPage() throws IOException {
    setUpSinglePersonResponse();
    // Looking at first page, with at least one page after it
    listConnectionsResponse.setNextPageToken(NEXT_PAGE_TOKEN);
    ExportResult<ContactsModelWrapper> result = contactsService.export(UUID.randomUUID(), null);
    // Check that correct methods were called
    verify(connections).list(SELF_RESOURCE);
    InOrder inOrder = Mockito.inOrder(getBatchGet);
    inOrder.verify(getBatchGet).setResourceNames(Collections.singletonList(RESOURCE_NAME));
    inOrder.verify(getBatchGet).setPersonFields(PERSON_FIELDS);
    inOrder.verify(getBatchGet).execute();
    // Check continuation data
    ContinuationData continuationData = (ContinuationData) result.getContinuationData();
    assertThat(continuationData.getContainerResources()).isEmpty();
    StringPaginationToken paginationToken = (StringPaginationToken) ((ContinuationData) result.getContinuationData()).getPaginationData();
    assertThat(paginationToken.getToken()).isEqualTo(NEXT_PAGE_TOKEN);
    // Check that the right number of VCards was returned
    JCardReader reader = new JCardReader(result.getExportedData().getVCards());
    List<VCard> vCardList = reader.readAll();
    assertThat(vCardList.size()).isEqualTo(connectionsList.size());
}
Also used : InOrder(org.mockito.InOrder) ContinuationData(org.dataportabilityproject.spi.transfer.types.ContinuationData) ContactsModelWrapper(org.dataportabilityproject.types.transfer.models.contacts.ContactsModelWrapper) JCardReader(ezvcard.io.json.JCardReader) VCard(ezvcard.VCard) StringPaginationToken(org.dataportabilityproject.spi.transfer.types.StringPaginationToken) Test(org.junit.Test)

Example 7 with VCard

use of ezvcard.VCard in project data-transfer-project by google.

the class GoogleContactsImportConversionTest method testConversionToGoogleNames.

@Test
public void testConversionToGoogleNames() {
    // Set up vCard with a primary name and one secondary name
    String primaryGivenName = "Mark";
    String primaryFamilyName = "Twain";
    String primarySourceType = "CONTACT";
    StructuredName primaryName = makeStructuredName(primaryGivenName, primaryFamilyName, primarySourceType);
    String altGivenName = "Samuel";
    String altFamilyName = "Clemens";
    String altSourceType = "PROFILE";
    StructuredName altName = makeStructuredName(altGivenName, altFamilyName, altSourceType);
    VCard vCard = new VCard();
    vCard.addProperty(primaryName);
    vCard.addPropertyAlt(StructuredName.class, Collections.singleton(altName));
    // Run test
    Person person = GoogleContactsImporter.convert(vCard);
    // Check results
    // Correct number of names
    assertThat(person.getNames().size()).isEqualTo(1);
    // Check primary names
    List<Name> actualPrimaryNames = person.getNames().stream().filter(a -> a.getMetadata().getPrimary()).collect(Collectors.toList());
    List<Pair<String, String>> actualPrimaryNameValues = actualPrimaryNames.stream().map(GoogleContactsImportConversionTest::getGivenAndFamilyValues).collect(Collectors.toList());
    assertThat(actualPrimaryNameValues).containsExactly(Pair.of(primaryGivenName, primaryFamilyName));
    List<String> actualPrimaryNameSourceValues = actualPrimaryNames.stream().map(a -> a.getMetadata().getSource().getType()).collect(Collectors.toList());
    assertThat(actualPrimaryNameSourceValues).containsExactly(primarySourceType);
    // Check secondary names - there shouldn't be any
    List<Name> actualSecondaryNames = person.getNames().stream().filter(a -> !a.getMetadata().getPrimary()).collect(Collectors.toList());
    assertThat(actualSecondaryNames).isEmpty();
}
Also used : VCard(ezvcard.VCard) EmailAddress(com.google.api.services.people.v1.model.EmailAddress) Telephone(ezvcard.property.Telephone) Test(org.junit.Test) PhoneNumber(com.google.api.services.people.v1.model.PhoneNumber) Truth.assertThat(com.google.common.truth.Truth.assertThat) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) StructuredName(ezvcard.property.StructuredName) SOURCE_PARAM_NAME_TYPE(org.dataportabilityproject.datatransfer.google.common.GoogleStaticObjects.SOURCE_PARAM_NAME_TYPE) Pair(com.google.gdata.util.common.base.Pair) Person(com.google.api.services.people.v1.model.Person) List(java.util.List) CONTACT_SOURCE_TYPE(org.dataportabilityproject.datatransfer.google.common.GoogleStaticObjects.CONTACT_SOURCE_TYPE) Nullable(com.google.gdata.util.common.base.Nullable) Address(com.google.api.services.people.v1.model.Address) Email(ezvcard.property.Email) VCARD_PRIMARY_PREF(org.dataportabilityproject.datatransfer.google.common.GoogleStaticObjects.VCARD_PRIMARY_PREF) Name(com.google.api.services.people.v1.model.Name) Collections(java.util.Collections) Before(org.junit.Before) StructuredName(ezvcard.property.StructuredName) VCard(ezvcard.VCard) Person(com.google.api.services.people.v1.model.Person) StructuredName(ezvcard.property.StructuredName) Name(com.google.api.services.people.v1.model.Name) Pair(com.google.gdata.util.common.base.Pair) Test(org.junit.Test)

Example 8 with VCard

use of ezvcard.VCard in project data-transfer-project by google.

the class GoogleContactsImporterTest method importFirstResources.

@Test
public void importFirstResources() throws IOException {
    // Set up: small number of VCards to be imported
    int numberOfVCards = 5;
    List<VCard> vCardList = new LinkedList<>();
    for (int i = 0; i < numberOfVCards; i++) {
        StructuredName structuredName = new StructuredName();
        structuredName.setFamily("Family" + i);
        structuredName.setParameter(SOURCE_PARAM_NAME_TYPE, CONTACT_SOURCE_TYPE);
        VCard vCard = new VCard();
        vCard.setStructuredName(structuredName);
        vCardList.add(vCard);
    }
    String vCardString = GoogleContactsExporter.makeVCardString(vCardList);
    ContactsModelWrapper wrapper = new ContactsModelWrapper(vCardString);
    // Run test
    contactsService.importItem(UUID.randomUUID(), null, wrapper);
    // Check that the right methods were called
    verify(people, times(numberOfVCards)).createContact(any(Person.class));
    verify(createContact, times(numberOfVCards)).execute();
}
Also used : ContactsModelWrapper(org.dataportabilityproject.types.transfer.models.contacts.ContactsModelWrapper) VCard(ezvcard.VCard) StructuredName(ezvcard.property.StructuredName) Person(com.google.api.services.people.v1.model.Person) LinkedList(java.util.LinkedList) Test(org.junit.Test)

Example 9 with VCard

use of ezvcard.VCard in project data-transfer-project by google.

the class ToGraphContactTransformer method copyPersonData.

private void copyPersonData(VCard card, Map<String, Object> contact, TransformerContext context) {
    // Addresses are lossy: there is no distinction in VCard between business and home addresses
    if (!card.getAddresses().isEmpty()) {
        safeSet("homeAddress", context.transform(LinkedHashMap.class, card.getAddresses().get(0)), contact);
    }
    card.getEmails().stream().filter(v -> v.getValue() != null).forEach(v -> addEmail(v, contact));
    card.getTelephoneNumbers().stream().filter(t -> t.getText() != null).forEach(telephone -> {
        for (TelephoneType telephoneType : telephone.getTypes()) {
            if (TelephoneType.CELL.equals(telephoneType)) {
                // this could overwrite some numbers since MS contacts only have one mobile
                contact.put("mobilePhone", telephone.getText());
            } else if (TelephoneType.WORK.equals(telephoneType)) {
                addPhone("businessPhones", telephone, contact);
            } else {
                addPhone("homePhones", telephone, contact);
            }
        }
    });
    if (card.getBirthday() != null) {
        safeSet("birthday", card.getBirthday().getText(), contact);
    }
}
Also used : VCard(ezvcard.VCard) TelephoneType(ezvcard.parameter.TelephoneType) TransformerContext(org.dataportabilityproject.transfer.microsoft.transformer.TransformerContext) BiFunction(java.util.function.BiFunction) Telephone(ezvcard.property.Telephone) StructuredName(ezvcard.property.StructuredName) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) List(java.util.List) TransformerHelper.safeSet(org.dataportabilityproject.transfer.microsoft.transformer.common.TransformerHelper.safeSet) Title(ezvcard.property.Title) Map(java.util.Map) Organization(ezvcard.property.Organization) Email(ezvcard.property.Email) Expertise(ezvcard.property.Expertise) TelephoneType(ezvcard.parameter.TelephoneType) LinkedHashMap(java.util.LinkedHashMap)

Example 10 with VCard

use of ezvcard.VCard in project data-transfer-project by google.

the class GoogleContactToVCardConverter method convert.

@VisibleForTesting
static VCard convert(Person person) {
    VCard vCard = new VCard();
    /* Reluctant to set the VCard.Kind value, since a) there aren't that many type options for
    Google contacts,
    b) those type options are often wrong, and c) those type options aren't even reliably in the
    same place.
    Source: https://developers.google.com/people/api/rest/v1/people#personmetadata
    */
    Preconditions.checkArgument(atLeastOneNamePresent(person.getNames()), "At least one name must be present");
    convertToVCardNamesAndPopulate(vCard, person.getNames());
    if (person.getAddresses() != null) {
        // VCard API does not support adding multiple addresses at once
        person.getAddresses().forEach(a -> vCard.addAddress(convertToVCardAddress(a)));
    }
    if (person.getPhoneNumbers() != null) {
        // VCard API does not support adding multiple telephone numbers at once
        person.getPhoneNumbers().forEach(n -> vCard.addTelephoneNumber(convertToVCardTelephone(n)));
    }
    if (person.getEmailAddresses() != null) {
        // VCard API does not support adding multiple emails at once
        person.getEmailAddresses().forEach(e -> vCard.addEmail(convertToVCardEmail(e)));
    }
    return vCard;
}
Also used : VCard(ezvcard.VCard) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Aggregations

VCard (ezvcard.VCard)189 Test (org.junit.Test)134 StringWriter (java.io.StringWriter)29 StructuredName (ezvcard.property.StructuredName)23 Person (com.google.api.services.people.v1.model.Person)22 Telephone (ezvcard.property.Telephone)21 Photo (ezvcard.property.Photo)17 Email (ezvcard.property.Email)16 List (java.util.List)16 EmailAddress (com.google.api.services.people.v1.model.EmailAddress)15 Document (org.w3c.dom.Document)15 VCardVersion (ezvcard.VCardVersion)14 XCardDocumentStreamWriter (ezvcard.io.xml.XCardDocument.XCardDocumentStreamWriter)14 Address (ezvcard.property.Address)14 PhoneNumber (com.google.api.services.people.v1.model.PhoneNumber)13 Collectors (java.util.stream.Collectors)12 Name (com.google.api.services.people.v1.model.Name)11 File (java.io.File)11 Truth.assertThat (com.google.common.truth.Truth.assertThat)10 Pair (com.google.gdata.util.common.base.Pair)10