diff options
Diffstat (limited to 'demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java')
-rw-r--r-- | demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java b/demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java new file mode 100644 index 00000000..e491371a --- /dev/null +++ b/demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2022 The Libphonenumber Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @author Tobias Rogg + */ + +package com.google.phonenumbers.demo.render; + +import com.google.common.collect.ImmutableList; +import com.google.i18n.phonenumbers.AsYouTypeFormatter; +import com.google.i18n.phonenumbers.PhoneNumberToCarrierMapper; +import com.google.i18n.phonenumbers.PhoneNumberToTimeZonesMapper; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; +import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; +import com.google.i18n.phonenumbers.ShortNumberInfo; +import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder; +import com.google.phonenumbers.demo.helper.WebHelper; +import com.google.phonenumbers.demo.template.ResultTemplates.SingleNumber; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class ResultRenderer extends LibPhoneNumberRenderer<SingleNumber> { + private final String phoneNumber; + private final String defaultCountry; + private final Locale geocodingLocale; + private final PhoneNumber number; + private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); + private final ShortNumberInfo shortInfo = ShortNumberInfo.getInstance(); + + public ResultRenderer( + String phoneNumber, String defaultCountry, Locale geocodingLocale, PhoneNumber number) { + this.phoneNumber = phoneNumber; + this.defaultCountry = defaultCountry; + this.geocodingLocale = geocodingLocale; + this.number = number; + } + + @Override + public String genHtml() { + // Header info at Start of Page + SingleNumber.Builder soyTemplate = + SingleNumber.builder() + .setPhoneNumber(phoneNumber) + .setDefaultCountry(defaultCountry) + .setGeocodingLocale(geocodingLocale.toLanguageTag()); + + soyTemplate + .setCountryCode(number.getCountryCode()) + .setNationalNumber(number.getNationalNumber()) + .setExtension(number.getExtension()) + .setCountryCodeSource(number.getCountryCodeSource().toString()) + .setItalianLeadingZero(number.isItalianLeadingZero()) + .setNumberOfLeadingZeros(number.getNumberOfLeadingZeros()) + .setRawInput(number.getRawInput()) + .setPreferredDomesticCarrierCode(number.getPreferredDomesticCarrierCode()); + + boolean isNumberValid = phoneUtil.isValidNumber(number); + boolean hasDefaultCountry = !defaultCountry.isEmpty() && !defaultCountry.equals("ZZ"); + + // Validation Results Table + soyTemplate + .setIsPossibleNumber(phoneUtil.isPossibleNumber(number)) + .setIsValidNumber(isNumberValid) + .setIsValidNumberForRegion( + isNumberValid && hasDefaultCountry + ? phoneUtil.isValidNumberForRegion(number, defaultCountry) + : null) + .setPhoneNumberRegion(phoneUtil.getRegionCodeForNumber(number)) + .setNumberType(phoneUtil.getNumberType(number).toString()) + .setValidationResult(phoneUtil.isPossibleNumberWithReason(number).toString()); + + // Short Number Results Table + soyTemplate + .setIsPossibleShortNumber(shortInfo.isPossibleShortNumber(number)) + .setIsValidShortNumber(shortInfo.isValidShortNumber(number)) + .setIsPossibleShortNumberForRegion( + hasDefaultCountry + ? shortInfo.isPossibleShortNumberForRegion(number, defaultCountry) + : null) + .setIsValidShortNumberForRegion( + hasDefaultCountry + ? shortInfo.isValidShortNumberForRegion(number, defaultCountry) + : null); + + // Formatting Results Table + soyTemplate + .setE164Format(isNumberValid ? phoneUtil.format(number, PhoneNumberFormat.E164) : "invalid") + .setOriginalFormat(phoneUtil.formatInOriginalFormat(number, defaultCountry)) + .setNationalFormat(phoneUtil.format(number, PhoneNumberFormat.NATIONAL)) + .setInternationalFormat( + isNumberValid ? phoneUtil.format(number, PhoneNumberFormat.INTERNATIONAL) : "invalid") + .setOutOfCountryFormatFromUs( + isNumberValid ? phoneUtil.formatOutOfCountryCallingNumber(number, "US") : "invalid") + .setOutOfCountryFormatFromCh( + isNumberValid ? phoneUtil.formatOutOfCountryCallingNumber(number, "CH") : "invalid") + .setMobileDiallingFormatFromUs( + isNumberValid ? phoneUtil.formatNumberForMobileDialing(number, "US", true) : "invalid") + .setNationalDiallingFormatWithPreferredCarrierCode( + isNumberValid ? phoneUtil.formatNationalNumberWithCarrierCode(number, "") : "invalid"); + + // Get As You Type Formatter Table + List<List<String>> rows = new ArrayList<>(); + AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(defaultCountry); + int rawNumberLength = phoneNumber.length(); + for (int i = 0; i < rawNumberLength; i++) { + // Note this doesn't handle supplementary characters, but it shouldn't be a big deal as + // there are no dial-pad characters in the supplementary range. + char inputChar = phoneNumber.charAt(i); + rows.add(ImmutableList.of(String.valueOf(inputChar), formatter.inputDigit(inputChar))); + } + soyTemplate.setRows(rows); + + // Geo Info Tables + String guidelinesLink = "https://github.com/google/libphonenumber/blob/master/CONTRIBUTING.md"; + soyTemplate + .setDescriptionForNumber( + PhoneNumberOfflineGeocoder.getInstance() + .getDescriptionForNumber(number, geocodingLocale)) + .setTimeZonesForNumber( + PhoneNumberToTimeZonesMapper.getInstance().getTimeZonesForNumber(number).toString()) + .setNameForNumber( + PhoneNumberToCarrierMapper.getInstance().getNameForNumber(number, geocodingLocale)) + .setNewIssueLink(WebHelper.getNewIssueLink(phoneNumber, defaultCountry, geocodingLocale)) + .setGuidelinesLink(guidelinesLink); + + return super.render(soyTemplate.build()); + } +} |