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());
}
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();
}
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();
}
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);
}
}
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;
}
Aggregations