Browse Source

replace Phonemetadata API for fields other than repeated fields, in preparation for switch to nanoproto

pull/880/head
David Yonge-Mallo 10 years ago
parent
commit
792cf3cccb
16 changed files with 579 additions and 932 deletions
  1. +21
    -18
      java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
  2. +1
    -1
      java/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java
  3. +3
    -3
      java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
  4. +72
    -72
      java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
  5. +183
    -539
      java/libphonenumber/src/com/google/i18n/phonenumbers/Phonemetadata.java
  6. +25
    -26
      java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
  7. +2
    -2
      java/libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java
  8. +2
    -2
      java/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java
  9. +9
    -9
      java/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
  10. +1
    -1
      java/libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java
  11. +59
    -58
      java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
  12. +5
    -0
      java/pom.xml
  13. +79
    -82
      tools/java/common/src/com/google/i18n/phonenumbers/BuildMetadataFromXml.java
  14. +66
    -68
      tools/java/common/test/com/google/i18n/phonenumbers/BuildMetadataFromXmlTest.java
  15. +49
    -49
      tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java
  16. +2
    -2
      tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java

+ 21
- 18
java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java View File

@ -61,8 +61,11 @@ public class AsYouTypeFormatter {
// Character used when appropriate to separate a prefix, such as a long NDD or a country calling
// code, from the national number.
private static final char SEPARATOR_BEFORE_NATIONAL_NUMBER = ' ';
private static final PhoneMetadata EMPTY_METADATA =
new PhoneMetadata().setInternationalPrefix("NA");
private static final PhoneMetadata EMPTY_METADATA;
static {
EMPTY_METADATA = new PhoneMetadata();
EMPTY_METADATA.internationalPrefix = "NA";
}
private PhoneMetadata defaultMetadata;
private PhoneMetadata currentMetadata;
@ -115,7 +118,7 @@ public class AsYouTypeFormatter {
private StringBuilder nationalNumber = new StringBuilder();
private List<NumberFormat> possibleFormats = new ArrayList<NumberFormat>();
// A cache for frequently used country-specific regular expressions.
// A cache for frequently used country-specific regular expressions.
private RegexCache regexCache = new RegexCache(64);
/**
@ -151,7 +154,7 @@ public class AsYouTypeFormatter {
Iterator<NumberFormat> it = possibleFormats.iterator();
while (it.hasNext()) {
NumberFormat numberFormat = it.next();
String pattern = numberFormat.getPattern();
String pattern = numberFormat.pattern;
if (currentFormattingPattern.equals(pattern)) {
return false;
}
@ -159,7 +162,7 @@ public class AsYouTypeFormatter {
currentFormattingPattern = pattern;
shouldAddSpaceAfterNationalPrefix =
NATIONAL_PREFIX_SEPARATORS_PATTERN.matcher(
numberFormat.getNationalPrefixFormattingRule()).find();
numberFormat.nationalPrefixFormattingRule).find();
// With a new formatting template, the matched position using the old template needs to be
// reset.
lastMatchPosition = 0;
@ -177,13 +180,13 @@ public class AsYouTypeFormatter {
(isCompleteNumber && currentMetadata.intlNumberFormatSize() > 0)
? currentMetadata.intlNumberFormats()
: currentMetadata.numberFormats();
boolean nationalPrefixIsUsedByCountry = currentMetadata.hasNationalPrefix();
boolean nationalPrefixIsUsedByCountry = !currentMetadata.nationalPrefix.isEmpty();
for (NumberFormat format : formatList) {
if (!nationalPrefixIsUsedByCountry || isCompleteNumber ||
format.isNationalPrefixOptionalWhenFormatting() ||
format.nationalPrefixOptionalWhenFormatting ||
PhoneNumberUtil.formattingRuleHasFirstGroupOnly(
format.getNationalPrefixFormattingRule())) {
if (isFormatEligible(format.getFormat())) {
format.nationalPrefixFormattingRule)) {
if (isFormatEligible(format.format)) {
possibleFormats.add(format);
}
}
@ -216,7 +219,7 @@ public class AsYouTypeFormatter {
}
private boolean createFormattingTemplate(NumberFormat format) {
String numberPattern = format.getPattern();
String numberPattern = format.pattern;
// The formatter doesn't format numbers when numberPattern contains "|", e.g.
// (20|3)\d{4}. In those cases we quickly return.
@ -230,7 +233,7 @@ public class AsYouTypeFormatter {
// Replace any standalone digit (not the one in d{}) with \d
numberPattern = STANDALONE_DIGIT_PATTERN.matcher(numberPattern).replaceAll("\\\\d");
formattingTemplate.setLength(0);
String tempTemplate = getFormattingTemplate(numberPattern, format.getFormat());
String tempTemplate = getFormattingTemplate(numberPattern, format.format);
if (tempTemplate.length() > 0) {
formattingTemplate.append(tempTemplate);
return true;
@ -428,12 +431,12 @@ public class AsYouTypeFormatter {
*/
String attemptToFormatAccruedDigits() {
for (NumberFormat numberFormat : possibleFormats) {
Matcher m = regexCache.getPatternForRegex(numberFormat.getPattern()).matcher(nationalNumber);
Matcher m = regexCache.getPatternForRegex(numberFormat.pattern).matcher(nationalNumber);
if (m.matches()) {
shouldAddSpaceAfterNationalPrefix =
NATIONAL_PREFIX_SEPARATORS_PATTERN.matcher(
numberFormat.getNationalPrefixFormattingRule()).find();
String formattedNumber = m.replaceAll(numberFormat.getFormat());
numberFormat.nationalPrefixFormattingRule).find();
String formattedNumber = m.replaceAll(numberFormat.format);
return appendNationalNumber(formattedNumber);
}
}
@ -526,7 +529,7 @@ public class AsYouTypeFormatter {
// that national significant numbers in NANPA always start with [2-9] after the national prefix.
// Numbers beginning with 1[01] can only be short/emergency numbers, which don't need the
// national prefix.
return (currentMetadata.getCountryCode() == 1) && (nationalNumber.charAt(0) == '1') &&
return (currentMetadata.countryCode == 1) && (nationalNumber.charAt(0) == '1') &&
(nationalNumber.charAt(1) != '0') && (nationalNumber.charAt(1) != '1');
}
@ -537,9 +540,9 @@ public class AsYouTypeFormatter {
startOfNationalNumber = 1;
prefixBeforeNationalNumber.append('1').append(SEPARATOR_BEFORE_NATIONAL_NUMBER);
isCompleteNumber = true;
} else if (currentMetadata.hasNationalPrefixForParsing()) {
} else if (currentMetadata.nationalPrefixForParsing.length() != 0) {
Pattern nationalPrefixForParsing =
regexCache.getPatternForRegex(currentMetadata.getNationalPrefixForParsing());
regexCache.getPatternForRegex(currentMetadata.nationalPrefixForParsing);
Matcher m = nationalPrefixForParsing.matcher(nationalNumber);
// Since some national prefix patterns are entirely optional, check that a national prefix
// could actually be extracted.
@ -567,7 +570,7 @@ public class AsYouTypeFormatter {
private boolean attemptToExtractIdd() {
Pattern internationalPrefix =
regexCache.getPatternForRegex("\\" + PhoneNumberUtil.PLUS_SIGN + "|" +
currentMetadata.getInternationalPrefix());
currentMetadata.internationalPrefix);
Matcher iddMatcher = internationalPrefix.matcher(accruedInputWithoutFormatting);
if (iddMatcher.lookingAt()) {
isCompleteNumber = true;


+ 1
- 1
java/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java View File

@ -80,7 +80,7 @@ class MetadataManager {
PhoneMetadataCollection alternateFormats = new PhoneMetadataCollection();
alternateFormats.readExternal(in);
for (PhoneMetadata metadata : alternateFormats.getMetadataList()) {
callingCodeToAlternateFormatsMap.put(metadata.getCountryCode(), metadata);
callingCodeToAlternateFormatsMap.put(metadata.countryCode, metadata);
}
} catch (IOException e) {
LOGGER.log(Level.WARNING, e.toString());


+ 3
- 3
java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java View File

@ -668,14 +668,14 @@ final class PhoneNumberMatcher implements Iterator<PhoneNumberMatch> {
util.chooseFormattingPatternForNumber(metadata.numberFormats(), nationalNumber);
// To do this, we check that a national prefix formatting rule was present and that it wasn't
// just the first-group symbol ($1) with punctuation.
if ((formatRule != null) && formatRule.getNationalPrefixFormattingRule().length() > 0) {
if (formatRule.isNationalPrefixOptionalWhenFormatting()) {
if ((formatRule != null) && formatRule.nationalPrefixFormattingRule.length() > 0) {
if (formatRule.nationalPrefixOptionalWhenFormatting) {
// The national-prefix is optional in these cases, so we don't need to check if it was
// present.
return true;
}
if (PhoneNumberUtil.formattingRuleHasFirstGroupOnly(
formatRule.getNationalPrefixFormattingRule())) {
formatRule.nationalPrefixFormattingRule)) {
// National Prefix not needed for this number.
return true;
}


+ 72
- 72
java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java View File

@ -769,7 +769,7 @@ public class PhoneNumberUtil {
}
// If a country doesn't use a national prefix, and this number doesn't have an Italian leading
// zero, we assume it is a closed dialling plan with no area codes.
if (!metadata.hasNationalPrefix() && !number.isItalianLeadingZero()) {
if (metadata.nationalPrefix.equals("") && !number.isItalianLeadingZero()) {
return 0;
}
@ -1123,19 +1123,19 @@ public class PhoneNumberUtil {
// need to copy the rule so that subsequent replacements for different numbers have the
// appropriate national prefix.
numFormatCopy.mergeFrom(formattingPattern);
String nationalPrefixFormattingRule = formattingPattern.getNationalPrefixFormattingRule();
String nationalPrefixFormattingRule = formattingPattern.nationalPrefixFormattingRule;
if (nationalPrefixFormattingRule.length() > 0) {
String nationalPrefix = metadata.getNationalPrefix();
String nationalPrefix = metadata.nationalPrefix;
if (nationalPrefix.length() > 0) {
// Replace $NP with national prefix and $FG with the first group ($1).
nationalPrefixFormattingRule =
NP_PATTERN.matcher(nationalPrefixFormattingRule).replaceFirst(nationalPrefix);
nationalPrefixFormattingRule =
FG_PATTERN.matcher(nationalPrefixFormattingRule).replaceFirst("\\$1");
numFormatCopy.setNationalPrefixFormattingRule(nationalPrefixFormattingRule);
numFormatCopy.nationalPrefixFormattingRule = nationalPrefixFormattingRule;
} else {
// We don't want to have a rule for how to format the national prefix if there isn't one.
numFormatCopy.clearNationalPrefixFormattingRule();
numFormatCopy.nationalPrefixFormattingRule = "";
}
}
formattedNumber.append(
@ -1351,16 +1351,16 @@ public class PhoneNumberUtil {
}
// Metadata cannot be null because we checked 'isValidRegionCode()' above.
PhoneMetadata metadataForRegionCallingFrom = getMetadataForRegion(regionCallingFrom);
String internationalPrefix = metadataForRegionCallingFrom.getInternationalPrefix();
String internationalPrefix = metadataForRegionCallingFrom.internationalPrefix;
// For regions that have multiple international prefixes, the international format of the
// number is returned, unless there is a preferred international prefix.
String internationalPrefixForFormatting = "";
if (UNIQUE_INTERNATIONAL_PREFIX.matcher(internationalPrefix).matches()) {
internationalPrefixForFormatting = internationalPrefix;
} else if (metadataForRegionCallingFrom.hasPreferredInternationalPrefix()) {
} else if (!metadataForRegionCallingFrom.preferredInternationalPrefix.equals("")) {
internationalPrefixForFormatting =
metadataForRegionCallingFrom.getPreferredInternationalPrefix();
metadataForRegionCallingFrom.preferredInternationalPrefix;
}
String regionCode = getRegionCodeForCountryCode(countryCallingCode);
@ -1458,7 +1458,7 @@ public class PhoneNumberUtil {
// return the national format.
// TODO: Refactor the code below with the code in
// isNationalPrefixPresentIfRequired.
String candidateNationalPrefixRule = formatRule.getNationalPrefixFormattingRule();
String candidateNationalPrefixRule = formatRule.nationalPrefixFormattingRule;
// We assume that the first-group symbol will never be _before_ the national prefix.
int indexOfFirstGroup = candidateNationalPrefixRule.indexOf("$1");
if (indexOfFirstGroup <= 0) {
@ -1476,7 +1476,7 @@ public class PhoneNumberUtil {
// Otherwise, we need to remove the national prefix from our output.
NumberFormat numFormatCopy = new NumberFormat();
numFormatCopy.mergeFrom(formatRule);
numFormatCopy.clearNationalPrefixFormattingRule();
numFormatCopy.nationalPrefixFormattingRule = "";
List<NumberFormat> numberFormats = new ArrayList<NumberFormat>(1);
numberFormats.add(numFormatCopy);
formattedNumber = formatByPattern(number, PhoneNumberFormat.NATIONAL, numberFormats);
@ -1606,9 +1606,9 @@ public class PhoneNumberUtil {
NumberFormat newFormat = new NumberFormat();
newFormat.mergeFrom(formattingPattern);
// The first group is the first group of digits that the user wrote together.
newFormat.setPattern("(\\d+)(.*)");
newFormat.pattern = "(\\d+)(.*)";
// Here we just concatenate them back together after the national prefix has been fixed.
newFormat.setFormat("$1$2");
newFormat.format = "$1$2";
// Now we format using this pattern instead of the default pattern, but with the national
// prefix prefixed if necessary.
// This will not work in the cases where the pattern (and not the leading digits) decide
@ -1621,11 +1621,11 @@ public class PhoneNumberUtil {
// prefixes, the international format of the number is returned, unless there is a preferred
// international prefix.
if (metadataForRegionCallingFrom != null) {
String internationalPrefix = metadataForRegionCallingFrom.getInternationalPrefix();
String internationalPrefix = metadataForRegionCallingFrom.internationalPrefix;
internationalPrefixForFormatting =
UNIQUE_INTERNATIONAL_PREFIX.matcher(internationalPrefix).matches()
? internationalPrefix
: metadataForRegionCallingFrom.getPreferredInternationalPrefix();
: metadataForRegionCallingFrom.preferredInternationalPrefix;
}
StringBuilder formattedNumber = new StringBuilder(rawInput);
String regionCode = getRegionCodeForCountryCode(countryCode);
@ -1727,7 +1727,7 @@ public class PhoneNumberUtil {
if (size == 0 || regexCache.getPatternForRegex(
// We always use the last leading_digits_pattern, as it is the most detailed.
numFormat.getLeadingDigitsPattern(size - 1)).matcher(nationalNumber).lookingAt()) {
Matcher m = regexCache.getPatternForRegex(numFormat.getPattern()).matcher(nationalNumber);
Matcher m = regexCache.getPatternForRegex(numFormat.pattern).matcher(nationalNumber);
if (m.matches()) {
return numFormat;
}
@ -1749,15 +1749,15 @@ public class PhoneNumberUtil {
NumberFormat formattingPattern,
PhoneNumberFormat numberFormat,
String carrierCode) {
String numberFormatRule = formattingPattern.getFormat();
String numberFormatRule = formattingPattern.format;
Matcher m =
regexCache.getPatternForRegex(formattingPattern.getPattern()).matcher(nationalNumber);
regexCache.getPatternForRegex(formattingPattern.pattern).matcher(nationalNumber);
String formattedNationalNumber = "";
if (numberFormat == PhoneNumberFormat.NATIONAL &&
carrierCode != null && carrierCode.length() > 0 &&
formattingPattern.getDomesticCarrierCodeFormattingRule().length() > 0) {
formattingPattern.domesticCarrierCodeFormattingRule.length() > 0) {
// Replace the $CC in the formatting rule with the desired carrier code.
String carrierCodeFormattingRule = formattingPattern.getDomesticCarrierCodeFormattingRule();
String carrierCodeFormattingRule = formattingPattern.domesticCarrierCodeFormattingRule;
carrierCodeFormattingRule =
CC_PATTERN.matcher(carrierCodeFormattingRule).replaceFirst(carrierCode);
// Now replace the $FG in the formatting rule with the first group and the carrier code
@ -1767,7 +1767,7 @@ public class PhoneNumberUtil {
formattedNationalNumber = m.replaceAll(numberFormatRule);
} else {
// Use the national prefix formatting rule instead.
String nationalPrefixFormattingRule = formattingPattern.getNationalPrefixFormattingRule();
String nationalPrefixFormattingRule = formattingPattern.nationalPrefixFormattingRule;
if (numberFormat == PhoneNumberFormat.NATIONAL &&
nationalPrefixFormattingRule != null &&
nationalPrefixFormattingRule.length() > 0) {
@ -1820,8 +1820,8 @@ public class PhoneNumberUtil {
}
PhoneNumberDesc desc = getNumberDescByType(getMetadataForRegion(regionCode), type);
try {
if (desc.hasExampleNumber()) {
return parse(desc.getExampleNumber(), regionCode);
if (!desc.exampleNumber.equals("")) {
return parse(desc.exampleNumber, regionCode);
}
} catch (NumberParseException e) {
logger.log(Level.SEVERE, e.toString());
@ -1840,10 +1840,10 @@ public class PhoneNumberUtil {
public PhoneNumber getExampleNumberForNonGeoEntity(int countryCallingCode) {
PhoneMetadata metadata = getMetadataForNonGeographicalRegion(countryCallingCode);
if (metadata != null) {
PhoneNumberDesc desc = metadata.getGeneralDesc();
PhoneNumberDesc desc = metadata.generalDesc;
try {
if (desc.hasExampleNumber()) {
return parse("+" + countryCallingCode + desc.getExampleNumber(), "ZZ");
if (!desc.exampleNumber.equals("")) {
return parse("+" + countryCallingCode + desc.exampleNumber, "ZZ");
}
} catch (NumberParseException e) {
logger.log(Level.SEVERE, e.toString());
@ -1866,8 +1866,8 @@ public class PhoneNumberUtil {
if (numberFormat == PhoneNumberFormat.RFC3966) {
formattedNumber.append(RFC3966_EXTN_PREFIX).append(number.getExtension());
} else {
if (metadata.hasPreferredExtnPrefix()) {
formattedNumber.append(metadata.getPreferredExtnPrefix()).append(number.getExtension());
if (metadata.preferredExtnPrefix.length() != 0) {
formattedNumber.append(metadata.preferredExtnPrefix).append(number.getExtension());
} else {
formattedNumber.append(DEFAULT_EXTN_PREFIX).append(number.getExtension());
}
@ -1878,28 +1878,28 @@ public class PhoneNumberUtil {
PhoneNumberDesc getNumberDescByType(PhoneMetadata metadata, PhoneNumberType type) {
switch (type) {
case PREMIUM_RATE:
return metadata.getPremiumRate();
return metadata.premiumRate;
case TOLL_FREE:
return metadata.getTollFree();
return metadata.tollFree;
case MOBILE:
return metadata.getMobile();
return metadata.mobile;
case FIXED_LINE:
case FIXED_LINE_OR_MOBILE:
return metadata.getFixedLine();
return metadata.fixedLine;
case SHARED_COST:
return metadata.getSharedCost();
return metadata.sharedCost;
case VOIP:
return metadata.getVoip();
return metadata.voip;
case PERSONAL_NUMBER:
return metadata.getPersonalNumber();
return metadata.personalNumber;
case PAGER:
return metadata.getPager();
return metadata.pager;
case UAN:
return metadata.getUan();
return metadata.uan;
case VOICEMAIL:
return metadata.getVoicemail();
return metadata.voicemail;
default:
return metadata.getGeneralDesc();
return metadata.generalDesc;
}
}
@ -1920,48 +1920,48 @@ public class PhoneNumberUtil {
}
private PhoneNumberType getNumberTypeHelper(String nationalNumber, PhoneMetadata metadata) {
if (!isNumberMatchingDesc(nationalNumber, metadata.getGeneralDesc())) {
if (!isNumberMatchingDesc(nationalNumber, metadata.generalDesc)) {
return PhoneNumberType.UNKNOWN;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getPremiumRate())) {
if (isNumberMatchingDesc(nationalNumber, metadata.premiumRate)) {
return PhoneNumberType.PREMIUM_RATE;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getTollFree())) {
if (isNumberMatchingDesc(nationalNumber, metadata.tollFree)) {
return PhoneNumberType.TOLL_FREE;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getSharedCost())) {
if (isNumberMatchingDesc(nationalNumber, metadata.sharedCost)) {
return PhoneNumberType.SHARED_COST;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getVoip())) {
if (isNumberMatchingDesc(nationalNumber, metadata.voip)) {
return PhoneNumberType.VOIP;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getPersonalNumber())) {
if (isNumberMatchingDesc(nationalNumber, metadata.personalNumber)) {
return PhoneNumberType.PERSONAL_NUMBER;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getPager())) {
if (isNumberMatchingDesc(nationalNumber, metadata.pager)) {
return PhoneNumberType.PAGER;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getUan())) {
if (isNumberMatchingDesc(nationalNumber, metadata.uan)) {
return PhoneNumberType.UAN;
}
if (isNumberMatchingDesc(nationalNumber, metadata.getVoicemail())) {
if (isNumberMatchingDesc(nationalNumber, metadata.voicemail)) {
return PhoneNumberType.VOICEMAIL;
}
boolean isFixedLine = isNumberMatchingDesc(nationalNumber, metadata.getFixedLine());
boolean isFixedLine = isNumberMatchingDesc(nationalNumber, metadata.fixedLine);
if (isFixedLine) {
if (metadata.isSameMobileAndFixedLinePattern()) {
if (metadata.sameMobileAndFixedLinePattern) {
return PhoneNumberType.FIXED_LINE_OR_MOBILE;
} else if (isNumberMatchingDesc(nationalNumber, metadata.getMobile())) {
} else if (isNumberMatchingDesc(nationalNumber, metadata.mobile)) {
return PhoneNumberType.FIXED_LINE_OR_MOBILE;
}
return PhoneNumberType.FIXED_LINE;
}
// Otherwise, test to see if the number is mobile. Only do this if certain that the patterns for
// mobile and fixed line aren't the same.
if (!metadata.isSameMobileAndFixedLinePattern() &&
isNumberMatchingDesc(nationalNumber, metadata.getMobile())) {
if (!metadata.sameMobileAndFixedLinePattern &&
isNumberMatchingDesc(nationalNumber, metadata.mobile)) {
return PhoneNumberType.MOBILE;
}
return PhoneNumberType.UNKNOWN;
@ -1987,14 +1987,14 @@ public class PhoneNumberUtil {
boolean isNumberPossibleForDesc(String nationalNumber, PhoneNumberDesc numberDesc) {
Matcher possibleNumberPatternMatcher =
regexCache.getPatternForRegex(numberDesc.getPossibleNumberPattern())
regexCache.getPatternForRegex(numberDesc.possibleNumberPattern)
.matcher(nationalNumber);
return possibleNumberPatternMatcher.matches();
}
boolean isNumberMatchingDesc(String nationalNumber, PhoneNumberDesc numberDesc) {
Matcher nationalNumberPatternMatcher =
regexCache.getPatternForRegex(numberDesc.getNationalNumberPattern())
regexCache.getPatternForRegex(numberDesc.nationalNumberPattern)
.matcher(nationalNumber);
return isNumberPossibleForDesc(nationalNumber, numberDesc) &&
nationalNumberPatternMatcher.matches();
@ -2073,8 +2073,8 @@ public class PhoneNumberUtil {
// If leadingDigits is present, use this. Otherwise, do full validation.
// Metadata cannot be null because the region codes come from the country calling code map.
PhoneMetadata metadata = getMetadataForRegion(regionCode);
if (metadata.hasLeadingDigits()) {
if (regexCache.getPatternForRegex(metadata.getLeadingDigits())
if (metadata.leadingDigits.length() != 0) {
if (regexCache.getPatternForRegex(metadata.leadingDigits)
.matcher(nationalNumber).lookingAt()) {
return regionCode;
}
@ -2140,7 +2140,7 @@ public class PhoneNumberUtil {
if (metadata == null) {
throw new IllegalArgumentException("Invalid region code: " + regionCode);
}
return metadata.getCountryCode();
return metadata.countryCode;
}
/**
@ -2166,7 +2166,7 @@ public class PhoneNumberUtil {
+ ") provided.");
return null;
}
String nationalPrefix = metadata.getNationalPrefix();
String nationalPrefix = metadata.nationalPrefix;
// If no national prefix was found, we return null.
if (nationalPrefix.length() == 0) {
return null;
@ -2200,7 +2200,7 @@ public class PhoneNumberUtil {
if (mainMetadataForCallingCode == null) {
return false;
}
return mainMetadataForCallingCode.isLeadingZeroPossible();
return mainMetadataForCallingCode.leadingZeroPossible;
}
/**
@ -2257,7 +2257,7 @@ public class PhoneNumberUtil {
*/
private boolean isShorterThanPossibleNormalNumber(PhoneMetadata regionMetadata, String number) {
Pattern possibleNumberPattern = regexCache.getPatternForRegex(
regionMetadata.getGeneralDesc().getPossibleNumberPattern());
regionMetadata.generalDesc.possibleNumberPattern);
return testNumberLengthAgainstPattern(possibleNumberPattern, number) ==
ValidationResult.TOO_SHORT;
}
@ -2297,7 +2297,7 @@ public class PhoneNumberUtil {
// Metadata cannot be null because the country calling code is valid.
PhoneMetadata metadata = getMetadataForRegionOrCallingCode(countryCode, regionCode);
Pattern possibleNumberPattern =
regexCache.getPatternForRegex(metadata.getGeneralDesc().getPossibleNumberPattern());
regexCache.getPatternForRegex(metadata.generalDesc.possibleNumberPattern);
return testNumberLengthAgainstPattern(possibleNumberPattern, nationalNumber);
}
@ -2429,7 +2429,7 @@ public class PhoneNumberUtil {
// Set the default prefix to be something that will never match.
String possibleCountryIddPrefix = "NonMatch";
if (defaultRegionMetadata != null) {
possibleCountryIddPrefix = defaultRegionMetadata.getInternationalPrefix();
possibleCountryIddPrefix = defaultRegionMetadata.internationalPrefix;
}
CountryCodeSource countryCodeSource =
@ -2457,19 +2457,19 @@ public class PhoneNumberUtil {
// Check to see if the number starts with the country calling code for the default region. If
// so, we remove the country calling code, and do some checks on the validity of the number
// before and after.
int defaultCountryCode = defaultRegionMetadata.getCountryCode();
int defaultCountryCode = defaultRegionMetadata.countryCode;
String defaultCountryCodeString = String.valueOf(defaultCountryCode);
String normalizedNumber = fullNumber.toString();
if (normalizedNumber.startsWith(defaultCountryCodeString)) {
StringBuilder potentialNationalNumber =
new StringBuilder(normalizedNumber.substring(defaultCountryCodeString.length()));
PhoneNumberDesc generalDesc = defaultRegionMetadata.getGeneralDesc();
PhoneNumberDesc generalDesc = defaultRegionMetadata.generalDesc;
Pattern validNumberPattern =
regexCache.getPatternForRegex(generalDesc.getNationalNumberPattern());
regexCache.getPatternForRegex(generalDesc.nationalNumberPattern);
maybeStripNationalPrefixAndCarrierCode(
potentialNationalNumber, defaultRegionMetadata, null /* Don't need the carrier code */);
Pattern possibleNumberPattern =
regexCache.getPatternForRegex(generalDesc.getPossibleNumberPattern());
regexCache.getPatternForRegex(generalDesc.possibleNumberPattern);
// If the number was not valid before but is valid now, or if it was too long before, we
// consider the number with the country calling code stripped to be a better result and
// keep that instead.
@ -2562,7 +2562,7 @@ public class PhoneNumberUtil {
boolean maybeStripNationalPrefixAndCarrierCode(
StringBuilder number, PhoneMetadata metadata, StringBuilder carrierCode) {
int numberLength = number.length();
String possibleNationalPrefix = metadata.getNationalPrefixForParsing();
String possibleNationalPrefix = metadata.nationalPrefixForParsing;
if (numberLength == 0 || possibleNationalPrefix.length() == 0) {
// Early return for numbers of zero length.
return false;
@ -2571,14 +2571,14 @@ public class PhoneNumberUtil {
Matcher prefixMatcher = regexCache.getPatternForRegex(possibleNationalPrefix).matcher(number);
if (prefixMatcher.lookingAt()) {
Pattern nationalNumberRule =
regexCache.getPatternForRegex(metadata.getGeneralDesc().getNationalNumberPattern());
regexCache.getPatternForRegex(metadata.generalDesc.nationalNumberPattern);
// Check if the original number is viable.
boolean isViableOriginalNumber = nationalNumberRule.matcher(number).matches();
// prefixMatcher.group(numOfGroups) == null implies nothing was captured by the capturing
// groups in possibleNationalPrefix; therefore, no transformation is necessary, and we just
// remove the national prefix.
int numOfGroups = prefixMatcher.groupCount();
String transformRule = metadata.getNationalPrefixTransformRule();
String transformRule = metadata.nationalPrefixTransformRule;
if (transformRule == null || transformRule.length() == 0 ||
prefixMatcher.group(numOfGroups) == null) {
// If the original number was viable, and the resultant number is not, we return.
@ -2864,7 +2864,7 @@ public class PhoneNumberUtil {
normalize(nationalNumber);
normalizedNationalNumber.append(nationalNumber);
if (defaultRegion != null) {
countryCode = regionMetadata.getCountryCode();
countryCode = regionMetadata.countryCode;
phoneNumber.setCountryCode(countryCode);
} else if (keepRawInput) {
phoneNumber.clearCountryCodeSource();
@ -3138,7 +3138,7 @@ public class PhoneNumberUtil {
return true;
}
String nationalSignificantNumber = getNationalSignificantNumber(number);
return !isNumberMatchingDesc(nationalSignificantNumber, metadata.getNoInternationalDialling());
return !isNumberMatchingDesc(nationalSignificantNumber, metadata.noInternationalDialling);
}
/**
@ -3154,6 +3154,6 @@ public class PhoneNumberUtil {
logger.log(Level.WARNING, "Invalid or unknown region code provided: " + regionCode);
return false;
}
return metadata.isMobileNumberPortableRegion();
return metadata.mobileNumberPortableRegion;
}
}

+ 183
- 539
java/libphonenumber/src/com/google/i18n/phonenumbers/Phonemetadata.java
File diff suppressed because it is too large
View File


+ 25
- 26
java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java View File

@ -31,7 +31,6 @@ import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
/**
* Methods for getting information about short phone numbers, such as short codes and emergency
@ -131,7 +130,7 @@ public class ShortNumberInfo {
if (phoneMetadata == null) {
return false;
}
return matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.getGeneralDesc());
return matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.generalDesc);
}
/**
@ -152,7 +151,7 @@ public class ShortNumberInfo {
return false;
}
return matcherApi.matchesPossibleNumber(getNationalSignificantNumber(number),
phoneMetadata.getGeneralDesc());
phoneMetadata.generalDesc);
}
/**
@ -172,7 +171,7 @@ public class ShortNumberInfo {
if (phoneMetadata == null) {
continue;
}
if (matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.getGeneralDesc())) {
if (matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.generalDesc)) {
return true;
}
}
@ -200,11 +199,11 @@ public class ShortNumberInfo {
if (phoneMetadata == null) {
return false;
}
PhoneNumberDesc generalDesc = phoneMetadata.getGeneralDesc();
PhoneNumberDesc generalDesc = phoneMetadata.generalDesc;
if (!matchesPossibleNumberAndNationalNumber(shortNumber, generalDesc)) {
return false;
}
PhoneNumberDesc shortNumberDesc = phoneMetadata.getShortCode();
PhoneNumberDesc shortNumberDesc = phoneMetadata.shortCode;
return matchesPossibleNumberAndNationalNumber(shortNumber, shortNumberDesc);
}
@ -227,11 +226,11 @@ public class ShortNumberInfo {
return false;
}
String shortNumber = getNationalSignificantNumber(number);
PhoneNumberDesc generalDesc = phoneMetadata.getGeneralDesc();
PhoneNumberDesc generalDesc = phoneMetadata.generalDesc;
if (!matchesPossibleNumberAndNationalNumber(shortNumber, generalDesc)) {
return false;
}
PhoneNumberDesc shortNumberDesc = phoneMetadata.getShortCode();
PhoneNumberDesc shortNumberDesc = phoneMetadata.shortCode;
return matchesPossibleNumberAndNationalNumber(shortNumber, shortNumberDesc);
}
@ -293,13 +292,13 @@ public class ShortNumberInfo {
// The cost categories are tested in order of decreasing expense, since if for some reason the
// patterns overlap the most expensive matching cost category should be returned.
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getPremiumRate())) {
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.premiumRate)) {
return ShortNumberCost.PREMIUM_RATE;
}
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getStandardRate())) {
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.standardRate)) {
return ShortNumberCost.STANDARD_RATE;
}
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getTollFree())) {
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.tollFree)) {
return ShortNumberCost.TOLL_FREE;
}
if (isEmergencyNumber(shortNumber, regionDialingFrom)) {
@ -347,13 +346,13 @@ public class ShortNumberInfo {
// The cost categories are tested in order of decreasing expense, since if for some reason the
// patterns overlap the most expensive matching cost category should be returned.
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getPremiumRate())) {
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.premiumRate)) {
return ShortNumberCost.PREMIUM_RATE;
}
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getStandardRate())) {
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.standardRate)) {
return ShortNumberCost.STANDARD_RATE;
}
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getTollFree())) {
if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.tollFree)) {
return ShortNumberCost.TOLL_FREE;
}
if (isEmergencyNumber(shortNumber, regionDialingFrom)) {
@ -430,7 +429,7 @@ public class ShortNumberInfo {
for (String regionCode : regionCodes) {
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata != null
&& matchesPossibleNumberAndNationalNumber(nationalNumber, phoneMetadata.getShortCode())) {
&& matchesPossibleNumberAndNationalNumber(nationalNumber, phoneMetadata.shortCode)) {
// The number is valid for this region.
return regionCode;
}
@ -458,9 +457,9 @@ public class ShortNumberInfo {
if (phoneMetadata == null) {
return "";
}
PhoneNumberDesc desc = phoneMetadata.getShortCode();
if (desc.hasExampleNumber()) {
return desc.getExampleNumber();
PhoneNumberDesc desc = phoneMetadata.shortCode;
if (!desc.exampleNumber.equals("")) {
return desc.exampleNumber;
}
return "";
}
@ -482,20 +481,20 @@ public class ShortNumberInfo {
PhoneNumberDesc desc = null;
switch (cost) {
case TOLL_FREE:
desc = phoneMetadata.getTollFree();
desc = phoneMetadata.tollFree;
break;
case STANDARD_RATE:
desc = phoneMetadata.getStandardRate();
desc = phoneMetadata.standardRate;
break;
case PREMIUM_RATE:
desc = phoneMetadata.getPremiumRate();
desc = phoneMetadata.premiumRate;
break;
default:
// UNKNOWN_COST numbers are computed by the process of elimination from the other cost
// categories.
}
if (desc != null && desc.hasExampleNumber()) {
return desc.getExampleNumber();
if (desc != null && !desc.exampleNumber.equals("")) {
return desc.exampleNumber;
}
return "";
}
@ -544,12 +543,12 @@ public class ShortNumberInfo {
return false;
}
PhoneMetadata metadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
if (metadata == null || !metadata.hasEmergency()) {
if (metadata == null || metadata.emergency == null) {
return false;
}
String normalizedNumber = PhoneNumberUtil.normalizeDigitsOnly(number);
PhoneNumberDesc emergencyDesc = metadata.getEmergency();
PhoneNumberDesc emergencyDesc = metadata.emergency;
boolean allowPrefixMatchForRegion =
allowPrefixMatch && !REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.contains(regionCode);
return matcherApi.matchesNationalNumber(normalizedNumber, emergencyDesc,
@ -573,7 +572,7 @@ public class ShortNumberInfo {
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
return (phoneMetadata != null)
&& (matchesPossibleNumberAndNationalNumber(nationalNumber,
phoneMetadata.getCarrierSpecific()));
phoneMetadata.carrierSpecific));
}
/**


+ 2
- 2
java/libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java View File

@ -110,8 +110,8 @@ final class SingleFileMetadataSourceImpl implements MetadataSource {
throw new IllegalStateException("empty metadata: " + fileName);
}
for (PhoneMetadata metadata : metadataList) {
String regionCode = metadata.getId();
int countryCallingCode = metadata.getCountryCode();
String regionCode = metadata.id;
int countryCallingCode = metadata.countryCode;
boolean isNonGeoRegion = PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCode);
if (isNonGeoRegion) {
countryCodeToNonGeographicalMetadataMap.put(countryCallingCode, metadata);


+ 2
- 2
java/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java View File

@ -38,7 +38,7 @@ public final class RegexBasedMatcher implements MatcherApi {
public boolean matchesNationalNumber(String nationalNumber, PhoneNumberDesc numberDesc,
boolean allowPrefixMatch) {
Matcher nationalNumberPatternMatcher = regexCache.getPatternForRegex(
numberDesc.getNationalNumberPattern()).matcher(nationalNumber);
numberDesc.nationalNumberPattern).matcher(nationalNumber);
return nationalNumberPatternMatcher.matches()
|| (allowPrefixMatch && nationalNumberPatternMatcher.lookingAt());
}
@ -46,7 +46,7 @@ public final class RegexBasedMatcher implements MatcherApi {
// @Override
public boolean matchesPossibleNumber(String nationalNumber, PhoneNumberDesc numberDesc) {
Matcher possibleNumberPatternMatcher = regexCache.getPatternForRegex(
numberDesc.getPossibleNumberPattern()).matcher(nationalNumber);
numberDesc.possibleNumberPattern).matcher(nationalNumber);
return possibleNumberPatternMatcher.matches();
}
}

+ 9
- 9
java/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java View File

@ -142,10 +142,10 @@ public class ExampleNumbersTest extends TestCase {
for (String regionCode : phoneNumberUtil.getSupportedRegions()) {
PhoneNumber exampleNumber = null;
PhoneNumberDesc desc =
phoneNumberUtil.getMetadataForRegion(regionCode).getNoInternationalDialling();
phoneNumberUtil.getMetadataForRegion(regionCode).noInternationalDialling;
try {
if (desc.hasExampleNumber()) {
exampleNumber = phoneNumberUtil.parse(desc.getExampleNumber(), regionCode);
if (desc.exampleNumber.length() != 0) {
exampleNumber = phoneNumberUtil.parse(desc.exampleNumber, regionCode);
}
} catch (NumberParseException e) {
LOGGER.log(Level.SEVERE, e.toString());
@ -216,9 +216,9 @@ public class ExampleNumbersTest extends TestCase {
int wrongTypeCounter = 0;
for (String regionCode : shortNumberInfo.getSupportedRegions()) {
PhoneNumberDesc desc =
MetadataManager.getShortNumberMetadataForRegion(regionCode).getEmergency();
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
MetadataManager.getShortNumberMetadataForRegion(regionCode).emergency;
if (desc.exampleNumber.length() != 0) {
String exampleNumber = desc.exampleNumber;
PhoneNumber phoneNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
if (!shortNumberInfo.isPossibleShortNumberForRegion(phoneNumber, regionCode)
|| !shortNumberInfo.isEmergencyNumber(exampleNumber, regionCode)) {
@ -239,9 +239,9 @@ public class ExampleNumbersTest extends TestCase {
for (String regionCode : shortNumberInfo.getSupportedRegions()) {
// Test the carrier-specific tag.
PhoneNumberDesc desc =
MetadataManager.getShortNumberMetadataForRegion(regionCode).getCarrierSpecific();
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
MetadataManager.getShortNumberMetadataForRegion(regionCode).carrierSpecific;
if (desc.exampleNumber.length() != 0) {
String exampleNumber = desc.exampleNumber;
PhoneNumber carrierSpecificNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
if (!shortNumberInfo.isPossibleShortNumberForRegion(carrierSpecificNumber, regionCode)
|| !shortNumberInfo.isCarrierSpecific(carrierSpecificNumber)) {


+ 1
- 1
java/libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java View File

@ -36,7 +36,7 @@ public class MetadataManagerTest extends TestCase {
// We should have some data for France.
PhoneMetadata franceShortNumberMetadata = MetadataManager.getShortNumberMetadataForRegion("FR");
assertNotNull(franceShortNumberMetadata);
assertTrue(franceShortNumberMetadata.hasShortCode());
assertTrue(franceShortNumberMetadata.shortCode != null);
}
public void testAlternateFormatsFailsGracefully() throws Exception {


+ 59
- 58
java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java View File

@ -134,69 +134,69 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
public void testGetInstanceLoadUSMetadata() {
PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.US);
assertEquals("US", metadata.getId());
assertEquals(1, metadata.getCountryCode());
assertEquals("011", metadata.getInternationalPrefix());
assertTrue(metadata.hasNationalPrefix());
assertEquals("US", metadata.id);
assertEquals(1, metadata.countryCode);
assertEquals("011", metadata.internationalPrefix);
assertTrue(metadata.nationalPrefix.length() != 0);
assertEquals(2, metadata.numberFormatSize());
assertEquals("(\\d{3})(\\d{3})(\\d{4})",
metadata.getNumberFormat(1).getPattern());
assertEquals("$1 $2 $3", metadata.getNumberFormat(1).getFormat());
metadata.getNumberFormat(1).pattern);
assertEquals("$1 $2 $3", metadata.getNumberFormat(1).format);
assertEquals("[13-689]\\d{9}|2[0-35-9]\\d{8}",
metadata.getGeneralDesc().getNationalNumberPattern());
assertEquals("\\d{7}(?:\\d{3})?", metadata.getGeneralDesc().getPossibleNumberPattern());
assertTrue(metadata.getGeneralDesc().exactlySameAs(metadata.getFixedLine()));
assertEquals("\\d{10}", metadata.getTollFree().getPossibleNumberPattern());
assertEquals("900\\d{7}", metadata.getPremiumRate().getNationalNumberPattern());
metadata.generalDesc.nationalNumberPattern);
assertEquals("\\d{7}(?:\\d{3})?", metadata.generalDesc.possibleNumberPattern);
assertTrue(metadata.generalDesc.exactlySameAs(metadata.fixedLine));
assertEquals("\\d{10}", metadata.tollFree.possibleNumberPattern);
assertEquals("900\\d{7}", metadata.premiumRate.nationalNumberPattern);
// No shared-cost data is available, so it should be initialised to "NA".
assertEquals("NA", metadata.getSharedCost().getNationalNumberPattern());
assertEquals("NA", metadata.getSharedCost().getPossibleNumberPattern());
assertEquals("NA", metadata.sharedCost.nationalNumberPattern);
assertEquals("NA", metadata.sharedCost.possibleNumberPattern);
}
public void testGetInstanceLoadDEMetadata() {
PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.DE);
assertEquals("DE", metadata.getId());
assertEquals(49, metadata.getCountryCode());
assertEquals("00", metadata.getInternationalPrefix());
assertEquals("0", metadata.getNationalPrefix());
assertEquals("DE", metadata.id);
assertEquals(49, metadata.countryCode);
assertEquals("00", metadata.internationalPrefix);
assertEquals("0", metadata.nationalPrefix);
assertEquals(6, metadata.numberFormatSize());
assertEquals(1, metadata.getNumberFormat(5).leadingDigitsPatternSize());
assertEquals("900", metadata.getNumberFormat(5).getLeadingDigitsPattern(0));
assertEquals("(\\d{3})(\\d{3,4})(\\d{4})",
metadata.getNumberFormat(5).getPattern());
assertEquals("$1 $2 $3", metadata.getNumberFormat(5).getFormat());
metadata.getNumberFormat(5).pattern);
assertEquals("$1 $2 $3", metadata.getNumberFormat(5).format);
assertEquals("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{1,8}",
metadata.getFixedLine().getNationalNumberPattern());
assertEquals("\\d{2,14}", metadata.getFixedLine().getPossibleNumberPattern());
assertEquals("30123456", metadata.getFixedLine().getExampleNumber());
assertEquals("\\d{10}", metadata.getTollFree().getPossibleNumberPattern());
assertEquals("900([135]\\d{6}|9\\d{7})", metadata.getPremiumRate().getNationalNumberPattern());
metadata.fixedLine.nationalNumberPattern);
assertEquals("\\d{2,14}", metadata.fixedLine.possibleNumberPattern);
assertEquals("30123456", metadata.fixedLine.exampleNumber);
assertEquals("\\d{10}", metadata.tollFree.possibleNumberPattern);
assertEquals("900([135]\\d{6}|9\\d{7})", metadata.premiumRate.nationalNumberPattern);
}
public void testGetInstanceLoadARMetadata() {
PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.AR);
assertEquals("AR", metadata.getId());
assertEquals(54, metadata.getCountryCode());
assertEquals("00", metadata.getInternationalPrefix());
assertEquals("0", metadata.getNationalPrefix());
assertEquals("0(?:(11|343|3715)15)?", metadata.getNationalPrefixForParsing());
assertEquals("9$1", metadata.getNationalPrefixTransformRule());
assertEquals("$2 15 $3-$4", metadata.getNumberFormat(2).getFormat());
assertEquals("AR", metadata.id);
assertEquals(54, metadata.countryCode);
assertEquals("00", metadata.internationalPrefix);
assertEquals("0", metadata.nationalPrefix);
assertEquals("0(?:(11|343|3715)15)?", metadata.nationalPrefixForParsing);
assertEquals("9$1", metadata.nationalPrefixTransformRule);
assertEquals("$2 15 $3-$4", metadata.getNumberFormat(2).format);
assertEquals("(9)(\\d{4})(\\d{2})(\\d{4})",
metadata.getNumberFormat(3).getPattern());
metadata.getNumberFormat(3).pattern);
assertEquals("(9)(\\d{4})(\\d{2})(\\d{4})",
metadata.getIntlNumberFormat(3).getPattern());
assertEquals("$1 $2 $3 $4", metadata.getIntlNumberFormat(3).getFormat());
metadata.getIntlNumberFormat(3).pattern);
assertEquals("$1 $2 $3 $4", metadata.getIntlNumberFormat(3).format);
}
public void testGetInstanceLoadInternationalTollFreeMetadata() {
PhoneMetadata metadata = phoneUtil.getMetadataForNonGeographicalRegion(800);
assertEquals("001", metadata.getId());
assertEquals(800, metadata.getCountryCode());
assertEquals("$1 $2", metadata.getNumberFormat(0).getFormat());
assertEquals("(\\d{4})(\\d{4})", metadata.getNumberFormat(0).getPattern());
assertEquals("12345678", metadata.getGeneralDesc().getExampleNumber());
assertEquals("12345678", metadata.getTollFree().getExampleNumber());
assertEquals("001", metadata.id);
assertEquals(800, metadata.countryCode);
assertEquals("$1 $2", metadata.getNumberFormat(0).format);
assertEquals("(\\d{4})(\\d{4})", metadata.getNumberFormat(0).pattern);
assertEquals("12345678", metadata.generalDesc.exampleNumber);
assertEquals("12345678", metadata.tollFree.exampleNumber);
}
public void testIsNumberGeographical() {
@ -809,8 +809,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
public void testFormatByPattern() {
NumberFormat newNumFormat = new NumberFormat();
newNumFormat.setPattern("(\\d{3})(\\d{3})(\\d{4})");
newNumFormat.setFormat("($1) $2-$3");
newNumFormat.pattern = "(\\d{3})(\\d{3})(\\d{4})";
newNumFormat.format = "($1) $2-$3";
List<NumberFormat> newNumberFormats = new ArrayList<NumberFormat>();
newNumberFormats.add(newNumFormat);
@ -825,8 +825,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
// $NP is set to '1' for the US. Here we check that for other NANPA countries the US rules are
// followed.
newNumFormat.setNationalPrefixFormattingRule("$NP ($FG)");
newNumFormat.setFormat("$1 $2-$3");
newNumFormat.nationalPrefixFormattingRule = "$NP ($FG)";
newNumFormat.format = "$1 $2-$3";
assertEquals("1 (242) 365-1234",
phoneUtil.formatByPattern(BS_NUMBER, PhoneNumberFormat.NATIONAL,
newNumberFormats));
@ -834,8 +834,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
phoneUtil.formatByPattern(BS_NUMBER, PhoneNumberFormat.INTERNATIONAL,
newNumberFormats));
newNumFormat.setPattern("(\\d{2})(\\d{5})(\\d{3})");
newNumFormat.setFormat("$1-$2 $3");
newNumFormat.pattern = "(\\d{2})(\\d{5})(\\d{3})";
newNumFormat.format = "$1-$2 $3";
newNumberFormats.set(0, newNumFormat);
assertEquals("02-36618 300",
@ -845,20 +845,20 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
phoneUtil.formatByPattern(IT_NUMBER, PhoneNumberFormat.INTERNATIONAL,
newNumberFormats));
newNumFormat.setNationalPrefixFormattingRule("$NP$FG");
newNumFormat.setPattern("(\\d{2})(\\d{4})(\\d{4})");
newNumFormat.setFormat("$1 $2 $3");
newNumFormat.nationalPrefixFormattingRule = "$NP$FG";
newNumFormat.pattern = "(\\d{2})(\\d{4})(\\d{4})";
newNumFormat.format = "$1 $2 $3";
newNumberFormats.set(0, newNumFormat);
assertEquals("020 7031 3000",
phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL,
newNumberFormats));
newNumFormat.setNationalPrefixFormattingRule("($NP$FG)");
newNumFormat.nationalPrefixFormattingRule = "($NP$FG)";
assertEquals("(020) 7031 3000",
phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL,
newNumberFormats));
newNumFormat.setNationalPrefixFormattingRule("");
newNumFormat.nationalPrefixFormattingRule = "";
assertEquals("20 7031 3000",
phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL,
newNumberFormats));
@ -1431,8 +1431,9 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
public void testMaybeStripNationalPrefix() {
PhoneMetadata metadata = new PhoneMetadata();
metadata.setNationalPrefixForParsing("34");
metadata.setGeneralDesc(new PhoneNumberDesc().setNationalNumberPattern("\\d{4,8}"));
metadata.nationalPrefixForParsing = "34";
metadata.generalDesc = new PhoneNumberDesc();
metadata.generalDesc.nationalNumberPattern = "\\d{4,8}";
StringBuilder numberToStrip = new StringBuilder("34356778");
String strippedNumber = "356778";
assertTrue(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null));
@ -1444,12 +1445,12 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals("Should have had no change - no national prefix present.",
strippedNumber, numberToStrip.toString());
// Some countries have no national prefix. Repeat test with none specified.
metadata.setNationalPrefixForParsing("");
metadata.nationalPrefixForParsing = "";
assertFalse(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null));
assertEquals("Should not strip anything with empty national prefix.",
strippedNumber, numberToStrip.toString());
// If the resultant number doesn't match the national rule, it shouldn't be stripped.
metadata.setNationalPrefixForParsing("3");
metadata.nationalPrefixForParsing = "3";
numberToStrip = new StringBuilder("3123");
strippedNumber = "3123";
assertFalse(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null));
@ -1457,7 +1458,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
"the national rule.",
strippedNumber, numberToStrip.toString());
// Test extracting carrier selection code.
metadata.setNationalPrefixForParsing("0(81)?");
metadata.nationalPrefixForParsing = "0(81)?";
numberToStrip = new StringBuilder("08122123456");
strippedNumber = "22123456";
StringBuilder carrierCode = new StringBuilder();
@ -1467,9 +1468,9 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals("Should have had national prefix and carrier code stripped.",
strippedNumber, numberToStrip.toString());
// If there was a transform rule, check it was applied.
metadata.setNationalPrefixTransformRule("5$15");
metadata.nationalPrefixTransformRule = "5$15";
// Note that a capturing group is present here.
metadata.setNationalPrefixForParsing("0(\\d{2})");
metadata.nationalPrefixForParsing = "0(\\d{2})";
numberToStrip = new StringBuilder("031123");
String transformedNumber = "5315123";
assertTrue(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null));


+ 5
- 0
java/pom.xml View File

@ -180,6 +180,11 @@
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>
</project>

+ 79
- 82
tools/java/common/src/com/google/i18n/phonenumbers/BuildMetadataFromXml.java View File

@ -126,10 +126,10 @@ public class BuildMetadataFromXml {
Map<Integer, List<String>> countryCodeToRegionCodeMap =
new TreeMap<Integer, List<String>>();
for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
String regionCode = metadata.getId();
int countryCode = metadata.getCountryCode();
String regionCode = metadata.id;
int countryCode = metadata.countryCode;
if (countryCodeToRegionCodeMap.containsKey(countryCode)) {
if (metadata.getMainCountryForCode()) {
if (metadata.mainCountryForCode) {
countryCodeToRegionCodeMap.get(countryCode).add(0, regionCode);
} else {
countryCodeToRegionCodeMap.get(countryCode).add(regionCode);
@ -182,43 +182,42 @@ public class BuildMetadataFromXml {
static PhoneMetadata loadTerritoryTagMetadata(String regionCode, Element element,
String nationalPrefix) {
PhoneMetadata metadata = new PhoneMetadata();
metadata.setId(regionCode);
metadata.id = regionCode;
if (element.hasAttribute(COUNTRY_CODE)) {
metadata.setCountryCode(Integer.parseInt(element.getAttribute(COUNTRY_CODE)));
metadata.countryCode = Integer.parseInt(element.getAttribute(COUNTRY_CODE));
}
if (element.hasAttribute(LEADING_DIGITS)) {
metadata.setLeadingDigits(validateRE(element.getAttribute(LEADING_DIGITS)));
metadata.leadingDigits = validateRE(element.getAttribute(LEADING_DIGITS));
}
metadata.setInternationalPrefix(validateRE(element.getAttribute(INTERNATIONAL_PREFIX)));
metadata.internationalPrefix = validateRE(element.getAttribute(INTERNATIONAL_PREFIX));
if (element.hasAttribute(PREFERRED_INTERNATIONAL_PREFIX)) {
String preferredInternationalPrefix = element.getAttribute(PREFERRED_INTERNATIONAL_PREFIX);
metadata.setPreferredInternationalPrefix(preferredInternationalPrefix);
metadata.preferredInternationalPrefix = element.getAttribute(PREFERRED_INTERNATIONAL_PREFIX);
}
if (element.hasAttribute(NATIONAL_PREFIX_FOR_PARSING)) {
metadata.setNationalPrefixForParsing(
validateRE(element.getAttribute(NATIONAL_PREFIX_FOR_PARSING), true));
metadata.nationalPrefixForParsing =
validateRE(element.getAttribute(NATIONAL_PREFIX_FOR_PARSING), true);
if (element.hasAttribute(NATIONAL_PREFIX_TRANSFORM_RULE)) {
metadata.setNationalPrefixTransformRule(
validateRE(element.getAttribute(NATIONAL_PREFIX_TRANSFORM_RULE)));
metadata.nationalPrefixTransformRule =
validateRE(element.getAttribute(NATIONAL_PREFIX_TRANSFORM_RULE));
}
}
if (!nationalPrefix.isEmpty()) {
metadata.setNationalPrefix(nationalPrefix);
if (!metadata.hasNationalPrefixForParsing()) {
metadata.setNationalPrefixForParsing(nationalPrefix);
metadata.nationalPrefix = nationalPrefix;
if (metadata.nationalPrefixForParsing.length() == 0) {
metadata.nationalPrefixForParsing = nationalPrefix;
}
}
if (element.hasAttribute(PREFERRED_EXTN_PREFIX)) {
metadata.setPreferredExtnPrefix(element.getAttribute(PREFERRED_EXTN_PREFIX));
metadata.preferredExtnPrefix = element.getAttribute(PREFERRED_EXTN_PREFIX);
}
if (element.hasAttribute(MAIN_COUNTRY_FOR_CODE)) {
metadata.setMainCountryForCode(true);
metadata.mainCountryForCode = true;
}
if (element.hasAttribute(LEADING_ZERO_POSSIBLE)) {
metadata.setLeadingZeroPossible(true);
metadata.leadingZeroPossible = true;
}
if (element.hasAttribute(MOBILE_NUMBER_PORTABLE_REGION)) {
metadata.setMobileNumberPortableRegion(true);
metadata.mobileNumberPortableRegion = true;
}
return metadata;
}
@ -242,23 +241,23 @@ public class BuildMetadataFromXml {
LOGGER.log(Level.SEVERE,
"A maximum of one intlFormat pattern for a numberFormat element should be " +
"defined.");
String countryId = metadata.getId().length() > 0 ?
metadata.getId() : Integer.toString(metadata.getCountryCode());
String countryId = metadata.id.length() > 0 ?
metadata.id : Integer.toString(metadata.countryCode);
throw new RuntimeException("Invalid number of intlFormat patterns for country: " + countryId);
} else if (intlFormatPattern.getLength() == 0) {
// Default to use the same as the national pattern if none is defined.
intlFormat.mergeFrom(nationalFormat);
} else {
intlFormat.setPattern(numberFormatElement.getAttribute(PATTERN));
intlFormat.pattern = numberFormatElement.getAttribute(PATTERN);
setLeadingDigitsPatterns(numberFormatElement, intlFormat);
String intlFormatPatternValue = intlFormatPattern.item(0).getFirstChild().getNodeValue();
if (!intlFormatPatternValue.equals("NA")) {
intlFormat.setFormat(intlFormatPatternValue);
intlFormat.format = intlFormatPatternValue;
}
hasExplicitIntlFormatDefined = true;
}
if (intlFormat.hasFormat()) {
if (!intlFormat.format.isEmpty()) {
metadata.addIntlNumberFormat(intlFormat);
}
return hasExplicitIntlFormatDefined;
@ -273,18 +272,18 @@ public class BuildMetadataFromXml {
static void loadNationalFormat(PhoneMetadata metadata, Element numberFormatElement,
NumberFormat format) {
setLeadingDigitsPatterns(numberFormatElement, format);
format.setPattern(validateRE(numberFormatElement.getAttribute(PATTERN)));
format.pattern = validateRE(numberFormatElement.getAttribute(PATTERN));
NodeList formatPattern = numberFormatElement.getElementsByTagName(FORMAT);
int numFormatPatterns = formatPattern.getLength();
if (numFormatPatterns != 1) {
LOGGER.log(Level.SEVERE, "One format pattern for a numberFormat element should be defined.");
String countryId = metadata.getId().length() > 0 ?
metadata.getId() : Integer.toString(metadata.getCountryCode());
String countryId = metadata.id.length() > 0 ?
metadata.id : Integer.toString(metadata.countryCode);
throw new RuntimeException("Invalid number of format patterns (" + numFormatPatterns +
") for country: " + countryId);
}
format.setFormat(formatPattern.item(0).getFirstChild().getNodeValue());
format.format = formatPattern.item(0).getFirstChild().getNodeValue();
}
/**
@ -313,27 +312,27 @@ public class BuildMetadataFromXml {
NumberFormat format = new NumberFormat();
if (numberFormatElement.hasAttribute(NATIONAL_PREFIX_FORMATTING_RULE)) {
format.setNationalPrefixFormattingRule(
getNationalPrefixFormattingRuleFromElement(numberFormatElement, nationalPrefix));
format.nationalPrefixFormattingRule =
getNationalPrefixFormattingRuleFromElement(numberFormatElement, nationalPrefix);
} else {
format.setNationalPrefixFormattingRule(nationalPrefixFormattingRule);
format.nationalPrefixFormattingRule = nationalPrefixFormattingRule;
}
if (format.hasNationalPrefixFormattingRule()) {
if (!format.nationalPrefixFormattingRule.isEmpty()) {
if (numberFormatElement.hasAttribute(NATIONAL_PREFIX_OPTIONAL_WHEN_FORMATTING)) {
format.setNationalPrefixOptionalWhenFormatting(
format.nationalPrefixOptionalWhenFormatting =
Boolean.valueOf(numberFormatElement.getAttribute(
NATIONAL_PREFIX_OPTIONAL_WHEN_FORMATTING)));
NATIONAL_PREFIX_OPTIONAL_WHEN_FORMATTING));
} else {
format.setNationalPrefixOptionalWhenFormatting(nationalPrefixOptionalWhenFormatting);
format.nationalPrefixOptionalWhenFormatting = nationalPrefixOptionalWhenFormatting;
}
}
if (numberFormatElement.hasAttribute(CARRIER_CODE_FORMATTING_RULE)) {
format.setDomesticCarrierCodeFormattingRule(validateRE(
format.domesticCarrierCodeFormattingRule = validateRE(
getDomesticCarrierCodeFormattingRuleFromElement(numberFormatElement,
nationalPrefix)));
nationalPrefix));
} else {
format.setDomesticCarrierCodeFormattingRule(carrierCodeFormattingRule);
format.domesticCarrierCodeFormattingRule = carrierCodeFormattingRule;
}
loadNationalFormat(metadata, numberFormatElement, format);
metadata.addNumberFormat(format);
@ -415,8 +414,8 @@ public class BuildMetadataFromXml {
NodeList phoneNumberDescList = countryElement.getElementsByTagName(numberType);
PhoneNumberDesc numberDesc = new PhoneNumberDesc();
if (phoneNumberDescList.getLength() == 0 && !isValidNumberType(numberType)) {
numberDesc.setNationalNumberPattern("NA");
numberDesc.setPossibleNumberPattern("NA");
numberDesc.nationalNumberPattern = "NA";
numberDesc.possibleNumberPattern = "NA";
return numberDesc;
}
numberDesc.mergeFrom(generalDesc);
@ -424,20 +423,20 @@ public class BuildMetadataFromXml {
Element element = (Element) phoneNumberDescList.item(0);
NodeList possiblePattern = element.getElementsByTagName(POSSIBLE_NUMBER_PATTERN);
if (possiblePattern.getLength() > 0) {
numberDesc.setPossibleNumberPattern(
validateRE(possiblePattern.item(0).getFirstChild().getNodeValue(), true));
numberDesc.possibleNumberPattern =
validateRE(possiblePattern.item(0).getFirstChild().getNodeValue(), true);
}
NodeList validPattern = element.getElementsByTagName(NATIONAL_NUMBER_PATTERN);
if (validPattern.getLength() > 0) {
numberDesc.setNationalNumberPattern(
validateRE(validPattern.item(0).getFirstChild().getNodeValue(), true));
numberDesc.nationalNumberPattern =
validateRE(validPattern.item(0).getFirstChild().getNodeValue(), true);
}
if (!liteBuild) {
NodeList exampleNumber = element.getElementsByTagName(EXAMPLE_NUMBER);
if (exampleNumber.getLength() > 0) {
numberDesc.setExampleNumber(exampleNumber.item(0).getFirstChild().getNodeValue());
numberDesc.exampleNumber = exampleNumber.item(0).getFirstChild().getNodeValue();
}
}
}
@ -449,49 +448,48 @@ public class BuildMetadataFromXml {
boolean liteBuild, boolean isShortNumberMetadata) {
PhoneNumberDesc generalDesc = new PhoneNumberDesc();
generalDesc = processPhoneNumberDescElement(generalDesc, element, GENERAL_DESC, liteBuild);
metadata.setGeneralDesc(generalDesc);
metadata.generalDesc = generalDesc;
if (!isShortNumberMetadata) {
// Set fields used only by regular length phone numbers.
metadata.setFixedLine(
processPhoneNumberDescElement(generalDesc, element, FIXED_LINE, liteBuild));
metadata.setMobile(
processPhoneNumberDescElement(generalDesc, element, MOBILE, liteBuild));
metadata.setSharedCost(
processPhoneNumberDescElement(generalDesc, element, SHARED_COST, liteBuild));
metadata.setVoip(
processPhoneNumberDescElement(generalDesc, element, VOIP, liteBuild));
metadata.setPersonalNumber(
processPhoneNumberDescElement(generalDesc, element, PERSONAL_NUMBER, liteBuild));
metadata.setPager(
processPhoneNumberDescElement(generalDesc, element, PAGER, liteBuild));
metadata.setUan(
processPhoneNumberDescElement(generalDesc, element, UAN, liteBuild));
metadata.setVoicemail(
processPhoneNumberDescElement(generalDesc, element, VOICEMAIL, liteBuild));
metadata.setNoInternationalDialling(
metadata.fixedLine =
processPhoneNumberDescElement(generalDesc, element, FIXED_LINE, liteBuild);
metadata.mobile =
processPhoneNumberDescElement(generalDesc, element, MOBILE, liteBuild);
metadata.sharedCost =
processPhoneNumberDescElement(generalDesc, element, SHARED_COST, liteBuild);
metadata.voip =
processPhoneNumberDescElement(generalDesc, element, VOIP, liteBuild);
metadata.personalNumber =
processPhoneNumberDescElement(generalDesc, element, PERSONAL_NUMBER, liteBuild);
metadata.pager =
processPhoneNumberDescElement(generalDesc, element, PAGER, liteBuild);
metadata.uan =
processPhoneNumberDescElement(generalDesc, element, UAN, liteBuild);
metadata.voicemail =
processPhoneNumberDescElement(generalDesc, element, VOICEMAIL, liteBuild);
metadata.noInternationalDialling =
processPhoneNumberDescElement(generalDesc, element, NO_INTERNATIONAL_DIALLING,
liteBuild));
metadata.setSameMobileAndFixedLinePattern(
metadata.getMobile().getNationalNumberPattern().equals(
metadata.getFixedLine().getNationalNumberPattern()));
liteBuild);
metadata.sameMobileAndFixedLinePattern =
metadata.mobile.nationalNumberPattern.equals(metadata.fixedLine.nationalNumberPattern);
} else {
// Set fields used only by short numbers.
metadata.setStandardRate(
processPhoneNumberDescElement(generalDesc, element, STANDARD_RATE, liteBuild));
metadata.setShortCode(
processPhoneNumberDescElement(generalDesc, element, SHORT_CODE, liteBuild));
metadata.setCarrierSpecific(
processPhoneNumberDescElement(generalDesc, element, CARRIER_SPECIFIC, liteBuild));
metadata.setEmergency(
processPhoneNumberDescElement(generalDesc, element, EMERGENCY, liteBuild));
metadata.standardRate =
processPhoneNumberDescElement(generalDesc, element, STANDARD_RATE, liteBuild);
metadata.shortCode =
processPhoneNumberDescElement(generalDesc, element, SHORT_CODE, liteBuild);
metadata.carrierSpecific =
processPhoneNumberDescElement(generalDesc, element, CARRIER_SPECIFIC, liteBuild);
metadata.emergency =
processPhoneNumberDescElement(generalDesc, element, EMERGENCY, liteBuild);
}
// Set fields used by both regular length and short numbers.
metadata.setTollFree(
processPhoneNumberDescElement(generalDesc, element, TOLL_FREE, liteBuild));
metadata.setPremiumRate(
processPhoneNumberDescElement(generalDesc, element, PREMIUM_RATE, liteBuild));
metadata.tollFree =
processPhoneNumberDescElement(generalDesc, element, TOLL_FREE, liteBuild);
metadata.premiumRate =
processPhoneNumberDescElement(generalDesc, element, PREMIUM_RATE, liteBuild);
}
// @VisibleForTesting
@ -502,8 +500,7 @@ public class BuildMetadataFromXml {
loadTerritoryTagMetadata(regionCode, element, nationalPrefix);
String nationalPrefixFormattingRule =
getNationalPrefixFormattingRuleFromElement(element, nationalPrefix);
loadAvailableFormats(metadata, element, nationalPrefix.toString(),
nationalPrefixFormattingRule.toString(),
loadAvailableFormats(metadata, element, nationalPrefix, nationalPrefixFormattingRule,
element.hasAttribute(NATIONAL_PREFIX_OPTIONAL_WHEN_FORMATTING));
if (!isAlternateFormatsMetadata) {
// The alternate formats metadata does not need most of the patterns to be set.


+ 66
- 68
tools/java/common/test/com/google/i18n/phonenumbers/BuildMetadataFromXmlTest.java View File

@ -122,17 +122,17 @@ public class BuildMetadataFromXmlTest extends TestCase {
Element territoryElement = parseXmlString(xmlInput);
PhoneMetadata phoneMetadata =
BuildMetadataFromXml.loadTerritoryTagMetadata("33", territoryElement, "0");
assertEquals(33, phoneMetadata.getCountryCode());
assertEquals("2", phoneMetadata.getLeadingDigits());
assertEquals("00", phoneMetadata.getInternationalPrefix());
assertEquals("0011", phoneMetadata.getPreferredInternationalPrefix());
assertEquals("0", phoneMetadata.getNationalPrefixForParsing());
assertEquals("9$1", phoneMetadata.getNationalPrefixTransformRule());
assertEquals("0", phoneMetadata.getNationalPrefix());
assertEquals(" x", phoneMetadata.getPreferredExtnPrefix());
assertTrue(phoneMetadata.getMainCountryForCode());
assertTrue(phoneMetadata.isLeadingZeroPossible());
assertTrue(phoneMetadata.isMobileNumberPortableRegion());
assertEquals(33, phoneMetadata.countryCode);
assertEquals("2", phoneMetadata.leadingDigits);
assertEquals("00", phoneMetadata.internationalPrefix);
assertEquals("0011", phoneMetadata.preferredInternationalPrefix);
assertEquals("0", phoneMetadata.nationalPrefixForParsing);
assertEquals("9$1", phoneMetadata.nationalPrefixTransformRule);
assertEquals("0", phoneMetadata.nationalPrefix);
assertEquals(" x", phoneMetadata.preferredExtnPrefix);
assertTrue(phoneMetadata.mainCountryForCode);
assertTrue(phoneMetadata.leadingZeroPossible);
assertTrue(phoneMetadata.mobileNumberPortableRegion);
}
public void testLoadTerritoryTagMetadataSetsBooleanFieldsToFalseByDefault()
@ -141,9 +141,9 @@ public class BuildMetadataFromXmlTest extends TestCase {
Element territoryElement = parseXmlString(xmlInput);
PhoneMetadata phoneMetadata =
BuildMetadataFromXml.loadTerritoryTagMetadata("33", territoryElement, "");
assertFalse(phoneMetadata.getMainCountryForCode());
assertFalse(phoneMetadata.isLeadingZeroPossible());
assertFalse(phoneMetadata.isMobileNumberPortableRegion());
assertFalse(phoneMetadata.mainCountryForCode);
assertFalse(phoneMetadata.leadingZeroPossible);
assertFalse(phoneMetadata.mobileNumberPortableRegion);
}
public void testLoadTerritoryTagMetadataSetsNationalPrefixForParsingByDefault()
@ -153,8 +153,8 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata phoneMetadata =
BuildMetadataFromXml.loadTerritoryTagMetadata("33", territoryElement, "00");
// When unspecified, nationalPrefixForParsing defaults to nationalPrefix.
assertEquals("00", phoneMetadata.getNationalPrefix());
assertEquals(phoneMetadata.getNationalPrefix(), phoneMetadata.getNationalPrefixForParsing());
assertEquals("00", phoneMetadata.nationalPrefix);
assertEquals(phoneMetadata.nationalPrefix, phoneMetadata.nationalPrefixForParsing);
}
public void testLoadTerritoryTagMetadataWithRequiredAttributesOnly()
@ -176,7 +176,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
assertTrue(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement,
nationalFormat));
assertEquals(intlFormat, metadata.getIntlNumberFormat(0).getFormat());
assertEquals(intlFormat, metadata.getIntlNumberFormat(0).format);
}
public void testLoadInternationalFormatWithBothNationalAndIntlFormatsDefined()
@ -186,11 +186,11 @@ public class BuildMetadataFromXmlTest extends TestCase {
Element numberFormatElement = parseXmlString(xmlInput);
PhoneMetadata metadata = new PhoneMetadata();
NumberFormat nationalFormat = new NumberFormat();
nationalFormat.setFormat("$1");
nationalFormat.format = "$1";
assertTrue(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement,
nationalFormat));
assertEquals(intlFormat, metadata.getIntlNumberFormat(0).getFormat());
assertEquals(intlFormat, metadata.getIntlNumberFormat(0).format);
}
public void testLoadInternationalFormatExpectsOnlyOnePattern()
@ -216,11 +216,11 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
NumberFormat nationalFormat = new NumberFormat();
String nationalPattern = "$1 $2 $3";
nationalFormat.setFormat(nationalPattern);
nationalFormat.format = nationalPattern;
assertFalse(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement,
nationalFormat));
assertEquals(nationalPattern, metadata.getIntlNumberFormat(0).getFormat());
assertEquals(nationalPattern, metadata.getIntlNumberFormat(0).format);
}
public void testLoadInternationalFormatCopiesNationalFormatData()
@ -229,12 +229,12 @@ public class BuildMetadataFromXmlTest extends TestCase {
Element numberFormatElement = parseXmlString(xmlInput);
PhoneMetadata metadata = new PhoneMetadata();
NumberFormat nationalFormat = new NumberFormat();
nationalFormat.setFormat("$1-$2");
nationalFormat.setNationalPrefixOptionalWhenFormatting(true);
nationalFormat.format = "$1-$2";
nationalFormat.nationalPrefixOptionalWhenFormatting = true;
assertFalse(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement,
nationalFormat));
assertTrue(metadata.getIntlNumberFormat(0).isNationalPrefixOptionalWhenFormatting());
assertTrue(metadata.getIntlNumberFormat(0).nationalPrefixOptionalWhenFormatting);
}
public void testLoadNationalFormat()
@ -246,7 +246,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
NumberFormat numberFormat = new NumberFormat();
BuildMetadataFromXml.loadNationalFormat(metadata, numberFormatElement, numberFormat);
assertEquals(nationalFormat, numberFormat.getFormat());
assertEquals(nationalFormat, numberFormat.format);
}
public void testLoadNationalFormatRequiresFormat()
@ -295,9 +295,9 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
BuildMetadataFromXml.loadAvailableFormats(
metadata, element, "0", "", false /* NP not optional */);
assertEquals("($1)", metadata.getNumberFormat(0).getNationalPrefixFormattingRule());
assertEquals("0 $CC ($1)", metadata.getNumberFormat(0).getDomesticCarrierCodeFormattingRule());
assertEquals("$1 $2 $3", metadata.getNumberFormat(0).getFormat());
assertEquals("($1)", metadata.getNumberFormat(0).nationalPrefixFormattingRule);
assertEquals("0 $CC ($1)", metadata.getNumberFormat(0).domesticCarrierCodeFormattingRule);
assertEquals("$1 $2 $3", metadata.getNumberFormat(0).format);
}
public void testLoadAvailableFormatsPropagatesCarrierCodeFormattingRule()
@ -314,9 +314,9 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
BuildMetadataFromXml.loadAvailableFormats(
metadata, element, "0", "", false /* NP not optional */);
assertEquals("($1)", metadata.getNumberFormat(0).getNationalPrefixFormattingRule());
assertEquals("0 $CC ($1)", metadata.getNumberFormat(0).getDomesticCarrierCodeFormattingRule());
assertEquals("$1 $2 $3", metadata.getNumberFormat(0).getFormat());
assertEquals("($1)", metadata.getNumberFormat(0).nationalPrefixFormattingRule);
assertEquals("0 $CC ($1)", metadata.getNumberFormat(0).domesticCarrierCodeFormattingRule);
assertEquals("$1 $2 $3", metadata.getNumberFormat(0).format);
}
public void testLoadAvailableFormatsSetsProvidedNationalPrefixFormattingRule()
@ -331,7 +331,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
BuildMetadataFromXml.loadAvailableFormats(
metadata, element, "", "($1)", false /* NP not optional */);
assertEquals("($1)", metadata.getNumberFormat(0).getNationalPrefixFormattingRule());
assertEquals("($1)", metadata.getNumberFormat(0).nationalPrefixFormattingRule);
}
public void testLoadAvailableFormatsClearsIntlFormat()
@ -362,8 +362,8 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
BuildMetadataFromXml.loadAvailableFormats(
metadata, element, "0", "($1)", false /* NP not optional */);
assertEquals("$1 $2 $3", metadata.getNumberFormat(0).getFormat());
assertEquals("$1-$2", metadata.getNumberFormat(1).getFormat());
assertEquals("$1 $2 $3", metadata.getNumberFormat(0).format);
assertEquals("$1-$2", metadata.getNumberFormat(1).format);
}
public void testLoadInternationalFormatDoesNotSetIntlFormatWhenNA()
@ -372,7 +372,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
Element numberFormatElement = parseXmlString(xmlInput);
PhoneMetadata metadata = new PhoneMetadata();
NumberFormat nationalFormat = new NumberFormat();
nationalFormat.setFormat("$1 $2");
nationalFormat.format = "$1 $2";
BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement,
nationalFormat);
@ -455,26 +455,26 @@ public class BuildMetadataFromXmlTest extends TestCase {
phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
generalDesc, territoryElement, "invalidType", false);
assertEquals("NA", phoneNumberDesc.getPossibleNumberPattern());
assertEquals("NA", phoneNumberDesc.getNationalNumberPattern());
assertEquals("NA", phoneNumberDesc.possibleNumberPattern);
assertEquals("NA", phoneNumberDesc.nationalNumberPattern);
}
public void testProcessPhoneNumberDescElementMergesWithGeneralDesc()
throws ParserConfigurationException, SAXException, IOException {
PhoneNumberDesc generalDesc = new PhoneNumberDesc();
generalDesc.setPossibleNumberPattern("\\d{6}");
generalDesc.possibleNumberPattern = "\\d{6}";
Element territoryElement = parseXmlString("<territory><fixedLine/></territory>");
PhoneNumberDesc phoneNumberDesc;
phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
generalDesc, territoryElement, "fixedLine", false);
assertEquals("\\d{6}", phoneNumberDesc.getPossibleNumberPattern());
assertEquals("\\d{6}", phoneNumberDesc.possibleNumberPattern);
}
public void testProcessPhoneNumberDescElementOverridesGeneralDesc()
throws ParserConfigurationException, SAXException, IOException {
PhoneNumberDesc generalDesc = new PhoneNumberDesc();
generalDesc.setPossibleNumberPattern("\\d{8}");
generalDesc.possibleNumberPattern = "\\d{8}";
String xmlInput =
"<territory><fixedLine>" +
" <possibleNumberPattern>\\d{6}</possibleNumberPattern>" +
@ -484,7 +484,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
generalDesc, territoryElement, "fixedLine", false);
assertEquals("\\d{6}", phoneNumberDesc.getPossibleNumberPattern());
assertEquals("\\d{6}", phoneNumberDesc.possibleNumberPattern);
}
public void testProcessPhoneNumberDescElementHandlesLiteBuild()
@ -499,7 +499,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
generalDesc, territoryElement, "fixedLine", true);
assertEquals("", phoneNumberDesc.getExampleNumber());
assertEquals("", phoneNumberDesc.exampleNumber);
}
public void testProcessPhoneNumberDescOutputsExampleNumberByDefault()
@ -514,7 +514,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
generalDesc, territoryElement, "fixedLine", false);
assertEquals("01 01 01 01", phoneNumberDesc.getExampleNumber());
assertEquals("01 01 01 01", phoneNumberDesc.exampleNumber);
}
public void testProcessPhoneNumberDescRemovesWhiteSpacesInPatterns()
@ -529,7 +529,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
generalDesc, countryElement, "fixedLine", false);
assertEquals("\\d{6}", phoneNumberDesc.getPossibleNumberPattern());
assertEquals("\\d{6}", phoneNumberDesc.possibleNumberPattern);
}
// Tests setRelevantDescPatterns().
@ -545,7 +545,7 @@ public class BuildMetadataFromXmlTest extends TestCase {
// Should set sameMobileAndFixedPattern to true.
BuildMetadataFromXml.setRelevantDescPatterns(metadata, territoryElement, false /* liteBuild */,
false /* isShortNumberMetadata */);
assertTrue(metadata.isSameMobileAndFixedLinePattern());
assertTrue(metadata.sameMobileAndFixedLinePattern);
}
public void testSetRelevantDescPatternsSetsAllDescriptionsForRegularLengthNumbers()
@ -566,15 +566,15 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
BuildMetadataFromXml.setRelevantDescPatterns(metadata, territoryElement, false /* liteBuild */,
false /* isShortNumberMetadata */);
assertEquals("\\d{1}", metadata.getFixedLine().getNationalNumberPattern());
assertEquals("\\d{2}", metadata.getMobile().getNationalNumberPattern());
assertEquals("\\d{3}", metadata.getPager().getNationalNumberPattern());
assertEquals("\\d{4}", metadata.getTollFree().getNationalNumberPattern());
assertEquals("\\d{5}", metadata.getPremiumRate().getNationalNumberPattern());
assertEquals("\\d{6}", metadata.getSharedCost().getNationalNumberPattern());
assertEquals("\\d{7}", metadata.getPersonalNumber().getNationalNumberPattern());
assertEquals("\\d{8}", metadata.getVoip().getNationalNumberPattern());
assertEquals("\\d{9}", metadata.getUan().getNationalNumberPattern());
assertEquals("\\d{1}", metadata.fixedLine.nationalNumberPattern);
assertEquals("\\d{2}", metadata.mobile.nationalNumberPattern);
assertEquals("\\d{3}", metadata.pager.nationalNumberPattern);
assertEquals("\\d{4}", metadata.tollFree.nationalNumberPattern);
assertEquals("\\d{5}", metadata.premiumRate.nationalNumberPattern);
assertEquals("\\d{6}", metadata.sharedCost.nationalNumberPattern);
assertEquals("\\d{7}", metadata.personalNumber.nationalNumberPattern);
assertEquals("\\d{8}", metadata.voip.nationalNumberPattern);
assertEquals("\\d{9}", metadata.uan.nationalNumberPattern);
}
public void testSetRelevantDescPatternsSetsAllDescriptionsForShortNumbers()
@ -593,11 +593,11 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = new PhoneMetadata();
BuildMetadataFromXml.setRelevantDescPatterns(metadata, territoryElement, false /* liteBuild */,
true /* isShortNumberMetadata */);
assertEquals("\\d{1}", metadata.getTollFree().getNationalNumberPattern());
assertEquals("\\d{2}", metadata.getStandardRate().getNationalNumberPattern());
assertEquals("\\d{3}", metadata.getPremiumRate().getNationalNumberPattern());
assertEquals("\\d{4}", metadata.getShortCode().getNationalNumberPattern());
assertEquals("\\d{5}", metadata.getCarrierSpecific().getNationalNumberPattern());
assertEquals("\\d{1}", metadata.tollFree.nationalNumberPattern);
assertEquals("\\d{2}", metadata.standardRate.nationalNumberPattern);
assertEquals("\\d{3}", metadata.premiumRate.nationalNumberPattern);
assertEquals("\\d{4}", metadata.shortCode.nationalNumberPattern);
assertEquals("\\d{5}", metadata.carrierSpecific.nationalNumberPattern);
}
public void testAlternateFormatsOmitsDescPatterns()
@ -617,13 +617,11 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = BuildMetadataFromXml.loadCountryMetadata("FR", territoryElement,
false /* liteBuild */, false /* isShortNumberMetadata */,
true /* isAlternateFormatsMetadata */);
assertEquals("(1)(\\d{3})", metadata.getNumberFormat(0).getPattern());
assertEquals("(1)(\\d{3})", metadata.getNumberFormat(0).pattern);
assertEquals("1", metadata.getNumberFormat(0).getLeadingDigitsPattern(0));
assertEquals("$1", metadata.getNumberFormat(0).getFormat());
assertFalse(metadata.hasFixedLine());
assertNull(metadata.getFixedLine());
assertFalse(metadata.hasShortCode());
assertNull(metadata.getShortCode());
assertEquals("$1", metadata.getNumberFormat(0).format);
assertNull(metadata.fixedLine);
assertNull(metadata.shortCode);
}
public void testNationalPrefixRulesSetCorrectly()
@ -647,11 +645,11 @@ public class BuildMetadataFromXmlTest extends TestCase {
PhoneMetadata metadata = BuildMetadataFromXml.loadCountryMetadata("FR", territoryElement,
false /* liteBuild */, false /* isShortNumberMetadata */,
true /* isAlternateFormatsMetadata */);
assertTrue(metadata.getNumberFormat(0).isNationalPrefixOptionalWhenFormatting());
assertTrue(metadata.getNumberFormat(0).nationalPrefixOptionalWhenFormatting);
// This is inherited from the territory, with $NP replaced by the actual national prefix, and
// $FG replaced with $1.
assertEquals("0$1", metadata.getNumberFormat(0).getNationalPrefixFormattingRule());
assertEquals("0$1", metadata.getNumberFormat(0).nationalPrefixFormattingRule);
// Here it is explicitly set to false.
assertFalse(metadata.getNumberFormat(1).isNationalPrefixOptionalWhenFormatting());
assertFalse(metadata.getNumberFormat(1).nationalPrefixOptionalWhenFormatting);
}
}

+ 49
- 49
tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java View File

@ -136,11 +136,11 @@ public class BuildMetadataJsonFromXml extends Command {
} else {
writer.write(",");
}
String key = metadata.getId();
String key = metadata.id;
// For non-geographical country calling codes (e.g. +800), use the country calling codes
// instead of the region code as key in the map.
if (key.equals("001")) {
key = Integer.toString(metadata.getCountryCode());
key = Integer.toString(metadata.countryCode);
}
JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
toJsArray(metadata, jsArrayBuilder);
@ -182,9 +182,9 @@ public class BuildMetadataJsonFromXml extends Command {
// missing 0
jsArrayBuilder.append(null);
// required string pattern = 1;
jsArrayBuilder.append(format.getPattern());
jsArrayBuilder.append(format.pattern);
// required string format = 2;
jsArrayBuilder.append(format.getFormat());
jsArrayBuilder.append(format.format);
// repeated string leading_digits_pattern = 3;
int leadingDigitsPatternSize = format.leadingDigitsPatternSize();
if (leadingDigitsPatternSize > 0) {
@ -197,20 +197,20 @@ public class BuildMetadataJsonFromXml extends Command {
jsArrayBuilder.append(null);
}
// optional string national_prefix_formatting_rule = 4;
if (format.hasNationalPrefixFormattingRule()) {
jsArrayBuilder.append(format.getNationalPrefixFormattingRule());
if (format.nationalPrefixFormattingRule.length() != 0) {
jsArrayBuilder.append(format.nationalPrefixFormattingRule);
} else {
jsArrayBuilder.append(null);
}
// optional string domestic_carrier_code_formatting_rule = 5;
if (format.hasDomesticCarrierCodeFormattingRule()) {
jsArrayBuilder.append(format.getDomesticCarrierCodeFormattingRule());
if (format.domesticCarrierCodeFormattingRule.length() != 0) {
jsArrayBuilder.append(format.domesticCarrierCodeFormattingRule);
} else {
jsArrayBuilder.append(null);
}
// optional bool national_prefix_optional_when_formatting = 6;
if (format.hasNationalPrefixOptionalWhenFormatting()) {
jsArrayBuilder.append(format.isNationalPrefixOptionalWhenFormatting());
if (format.nationalPrefixOptionalWhenFormatting) {
jsArrayBuilder.append(format.nationalPrefixOptionalWhenFormatting);
} else {
jsArrayBuilder.append(null);
}
@ -233,14 +233,14 @@ public class BuildMetadataJsonFromXml extends Command {
// missing 1
jsArrayBuilder.append(null);
// optional string national_number_pattern = 2;
if (desc.hasNationalNumberPattern()) {
jsArrayBuilder.append(desc.getNationalNumberPattern());
if (desc.nationalNumberPattern.length() != 0) {
jsArrayBuilder.append(desc.nationalNumberPattern);
} else {
jsArrayBuilder.append(null);
}
// optional string possible_number_pattern = 3;
if (desc.hasPossibleNumberPattern()) {
jsArrayBuilder.append(desc.getPossibleNumberPattern());
if (desc.possibleNumberPattern.length() != 0) {
jsArrayBuilder.append(desc.possibleNumberPattern);
} else {
jsArrayBuilder.append(null);
}
@ -249,8 +249,8 @@ public class BuildMetadataJsonFromXml extends Command {
// missing 5
jsArrayBuilder.append(null);
// optional string example_number = 6;
if (desc.hasExampleNumber()) {
jsArrayBuilder.append(desc.getExampleNumber());
if (desc.exampleNumber.length() != 0) {
jsArrayBuilder.append(desc.exampleNumber);
} else {
jsArrayBuilder.append(null);
}
@ -265,70 +265,70 @@ public class BuildMetadataJsonFromXml extends Command {
// missing 0
jsArrayBuilder.append(null);
// optional PhoneNumberDesc general_desc = 1;
toJsArray(metadata.getGeneralDesc(), jsArrayBuilder);
toJsArray(metadata.generalDesc, jsArrayBuilder);
// optional PhoneNumberDesc fixed_line = 2;
toJsArray(metadata.getFixedLine(), jsArrayBuilder);
toJsArray(metadata.fixedLine, jsArrayBuilder);
// optional PhoneNumberDesc mobile = 3;
toJsArray(metadata.getMobile(), jsArrayBuilder);
toJsArray(metadata.mobile, jsArrayBuilder);
// optional PhoneNumberDesc toll_free = 4;
toJsArray(metadata.getTollFree(), jsArrayBuilder);
toJsArray(metadata.tollFree, jsArrayBuilder);
// optional PhoneNumberDesc premium_rate = 5;
toJsArray(metadata.getPremiumRate(), jsArrayBuilder);
toJsArray(metadata.premiumRate, jsArrayBuilder);
// optional PhoneNumberDesc shared_cost = 6;
toJsArray(metadata.getSharedCost(), jsArrayBuilder);
toJsArray(metadata.sharedCost, jsArrayBuilder);
// optional PhoneNumberDesc personal_number = 7;
toJsArray(metadata.getPersonalNumber(), jsArrayBuilder);
toJsArray(metadata.personalNumber, jsArrayBuilder);
// optional PhoneNumberDesc voip = 8;
toJsArray(metadata.getVoip(), jsArrayBuilder);
toJsArray(metadata.voip, jsArrayBuilder);
// required string id = 9;
jsArrayBuilder.append(metadata.getId());
jsArrayBuilder.append(metadata.id);
// optional int32 country_code = 10;
if (metadata.hasCountryCode()) {
jsArrayBuilder.append(metadata.getCountryCode());
if (metadata.countryCode != 0) {
jsArrayBuilder.append(metadata.countryCode);
} else {
jsArrayBuilder.append(null);
}
// optional string international_prefix = 11;
if (metadata.hasInternationalPrefix()) {
jsArrayBuilder.append(metadata.getInternationalPrefix());
if (metadata.internationalPrefix.length() != 0) {
jsArrayBuilder.append(metadata.internationalPrefix);
} else {
jsArrayBuilder.append(null);
}
// optional string national_prefix = 12;
if (metadata.hasNationalPrefix()) {
jsArrayBuilder.append(metadata.getNationalPrefix());
if (metadata.nationalPrefix.length() != 0) {
jsArrayBuilder.append(metadata.nationalPrefix);
} else {
jsArrayBuilder.append(null);
}
// optional string preferred_extn_prefix = 13;
if (metadata.hasPreferredExtnPrefix()) {
jsArrayBuilder.append(metadata.getPreferredExtnPrefix());
if (metadata.preferredExtnPrefix.length() != 0) {
jsArrayBuilder.append(metadata.preferredExtnPrefix);
} else {
jsArrayBuilder.append(null);
}
// missing 14
jsArrayBuilder.append(null);
// optional string national_prefix_for_parsing = 15;
if (metadata.hasNationalPrefixForParsing()) {
jsArrayBuilder.append(metadata.getNationalPrefixForParsing());
if (metadata.nationalPrefixForParsing.length() != 0) {
jsArrayBuilder.append(metadata.nationalPrefixForParsing);
} else {
jsArrayBuilder.append(null);
}
// optional string national_prefix_transform_rule = 16;
if (metadata.hasNationalPrefixTransformRule()) {
jsArrayBuilder.append(metadata.getNationalPrefixTransformRule());
if (metadata.nationalPrefixTransformRule.length() != 0) {
jsArrayBuilder.append(metadata.nationalPrefixTransformRule);
} else {
jsArrayBuilder.append(null);
}
// optional string preferred_international_prefix = 17;
if (metadata.hasPreferredInternationalPrefix()) {
jsArrayBuilder.append(metadata.getPreferredInternationalPrefix());
if (metadata.preferredInternationalPrefix.length() != 0) {
jsArrayBuilder.append(metadata.preferredInternationalPrefix);
} else {
jsArrayBuilder.append(null);
}
// optional bool same_mobile_and_fixed_line_pattern = 18 [default=false];
if (metadata.isSameMobileAndFixedLinePattern()) {
if (metadata.sameMobileAndFixedLinePattern) {
jsArrayBuilder.append(1);
} else {
jsArrayBuilder.append(null);
@ -356,33 +356,33 @@ public class BuildMetadataJsonFromXml extends Command {
jsArrayBuilder.append(null);
}
// optional PhoneNumberDesc pager = 21;
toJsArray(metadata.getPager(), jsArrayBuilder);
toJsArray(metadata.pager, jsArrayBuilder);
// optional bool main_country_for_code = 22 [default=false];
if (metadata.isMainCountryForCode()) {
if (metadata.mainCountryForCode) {
jsArrayBuilder.append(1);
} else {
jsArrayBuilder.append(null);
}
// optional string leading_digits = 23;
if (metadata.hasLeadingDigits()) {
jsArrayBuilder.append(metadata.getLeadingDigits());
if (metadata.leadingDigits.length() != 0) {
jsArrayBuilder.append(metadata.leadingDigits);
} else {
jsArrayBuilder.append(null);
}
// optional PhoneNumberDesc no_international_dialling = 24;
toJsArray(metadata.getNoInternationalDialling(), jsArrayBuilder);
toJsArray(metadata.noInternationalDialling, jsArrayBuilder);
// optional PhoneNumberDesc uan = 25;
toJsArray(metadata.getUan(), jsArrayBuilder);
toJsArray(metadata.uan, jsArrayBuilder);
// optional bool leading_zero_possible = 26 [default=false];
if (metadata.isLeadingZeroPossible()) {
if (metadata.leadingZeroPossible) {
jsArrayBuilder.append(1);
} else {
jsArrayBuilder.append(null);
}
// optional PhoneNumberDesc emergency = 27;
toJsArray(metadata.getEmergency(), jsArrayBuilder);
toJsArray(metadata.emergency, jsArrayBuilder);
// optional PhoneNumberDesc voicemail = 28;
toJsArray(metadata.getVoicemail(), jsArrayBuilder);
toJsArray(metadata.voicemail, jsArrayBuilder);
// Fields 29-31 are omitted due to space increase.
// optional PhoneNumberDesc short_code = 29;
// optional PhoneNumberDesc standard_rate = 30;


+ 2
- 2
tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java View File

@ -165,11 +165,11 @@ public class BuildMetadataProtoFromXml extends Command {
out.close();
} else {
for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
String regionCode = metadata.getId();
String regionCode = metadata.id;
// For non-geographical country calling codes (e.g. +800), or for alternate formats, use the
// country calling codes instead of the region code to form the file name.
if (regionCode.equals("001") || regionCode.isEmpty()) {
regionCode = Integer.toString(metadata.getCountryCode());
regionCode = Integer.toString(metadata.countryCode);
}
PhoneMetadataCollection outMetadataCollection = new PhoneMetadataCollection();
outMetadataCollection.addMetadata(metadata);


Loading…
Cancel
Save