Search in sources :

Example 1 with Address

use of ezvcard.property.Address in project qksms by moezbhatti.

the class ContactOperations method convertAddresses.

private void convertAddresses(List<NonEmptyContentValues> contentValues, VCard vcard) {
    for (Address address : vcard.getAddresses()) {
        NonEmptyContentValues cv = new NonEmptyContentValues(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
        String street = address.getStreetAddress();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, street);
        String poBox = address.getPoBox();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, poBox);
        String city = address.getLocality();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, city);
        String state = address.getRegion();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, state);
        String zipCode = address.getPostalCode();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, zipCode);
        String country = address.getCountry();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, country);
        String label = address.getLabel();
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.LABEL, label);
        int addressKind = DataMappings.getAddressType(address);
        cv.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, addressKind);
        contentValues.add(cv);
    }
}
Also used : Address(ezvcard.property.Address)

Example 2 with Address

use of ezvcard.property.Address in project data-transfer-project by google.

the class ToVCardAddressTransformer method apply.

@Override
public Address apply(Map<String, String> addressMap, TransformerContext context) {
    Address address = new Address();
    address.setStreetAddress(addressMap.get("street"));
    address.setLocality(addressMap.get("city"));
    address.setCountry(addressMap.get("countryOrRegion"));
    address.setPostalCode(addressMap.get("postalCode"));
    address.setRegion(addressMap.get("state"));
    return address;
}
Also used : Address(ezvcard.property.Address)

Example 3 with Address

use of ezvcard.property.Address in project ofbiz-framework by apache.

the class VCard method importVCard.

/**
 * import a vcard from byteBuffer. the reader use is ez-vcard, see official site https://github.com/mangstadt/ez-vcard/
 * @param dctx
 * @param context
 * @return
 * @throws IOException
 */
public static Map<String, Object> importVCard(DispatchContext dctx, Map<String, ? extends Object> context) throws IOException {
    LocalDispatcher dispatcher = dctx.getDispatcher();
    Delegator delegator = dctx.getDelegator();
    Locale locale = (Locale) context.get("locale");
    Map<String, Object> result = ServiceUtil.returnSuccess();
    ByteBuffer byteBuffer = (ByteBuffer) context.get("infile");
    byte[] inputByteArray = byteBuffer.array();
    InputStream in = new ByteArrayInputStream(inputByteArray);
    Map<String, Object> serviceCtx = new HashMap<String, Object>();
    boolean isGroup = false;
    List<Map<String, String>> partiesCreated = new ArrayList<Map<String, String>>();
    List<Map<String, String>> partiesExist = new ArrayList<Map<String, String>>();
    // TODO this is not used yet
    String partyName = "";
    try (VCardReader vCardReader = new VCardReader(in)) {
        ezvcard.VCard vcard = null;
        while ((vcard = vCardReader.readNext()) != null) {
            // Todo create a generic service to resolve duplicate party
            FormattedName formattedName = vcard.getFormattedName();
            if (formattedName != null) {
                String refCardId = formattedName.getValue();
                GenericValue partyIdentification = EntityQuery.use(delegator).from("PartyIdentification").where("partyIdentificationTypeId", "VCARD_FN_ORIGIN", "idValue", refCardId).queryFirst();
                if (partyIdentification != null) {
                    partiesExist.add(UtilMisc.toMap("partyId", (String) partyIdentification.get("partyId")));
                    continue;
                }
            // TODO manage update
            }
            // check if it's already load
            isGroup = false;
            if (vcard.getKind() != null)
                isGroup = vcard.getKind().isGroup();
            StructuredName structuredName = vcard.getStructuredName();
            if (UtilValidate.isEmpty(structuredName))
                continue;
            if (!isGroup) {
                serviceCtx.put("firstName", structuredName.getGiven());
                serviceCtx.put("lastName", structuredName.getFamily());
                partyName = structuredName.getGiven() + " " + structuredName.getFamily();
            }
            // Resolve all postal Address
            for (Address address : vcard.getAddresses()) {
                boolean workAddress = false;
                for (AddressType addressType : address.getTypes()) {
                    if (AddressType.PREF.equals(addressType) || AddressType.WORK.equals(addressType)) {
                        workAddress = true;
                        break;
                    }
                }
                if (!workAddress)
                    continue;
                serviceCtx.put("address1", address.getStreetAddressFull());
                serviceCtx.put("city", address.getLocality());
                serviceCtx.put("postalCode", address.getPostalCode());
                GenericValue countryGeo = EntityQuery.use(delegator).from("Geo").where(EntityCondition.makeCondition("geoTypeId", EntityOperator.EQUALS, "COUNTRY"), EntityCondition.makeCondition("geoName", EntityOperator.LIKE, address.getCountry())).cache().queryFirst();
                if (countryGeo != null) {
                    serviceCtx.put("countryGeoId", countryGeo.get("geoId"));
                }
                GenericValue stateGeo = EntityQuery.use(delegator).from("Geo").where(EntityCondition.makeCondition("geoTypeId", EntityOperator.EQUALS, "STATE"), EntityCondition.makeCondition("geoName", EntityOperator.LIKE, address.getRegion())).cache().queryFirst();
                if (stateGeo != null) {
                    serviceCtx.put("stateProvinceGeoId", stateGeo.get("geoId"));
                }
            }
            int nbEmailAddr = (vcard.getEmails() != null) ? vcard.getEmails().size() : 0;
            for (Email email : vcard.getEmails()) {
                if (nbEmailAddr > 1) {
                    boolean workEmail = false;
                    for (EmailType emailType : email.getTypes()) {
                        if (EmailType.PREF.equals(emailType) || EmailType.WORK.equals(emailType)) {
                            workEmail = true;
                            break;
                        }
                    }
                    if (!workEmail)
                        continue;
                }
                String emailAddr = email.getValue();
                if (UtilValidate.isEmail(emailAddr)) {
                    serviceCtx.put("emailAddress", emailAddr);
                } else {
                    // TODO change uncorrect labellisation
                    String emailFormatErrMsg = UtilProperties.getMessage(resourceError, "SfaImportVCardEmailFormatError", locale);
                    vCardReader.close();
                    return ServiceUtil.returnError(UtilProperties.getMessage(resourceError, "MarketingEmailFormatError", UtilMisc.toMap("firstName", structuredName.getGiven(), "lastName", structuredName.getFamily(), "emailFOrmatErrMsg", emailFormatErrMsg), locale));
                }
            }
            int nbPhone = (vcard.getTelephoneNumbers() != null) ? vcard.getTelephoneNumbers().size() : 0;
            for (Telephone phone : vcard.getTelephoneNumbers()) {
                if (nbPhone > 1) {
                    boolean workPhone = false;
                    for (TelephoneType phoneType : phone.getTypes()) {
                        if (TelephoneType.PREF.equals(phoneType) || TelephoneType.WORK.equals(phoneType)) {
                            workPhone = true;
                            break;
                        }
                    }
                    if (!workPhone)
                        continue;
                }
                String phoneAddr = phone.getText();
                boolean internationalPhone = phoneAddr.startsWith("+") || phoneAddr.startsWith("00");
                phoneAddr = StringUtil.removeNonNumeric(phoneAddr);
                int indexLocal = 0;
                if (internationalPhone) {
                    indexLocal = 4;
                    if (!phoneAddr.startsWith("00")) {
                        phoneAddr = phoneAddr.concat("00");
                    }
                    serviceCtx.put("areaCode", phoneAddr.substring(0, indexLocal));
                }
                serviceCtx.put("contactNumber", phoneAddr.substring(indexLocal));
            }
            /* TODO improve this part to manage party organization */
            GenericValue userLogin = (GenericValue) context.get("userLogin");
            serviceCtx.put("userLogin", userLogin);
            String serviceName = (String) context.get("serviceName");
            Map<String, Object> serviceContext = UtilGenerics.cast(context.get("serviceContext"));
            if (UtilValidate.isNotEmpty(serviceContext)) {
                for (Map.Entry<String, Object> entry : serviceContext.entrySet()) {
                    serviceCtx.put(entry.getKey(), entry.getValue());
                }
            }
            Map<String, Object> resp = dispatcher.runSync(serviceName, serviceCtx);
            if (ServiceUtil.isError(resp)) {
                return ServiceUtil.returnError(ServiceUtil.getErrorMessage(resp));
            }
            partiesCreated.add(UtilMisc.toMap("partyId", (String) resp.get("partyId")));
            if (formattedName != null) {
                // store the origin creation
                Map<String, Object> createPartyIdentificationMap = dctx.makeValidContext("createPartyIdentification", ModelService.IN_PARAM, context);
                createPartyIdentificationMap.put("partyId", resp.get("partyId"));
                createPartyIdentificationMap.put("partyIdentificationTypeId", "VCARD_FN_ORIGIN");
                createPartyIdentificationMap.put("idValue", formattedName.getValue());
                resp = dispatcher.runSync("createPartyIdentification", createPartyIdentificationMap);
                if (ServiceUtil.isError(resp)) {
                    return ServiceUtil.returnError(ServiceUtil.getErrorMessage(resp));
                }
            }
        }
    } catch (IOException | GenericEntityException | GenericServiceException e) {
        Debug.logError(e, module);
        return ServiceUtil.returnError(UtilProperties.getMessage(resourceError, "SfaImportVCardError", UtilMisc.toMap("errorString", e.getMessage()), locale));
    }
    result.put("partiesCreated", partiesCreated);
    result.put("partiesExist", partiesExist);
    return result;
}
Also used : Locale(java.util.Locale) LocalDispatcher(org.apache.ofbiz.service.LocalDispatcher) Email(ezvcard.property.Email) EmailType(ezvcard.parameter.EmailType) Address(ezvcard.property.Address) Telephone(ezvcard.property.Telephone) HashMap(java.util.HashMap) FormattedName(ezvcard.property.FormattedName) ArrayList(java.util.ArrayList) TelephoneType(ezvcard.parameter.TelephoneType) StructuredName(ezvcard.property.StructuredName) GenericValue(org.apache.ofbiz.entity.GenericValue) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) IOException(java.io.IOException) ByteBuffer(java.nio.ByteBuffer) VCardReader(ezvcard.io.text.VCardReader) Delegator(org.apache.ofbiz.entity.Delegator) ByteArrayInputStream(java.io.ByteArrayInputStream) GenericEntityException(org.apache.ofbiz.entity.GenericEntityException) GenericServiceException(org.apache.ofbiz.service.GenericServiceException) AddressType(ezvcard.parameter.AddressType) HashMap(java.util.HashMap) Map(java.util.Map)

Example 4 with Address

use of ezvcard.property.Address in project ofbiz-framework by apache.

the class VCard method exportVCard.

public static Map<String, Object> exportVCard(DispatchContext dctx, Map<String, ? extends Object> context) {
    Delegator delegator = dctx.getDelegator();
    String partyId = (String) context.get("partyId");
    Locale locale = (Locale) context.get("locale");
    File file = null;
    try {
        ezvcard.VCard vcard = new ezvcard.VCard();
        StructuredName structuredName = new StructuredName();
        GenericValue person = EntityQuery.use(delegator).from("Person").where("partyId", partyId).queryOne();
        if (person != null) {
            if (UtilValidate.isNotEmpty(person.getString("firstName")))
                structuredName.setGiven(person.getString("firstName"));
            if (UtilValidate.isNotEmpty(person.getString("lastName")))
                structuredName.setFamily(person.getString("lastName"));
            vcard.setStructuredName(structuredName);
        }
        String fullName = PartyHelper.getPartyName(delegator, partyId, false);
        vcard.setFormattedName(fullName);
        GenericValue postalAddress = PartyWorker.findPartyLatestPostalAddress(partyId, delegator);
        if (postalAddress != null) {
            Address address = new Address();
            address.setStreetAddress(postalAddress.getString("address1"));
            address.setLocality(postalAddress.getString("city"));
            address.setPostalCode(postalAddress.getString("postalCode"));
            GenericValue state = postalAddress.getRelatedOne("StateProvinceGeo", false);
            if (state != null) {
                address.setRegion(state.getString("geoName"));
            }
            GenericValue countryGeo = postalAddress.getRelatedOne("CountryGeo", false);
            if (countryGeo != null) {
                String country = postalAddress.getRelatedOne("CountryGeo", false).getString("geoName");
                address.setCountry(country);
                address.getTypes().add(AddressType.WORK);
                ;
            // TODO : this can be better set by checking contactMechPurposeTypeId
            }
            vcard.addAddress(address);
        }
        GenericValue telecomNumber = PartyWorker.findPartyLatestTelecomNumber(partyId, delegator);
        if (telecomNumber != null) {
            Telephone tel = new Telephone(telecomNumber.getString("areaCode") + telecomNumber.getString("contactNumber"));
            tel.getTypes().add(TelephoneType.WORK);
            vcard.addTelephoneNumber(tel);
        // TODO : this can be better set by checking contactMechPurposeTypeId
        }
        GenericValue emailAddress = PartyWorker.findPartyLatestContactMech(partyId, "EMAIL_ADDRESS", delegator);
        if (emailAddress != null && UtilValidate.isNotEmpty(emailAddress.getString("infoString"))) {
            vcard.addEmail(new Email(emailAddress.getString("infoString")));
        }
        // TODO : convert to directdownload of a vcf file
        String saveToDirectory = EntityUtilProperties.getPropertyValue("sfa", "save.outgoing.directory", "", delegator);
        if (UtilValidate.isEmpty(saveToDirectory)) {
            saveToDirectory = System.getProperty("ofbiz.home");
        }
        String saveToFilename = fullName + ".vcf";
        file = FileUtil.getFile(saveToDirectory + "/" + saveToFilename);
        Ezvcard.write(vcard).go(file);
    } catch (FileNotFoundException e) {
        Debug.logError(e, module);
        return ServiceUtil.returnError(UtilProperties.getMessage(resourceError, "SfaExportVCardErrorOpeningFile", UtilMisc.toMap("errorString", file.getAbsolutePath()), locale));
    } catch (IOException e) {
        Debug.logError(e, module);
        return ServiceUtil.returnError(UtilProperties.getMessage(resourceError, "SfaExportVCardErrorWritingFile", UtilMisc.toMap("errorString", file.getAbsolutePath()), locale));
    } catch (GenericEntityException e) {
        return ServiceUtil.returnError(UtilProperties.getMessage(resourceError, "SfaExportVCardError", UtilMisc.toMap("errorString", e.getMessage()), locale));
    }
    return ServiceUtil.returnSuccess();
}
Also used : Locale(java.util.Locale) GenericValue(org.apache.ofbiz.entity.GenericValue) Email(ezvcard.property.Email) Address(ezvcard.property.Address) Telephone(ezvcard.property.Telephone) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) Delegator(org.apache.ofbiz.entity.Delegator) GenericEntityException(org.apache.ofbiz.entity.GenericEntityException) File(java.io.File) StructuredName(ezvcard.property.StructuredName)

Example 5 with Address

use of ezvcard.property.Address in project ez-vcard by mangstadt.

the class AddressScribeTest method parseText.

@Test
public void parseText() {
    sensei.assertParseText("P.O. Box 1234\\;;Apt\\, 11;123 Main St;Austin;TX;12345;USA").run(withAllFields);
    Address multipleValuesUnderV2_1 = new Address(withAllFields);
    multipleValuesUnderV2_1.setExtendedAddress("Apt, 11,P.O. Box 12");
    multipleValuesUnderV2_1.setStreetAddress("123 Main St,555 Main St");
    sensei.assertParseText("P.O. Box 1234\\;;Apt\\, 11,P.O. Box 12;123 Main St,555 Main St;Austin;TX;12345;USA").versions(V2_1).run(multipleValuesUnderV2_1);
    sensei.assertParseText("P.O. Box 1234\\;;Apt\\, 11,P.O. Box 12;123 Main St,555 Main St;Austin;TX;12345;USA").versions(V3_0, V4_0).run(withMultipleValuesFields);
    sensei.assertParseText("P.O. Box 1234\\;;;;Austin;TX;12345;").run(withSomeFields);
    sensei.assertParseText(";;;;;;").run(empty);
    sensei.assertParseText("").run(empty);
}
Also used : Address(ezvcard.property.Address) Test(org.junit.Test)

Aggregations

Address (ezvcard.property.Address)28 Test (org.junit.Test)14 VCard (ezvcard.VCard)12 StructuredName (ezvcard.property.StructuredName)9 Telephone (ezvcard.property.Telephone)8 Timezone (ezvcard.property.Timezone)6 TelUri (ezvcard.util.TelUri)6 UtcOffset (ezvcard.util.UtcOffset)6 Birthday (ezvcard.property.Birthday)5 Anniversary (ezvcard.property.Anniversary)4 Geo (ezvcard.property.Geo)4 Key (ezvcard.property.Key)4 Label (ezvcard.property.Label)4 VCardVersion (ezvcard.VCardVersion)3 Email (ezvcard.property.Email)3 Photo (ezvcard.property.Photo)3 Sound (ezvcard.property.Sound)3 File (java.io.File)3 EmailAddress (com.google.api.services.people.v1.model.EmailAddress)2 Person (com.google.api.services.people.v1.model.Person)2