summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.android2
-rw-r--r--README.version2
-rw-r--r--carrier/pom.xml8
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/212_enbin549 -> 555 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/252_enbin284 -> 290 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/260_enbin72 -> 76 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/27_enbin922 -> 952 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/34_enbin2114 -> 2120 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/47_enbin2814 -> 2814 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/594_enbin159 -> 191 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/65_enbin2861 -> 2881 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/974_enbin258 -> 234 bytes
-rw-r--r--demo/README.md8
-rw-r--r--demo/pom.xml68
-rw-r--r--demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java441
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/InputServlet.java44
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/ResultServlet.java144
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/helper/WebHelper.java76
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/render/ErrorRenderer.java50
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/render/InputFormRenderer.java37
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/render/LibPhoneNumberRenderer.java50
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/render/ResultFileRenderer.java62
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java137
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/template/InputFormTemplates.java95
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/template/ResultErrorTemplates.java158
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/template/ResultFileTemplates.java90
-rw-r--r--demo/src/main/java/com/google/phonenumbers/demo/template/ResultTemplates.java731
-rw-r--r--demo/src/main/resources/com/google/phonenumbers/demo/input_form.soy (renamed from demo/src/main/webapp/phonenumberparser.jsp)10
-rw-r--r--demo/src/main/resources/com/google/phonenumbers/demo/result.soy253
-rw-r--r--demo/src/main/resources/com/google/phonenumbers/demo/result_error.soy20
-rw-r--r--demo/src/main/resources/com/google/phonenumbers/demo/result_file.soy44
-rw-r--r--demo/src/main/webapp/WEB-INF/web.xml19
-rw-r--r--geocoder/pom.xml8
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_enbin639 -> 659 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_databin27088 -> 27101 bytes
-rw-r--r--internal/prefixmapper/pom.xml6
-rw-r--r--libphonenumber/pom.xml4
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJbin424 -> 428 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EHbin407 -> 414 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GBbin2884 -> 2883 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GFbin523 -> 516 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GGbin678 -> 679 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JEbin784 -> 785 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MAbin879 -> 886 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MWbin511 -> 509 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SGbin989 -> 987 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SNbin594 -> 604 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SObin789 -> 779 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZMbin580 -> 581 bytes
-rw-r--r--pom.xml4
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/229_enbin639 -> 659 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_databin27088 -> 27101 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJbin424 -> 428 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EHbin407 -> 414 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GBbin2884 -> 2883 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GFbin523 -> 516 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GGbin678 -> 679 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JEbin784 -> 785 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MAbin879 -> 886 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MWbin511 -> 509 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SGbin989 -> 987 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SNbin594 -> 604 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SObin789 -> 779 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZMbin580 -> 581 bytes
64 files changed, 2094 insertions, 477 deletions
diff --git a/README.android b/README.android
index 0258a6a0..4322007a 100644
--- a/README.android
+++ b/README.android
@@ -1,5 +1,5 @@
URL: https://github.com/googlei18n/libphonenumber
-Version: 8.12.56
+Version: 8.12.57
License: Apache 2
Description: Google Phone Number Library.
diff --git a/README.version b/README.version
index 0d139635..c7eefc59 100644
--- a/README.version
+++ b/README.version
@@ -1,3 +1,3 @@
URL: https://github.com/googlei18n/libphonenumber/
-Version: 8.12.56
+Version: 8.12.57
BugComponent: 20868
diff --git a/carrier/pom.xml b/carrier/pom.xml
index bebc67db..e0bb7507 100644
--- a/carrier/pom.xml
+++ b/carrier/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>carrier</artifactId>
- <version>1.182</version>
+ <version>1.183</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</parent>
<build>
@@ -55,12 +55,12 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
- <version>2.192</version>
+ <version>2.193</version>
</dependency>
</dependencies>
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en
index befb5c08..3043e637 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/252_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/252_en
index c3efeaa3..6cffb28f 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/252_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/252_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/260_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/260_en
index a36efe99..14426bcc 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/260_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/260_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/27_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/27_en
index 75fee289..e2c0ce30 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/27_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/27_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en
index 7a54e180..2e9b8910 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en
index c4c17b84..1600d278 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/594_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/594_en
index 792c89c6..a1223017 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/594_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/594_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en
index db4bfa8e..266a0aa6 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en
index 551fcab4..380bc731 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en
Binary files differ
diff --git a/demo/README.md b/demo/README.md
index abe000d7..d10b30b9 100644
--- a/demo/README.md
+++ b/demo/README.md
@@ -1,15 +1,21 @@
## Prerequisite:
### Linux
+
#### Install the Appengine SDK.
+
`$ sudo apt-get install google-cloud-sdk-app-engine-java`
### Mac
+
#### Install the Google Cloud SDK.
+
`$ brew install google-cloud-sdk`
#### Use GCloud CLI to install the Java Appengine
+
`$ gcloud components install app-engine-java`
## How to regenerate the WAR, deploy and run in appengine?
-`$ mvn appengine:run` \ No newline at end of file
+
+`$ mvn appengine:run`
diff --git a/demo/pom.xml b/demo/pom.xml
index f70e0b79..8208d350 100644
--- a/demo/pom.xml
+++ b/demo/pom.xml
@@ -3,13 +3,13 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>demo</artifactId>
- <version>8.12.56</version>
- <packaging>war</packaging>
+ <version>8.12.57</version>
+ <packaging>war</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</parent>
<properties>
@@ -20,6 +20,8 @@
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
<archiveClasses>true</archiveClasses>
+ <soy.root>src/main/resources/com/google/phonenumbers/demo</soy.root>
+ <soy.package>com.google.phonenumbers.demo.template</soy.package>
</properties>
<prerequisites>
@@ -29,9 +31,14 @@
<dependencies>
<!-- Compile/runtime dependencies -->
<dependency>
- <groupId>com.google.appengine</groupId>
+ <artifactId>soy</artifactId>
+ <groupId>com.google.template</groupId>
+ <version>2022-07-20</version>
+ </dependency>
+ <dependency>
<artifactId>appengine-api-1.0-sdk</artifactId>
- <version>1.9.96</version>
+ <groupId>com.google.appengine</groupId>
+ <version>2.0.8</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
@@ -58,17 +65,17 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>geocoder</artifactId>
- <version>2.192</version>
+ <version>2.193</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>carrier</artifactId>
- <version>1.182</version>
+ <version>1.183</version>
</dependency>
</dependencies>
@@ -77,12 +84,55 @@
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
<plugins>
<plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>3.1.0</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <mainClass>com.google.template.soy.SoyParseInfoGenerator</mainClass>
+ <arguments>
+ <argument>--generateInvocationBuilders</argument>
+ <argument>--javaPackage</argument>
+ <argument>${soy.package}</argument>
+ <argument>--javaClassNameSource</argument>
+ <argument>filename</argument>
+ <argument>--srcs</argument>
+ <argument>${soy.root}/input_form.soy,${soy.root}/result.soy,${soy.root}/result_error.soy,${soy.root}/result_file.soy</argument>
+ <argument>--outputDirectory</argument>
+ <argument>src/main/java/com/google/phonenumbers/demo/template/</argument>
+ </arguments>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
- <version>1.3.1</version>
+ <version>2.4.4</version>
<configuration>
</configuration>
</plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>8</source>
+ <target>8</target>
+ </configuration>
+ <groupId>org.apache.maven.plugins</groupId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>3.4.1</version>
+ <configuration>
+ <excludePackageNames>${soy.package}</excludePackageNames>
+ </configuration>
+ </plugin>
</plugins>
</build>
</project>
+
diff --git a/demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java b/demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java
deleted file mode 100644
index 40f0fa8f..00000000
--- a/demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * Copyright (C) 2011 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 Shaopeng Jia
- */
-
-package com.google.phonenumbers;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static java.util.Locale.ENGLISH;
-
-import com.google.i18n.phonenumbers.AsYouTypeFormatter;
-import com.google.i18n.phonenumbers.NumberParseException;
-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.PhoneNumberUtil.PhoneNumberType;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult;
-import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-import com.google.i18n.phonenumbers.ShortNumberInfo;
-import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Locale;
-import java.util.StringTokenizer;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.fileupload.FileItemIterator;
-import org.apache.commons.fileupload.FileItemStream;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.commons.fileupload.util.Streams;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-
-/**
- * A servlet that accepts requests that contain strings representing a phone number and a default
- * country, and responds with results from parsing, validating and formatting the number. The
- * default country is a two-letter region code representing the country that we are expecting the
- * number to be from.
- */
-@SuppressWarnings("serial")
-public class PhoneNumberParserServlet extends HttpServlet {
- private PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
- private ShortNumberInfo shortInfo = ShortNumberInfo.getInstance();
-
- public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
- String phoneNumber = null;
- String defaultCountry = null;
- String languageCode = "en"; // Default languageCode to English if nothing is entered.
- String regionCode = "";
- String fileContents = null;
- ServletFileUpload upload = new ServletFileUpload();
- upload.setSizeMax(50000);
- try {
- FileItemIterator iterator = upload.getItemIterator(req);
- while (iterator.hasNext()) {
- FileItemStream item = iterator.next();
- InputStream in = item.openStream();
- if (item.isFormField()) {
- String fieldName = item.getFieldName();
- if (fieldName.equals("phoneNumber")) {
- phoneNumber = Streams.asString(in, UTF_8.name());
- } else if (fieldName.equals("defaultCountry")) {
- defaultCountry = Streams.asString(in).toUpperCase();
- } else if (fieldName.equals("languageCode")) {
- String languageEntered = Streams.asString(in).toLowerCase();
- if (languageEntered.length() > 0) {
- languageCode = languageEntered;
- }
- } else if (fieldName.equals("regionCode")) {
- regionCode = Streams.asString(in).toUpperCase();
- }
- } else {
- try {
- fileContents = IOUtils.toString(in);
- } finally {
- IOUtils.closeQuietly(in);
- }
- }
- }
- } catch (FileUploadException e1) {
- e1.printStackTrace();
- }
-
- StringBuilder output;
- resp.setContentType("text/html");
- resp.setCharacterEncoding(UTF_8.name());
- if (fileContents == null || fileContents.length() == 0) {
- // Redirect to a URL with the given input encoded in the query parameters.
- Locale geocodingLocale = new Locale(languageCode, regionCode);
- resp.sendRedirect(
- getPermaLinkURL(phoneNumber, defaultCountry, geocodingLocale, false /* absoluteURL */));
- } else {
- resp.getWriter().println(getOutputForFile(defaultCountry, fileContents));
- }
- }
-
- /** Handle the get request to get information about a number based on query parameters. */
- public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
- String phoneNumber = req.getParameter("number");
- if (phoneNumber == null) {
- phoneNumber = "";
- }
- String defaultCountry = req.getParameter("country");
- if (defaultCountry == null) {
- defaultCountry = "";
- }
- String geocodingParam = req.getParameter("geocodingLocale");
- Locale geocodingLocale;
- if (geocodingParam == null) {
- geocodingLocale = ENGLISH; // Default languageCode to English if nothing is entered.
- } else {
- geocodingLocale = Locale.forLanguageTag(geocodingParam);
- }
- resp.setContentType("text/html");
- resp.setCharacterEncoding(UTF_8.name());
- resp.getWriter()
- .println(getOutputForSingleNumber(phoneNumber, defaultCountry, geocodingLocale));
- }
-
- private StringBuilder getOutputForFile(String defaultCountry, String fileContents) {
- StringBuilder output =
- new StringBuilder(
- "<HTML><HEAD><TITLE>Results generated from phone numbers in the file provided:"
- + "</TITLE></HEAD><BODY>");
- output.append("<TABLE align=center border=1>");
- output.append("<TH align=center>ID</TH>");
- output.append("<TH align=center>Raw phone number</TH>");
- output.append("<TH align=center>Pretty formatting</TH>");
- output.append("<TH align=center>International format</TH>");
-
- int phoneNumberId = 0;
- StringTokenizer tokenizer = new StringTokenizer(fileContents, ",");
- while (tokenizer.hasMoreTokens()) {
- String numberStr = tokenizer.nextToken();
- phoneNumberId++;
- output.append("<TR>");
- output.append("<TD align=center>").append(phoneNumberId).append(" </TD> \n");
- output
- .append("<TD align=center>")
- .append(StringEscapeUtils.escapeHtml(numberStr))
- .append(" </TD> \n");
- try {
- PhoneNumber number = phoneUtil.parseAndKeepRawInput(numberStr, defaultCountry);
- boolean isNumberValid = phoneUtil.isValidNumber(number);
- String prettyFormat =
- isNumberValid ? phoneUtil.formatInOriginalFormat(number, defaultCountry) : "invalid";
- String internationalFormat =
- isNumberValid ? phoneUtil.format(number, PhoneNumberFormat.INTERNATIONAL) : "invalid";
-
- output
- .append("<TD align=center>")
- .append(StringEscapeUtils.escapeHtml(prettyFormat))
- .append(" </TD> \n");
- output
- .append("<TD align=center>")
- .append(StringEscapeUtils.escapeHtml(internationalFormat))
- .append(" </TD> \n");
- } catch (NumberParseException e) {
- output
- .append("<TD align=center colspan=2>")
- .append(StringEscapeUtils.escapeHtml(e.toString()))
- .append(" </TD> \n");
- }
- output.append("</TR>");
- }
- output.append("</BODY></HTML>");
- return output;
- }
-
- private void appendLine(String title, String data, StringBuilder output) {
- output.append("<TR>");
- output.append("<TH>").append(title).append("</TH>");
- output.append("<TD>").append(data.length() > 0 ? data : "&nbsp;").append("</TD>");
- output.append("</TR>");
- }
-
- /** Returns a stable URL pointing to the result page for the given input. */
- private String getPermaLinkURL(
- String phoneNumber, String defaultCountry, Locale geocodingLocale, boolean absoluteURL) {
- // If absoluteURL is false, generate a relative path. Otherwise, produce an absolute URL.
- StringBuilder permaLink =
- new StringBuilder(
- absoluteURL
- ? "http://libphonenumber.appspot.com/phonenumberparser"
- : "/phonenumberparser");
- try {
- permaLink.append(
- "?number=" + URLEncoder.encode(phoneNumber != null ? phoneNumber : "", UTF_8.name()));
- if (defaultCountry != null && !defaultCountry.isEmpty()) {
- permaLink.append("&country=" + URLEncoder.encode(defaultCountry, UTF_8.name()));
- }
- if (!geocodingLocale.getLanguage().equals(ENGLISH.getLanguage())
- || !geocodingLocale.getCountry().isEmpty()) {
- permaLink.append(
- "&geocodingLocale=" + URLEncoder.encode(geocodingLocale.toLanguageTag(), UTF_8.name()));
- }
- } catch (UnsupportedEncodingException e) {
- // UTF-8 is guaranteed in Java, so this should be impossible.
- throw new AssertionError(e);
- }
- return permaLink.toString();
- }
-
- private static final String NEW_ISSUE_BASE_URL =
- "https://issuetracker.google.com/issues/new?component=192347&title=";
-
- /** Returns a link to create a new github issue with the relevant information. */
- private String getNewIssueLink(
- String phoneNumber, String defaultCountry, Locale geocodingLocale) {
- boolean hasDefaultCountry = !defaultCountry.isEmpty() && defaultCountry != "ZZ";
- String issueTitle =
- "Validation issue with "
- + phoneNumber
- + (hasDefaultCountry ? " (" + defaultCountry + ")" : "");
-
- String newIssueLink = NEW_ISSUE_BASE_URL;
- try {
- newIssueLink += URLEncoder.encode(issueTitle, UTF_8.name());
- } catch (UnsupportedEncodingException e) {
- // UTF-8 is guaranteed in Java, so this should be impossible.
- throw new AssertionError(e);
- }
- return newIssueLink;
- }
-
- /**
- * The defaultCountry here is used for parsing phoneNumber. The geocodingLocale is used to specify
- * the language used for displaying the area descriptions generated from phone number geocoding.
- */
- private StringBuilder getOutputForSingleNumber(
- String phoneNumber, String defaultCountry, Locale geocodingLocale) {
- StringBuilder output = new StringBuilder("<HTML><HEAD>");
- output.append("<LINK type=\"text/css\" rel=\"stylesheet\" href=\"/stylesheets/main.css\" />");
- output.append("</HEAD>");
- output.append("<BODY>");
- output.append("Phone Number entered: " + StringEscapeUtils.escapeHtml(phoneNumber) + "<BR>");
- output.append(
- "defaultCountry entered: " + StringEscapeUtils.escapeHtml(defaultCountry) + "<BR>");
- output.append(
- "Language entered: "
- + StringEscapeUtils.escapeHtml(geocodingLocale.toLanguageTag())
- + "<BR>");
- try {
- PhoneNumber number = phoneUtil.parseAndKeepRawInput(phoneNumber, defaultCountry);
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>Parsing Result (parseAndKeepRawInput())</TD></TR>");
-
- appendLine("country_code", Integer.toString(number.getCountryCode()), output);
- appendLine("national_number", Long.toString(number.getNationalNumber()), output);
- appendLine("extension", number.getExtension(), output);
- appendLine("country_code_source", number.getCountryCodeSource().toString(), output);
- appendLine("italian_leading_zero", Boolean.toString(number.isItalianLeadingZero()), output);
- appendLine("raw_input", number.getRawInput(), output);
- output.append("</TABLE>");
- output.append("</DIV>");
-
- boolean isPossible = phoneUtil.isPossibleNumber(number);
- boolean isNumberValid = phoneUtil.isValidNumber(number);
- PhoneNumberType numberType = phoneUtil.getNumberType(number);
- boolean hasDefaultCountry = !defaultCountry.isEmpty() && defaultCountry != "ZZ";
-
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>Validation Results</TD></TR>");
- appendLine("Result from isPossibleNumber()", Boolean.toString(isPossible), output);
- if (isPossible) {
- if (phoneUtil.isPossibleNumberWithReason(number)
- == ValidationResult.IS_POSSIBLE_LOCAL_ONLY) {
- appendLine("Result from isPossibleNumberWithReason()", "IS_POSSIBLE_LOCAL_ONLY", output);
- output.append(
- "<TR><TD colspan=2>Number is considered invalid as it is "
- + "not a possible national number.</TD></TR>");
- } else {
- appendLine("Result from isValidNumber()", Boolean.toString(isNumberValid), output);
- if (isNumberValid && hasDefaultCountry) {
- appendLine(
- "Result from isValidNumberForRegion()",
- Boolean.toString(phoneUtil.isValidNumberForRegion(number, defaultCountry)),
- output);
- }
- String region = phoneUtil.getRegionCodeForNumber(number);
- appendLine("Phone Number region", region == null ? "" : region, output);
- appendLine("Result from getNumberType()", numberType.toString(), output);
- }
- } else {
- appendLine(
- "Result from isPossibleNumberWithReason()",
- phoneUtil.isPossibleNumberWithReason(number).toString(),
- output);
- output.append(
- "<TR><TD colspan=2>Note: Numbers that are not possible have type UNKNOWN,"
- + " an unknown region, and are considered invalid.</TD></TR>");
- }
- output.append("</TABLE>");
- output.append("</DIV>");
-
- if (!isNumberValid) {
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>Short Number Results</TD></TR>");
- boolean isPossibleShort = shortInfo.isPossibleShortNumber(number);
- appendLine(
- "Result from isPossibleShortNumber()", Boolean.toString(isPossibleShort), output);
- if (isPossibleShort) {
- appendLine(
- "Result from isValidShortNumber()",
- Boolean.toString(shortInfo.isValidShortNumber(number)),
- output);
- if (hasDefaultCountry) {
- boolean isPossibleShortForRegion =
- shortInfo.isPossibleShortNumberForRegion(number, defaultCountry);
- appendLine(
- "Result from isPossibleShortNumberForRegion()",
- Boolean.toString(isPossibleShortForRegion),
- output);
- if (isPossibleShortForRegion) {
- appendLine(
- "Result from isValidShortNumberForRegion()",
- Boolean.toString(shortInfo.isValidShortNumberForRegion(number, defaultCountry)),
- output);
- }
- }
- }
- output.append("</TABLE>");
- output.append("</DIV>");
- }
-
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>Formatting Results</TD></TR>");
- appendLine(
- "E164 format",
- isNumberValid ? phoneUtil.format(number, PhoneNumberFormat.E164) : "invalid",
- output);
- appendLine(
- "Original format", phoneUtil.formatInOriginalFormat(number, defaultCountry), output);
- appendLine("National format", phoneUtil.format(number, PhoneNumberFormat.NATIONAL), output);
- appendLine(
- "International format",
- isNumberValid ? phoneUtil.format(number, PhoneNumberFormat.INTERNATIONAL) : "invalid",
- output);
- appendLine(
- "Out-of-country format from US",
- isNumberValid ? phoneUtil.formatOutOfCountryCallingNumber(number, "US") : "invalid",
- output);
- appendLine(
- "Out-of-country format from CH",
- isNumberValid ? phoneUtil.formatOutOfCountryCallingNumber(number, "CH") : "invalid",
- output);
- output.append("</TABLE>");
- output.append("</DIV>");
-
- AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(defaultCountry);
- int rawNumberLength = phoneNumber.length();
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>AsYouTypeFormatter Results</TD></TR>");
- 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);
- appendLine(
- "Char entered: '" + inputChar + "' Output: ", formatter.inputDigit(inputChar), output);
- }
- output.append("</TABLE>");
- output.append("</DIV>");
-
- if (isNumberValid) {
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>PhoneNumberOfflineGeocoder Results</TD></TR>");
- appendLine(
- "Location",
- PhoneNumberOfflineGeocoder.getInstance()
- .getDescriptionForNumber(number, geocodingLocale),
- output);
- output.append("</TABLE>");
- output.append("</DIV>");
-
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>PhoneNumberToTimeZonesMapper Results</TD></TR>");
- appendLine(
- "Time zone(s)",
- PhoneNumberToTimeZonesMapper.getInstance().getTimeZonesForNumber(number).toString(),
- output);
- output.append("</TABLE>");
- output.append("</DIV>");
-
- if (numberType == PhoneNumberType.MOBILE
- || numberType == PhoneNumberType.FIXED_LINE_OR_MOBILE
- || numberType == PhoneNumberType.PAGER) {
- output.append("<DIV>");
- output.append("<TABLE border=1>");
- output.append("<TR><TD colspan=2>PhoneNumberToCarrierMapper Results</TD></TR>");
- appendLine(
- "Carrier",
- PhoneNumberToCarrierMapper.getInstance().getNameForNumber(number, geocodingLocale),
- output);
- output.append("</TABLE>");
- output.append("</DIV>");
- }
- }
-
- String newIssueLink = getNewIssueLink(phoneNumber, defaultCountry, geocodingLocale);
- String guidelinesLink =
- "https://github.com/google/libphonenumber/blob/master/CONTRIBUTING.md";
- output.append(
- "<b style=\"color:red\">File an issue</b>: by clicking on "
- + "<a target=\"_blank\" href=\""
- + newIssueLink
- + "\">this link</a>, I confirm that I "
- + "have read the <a target=\"_blank\" href=\""
- + guidelinesLink
- + "\">contributor's guidelines</a>.");
- } catch (NumberParseException e) {
- output.append(StringEscapeUtils.escapeHtml(e.toString()));
- }
- output.append("</BODY></HTML>");
- return output;
- }
-}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/InputServlet.java b/demo/src/main/java/com/google/phonenumbers/demo/InputServlet.java
new file mode 100644
index 00000000..ebb93e20
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/InputServlet.java
@@ -0,0 +1,44 @@
+/*
+ * 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 Shaopeng Jia
+ */
+
+package com.google.phonenumbers.demo;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import com.google.phonenumbers.demo.render.InputFormRenderer;
+import java.io.IOException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * A servlet that accepts requests that contain strings representing a phone number and a default
+ * country, and responds with results from parsing, validating and formatting the number. The
+ * default country is a two-letter region code representing the country that we are expecting the
+ * number to be from.
+ */
+@SuppressWarnings("serial")
+public class InputServlet extends HttpServlet {
+
+ /** Handle the get request to get information about a number based on query parameters. */
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ resp.setContentType("text/html");
+ resp.setCharacterEncoding(UTF_8.name());
+ resp.getWriter().println(new InputFormRenderer().genHtml());
+ }
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/ResultServlet.java b/demo/src/main/java/com/google/phonenumbers/demo/ResultServlet.java
new file mode 100644
index 00000000..04dc0af7
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/ResultServlet.java
@@ -0,0 +1,144 @@
+/*
+ * 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 Shaopeng Jia
+ */
+
+package com.google.phonenumbers.demo;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Locale.ENGLISH;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.phonenumbers.demo.helper.WebHelper;
+import com.google.phonenumbers.demo.render.ErrorRenderer;
+import com.google.phonenumbers.demo.render.ResultFileRenderer;
+import com.google.phonenumbers.demo.render.ResultRenderer;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Locale;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.fileupload.FileItemIterator;
+import org.apache.commons.fileupload.FileItemStream;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload.util.Streams;
+import org.apache.commons.io.IOUtils;
+
+/**
+ * A servlet that accepts requests that contain strings representing a phone number and a default
+ * country, and responds with results from parsing, validating and formatting the number. The
+ * default country is a two-letter region code representing the country that we are expecting the
+ * number to be from.
+ */
+@SuppressWarnings("serial")
+public class ResultServlet extends HttpServlet {
+
+ private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
+
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String phoneNumber = null;
+ String defaultCountry = null;
+ String languageCode = "en"; // Default languageCode to English if nothing is entered.
+ String regionCode = "";
+ String fileContents = null;
+ ServletFileUpload upload = new ServletFileUpload();
+ upload.setSizeMax(50000);
+ try {
+ FileItemIterator iterator = upload.getItemIterator(req);
+ while (iterator.hasNext()) {
+ FileItemStream item = iterator.next();
+ InputStream in = item.openStream();
+ if (item.isFormField()) {
+ String fieldName = item.getFieldName();
+ if (fieldName.equals("phoneNumber")) {
+ phoneNumber = Streams.asString(in, UTF_8.name());
+ } else if (fieldName.equals("defaultCountry")) {
+ defaultCountry = Streams.asString(in).toUpperCase();
+ } else if (fieldName.equals("languageCode")) {
+ String languageEntered = Streams.asString(in).toLowerCase();
+ if (languageEntered.length() > 0) {
+ languageCode = languageEntered;
+ }
+ } else if (fieldName.equals("regionCode")) {
+ regionCode = Streams.asString(in).toUpperCase();
+ }
+ } else {
+ try {
+ fileContents = IOUtils.toString(in);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ }
+ }
+ } catch (FileUploadException e1) {
+ e1.printStackTrace();
+ }
+
+ resp.setContentType("text/html");
+ resp.setCharacterEncoding(UTF_8.name());
+ if (fileContents == null || fileContents.length() == 0) {
+ // Redirect to a URL with the given input encoded in the query parameters.
+ Locale geocodingLocale = new Locale(languageCode, regionCode);
+ resp.sendRedirect(
+ WebHelper.getPermaLinkURL(
+ phoneNumber, defaultCountry, geocodingLocale, false /* absoluteURL */));
+ } else {
+ resp.getWriter().println(new ResultFileRenderer(defaultCountry, fileContents).genHtml());
+ }
+ }
+
+ /** Handle the get request to get information about a number based on query parameters. */
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String phoneNumber = req.getParameter("number");
+ if (phoneNumber == null) {
+ phoneNumber = "";
+ }
+ String defaultCountry = req.getParameter("country");
+ if (defaultCountry == null) {
+ defaultCountry = "";
+ }
+ String geocodingParam = req.getParameter("geocodingLocale");
+ Locale geocodingLocale;
+ if (geocodingParam == null) {
+ geocodingLocale = ENGLISH; // Default languageCode to English if nothing is entered.
+ } else {
+ geocodingLocale = Locale.forLanguageTag(geocodingParam);
+ }
+ resp.setContentType("text/html");
+ resp.setCharacterEncoding(UTF_8.name());
+ resp.getWriter()
+ .println(getOutputForSingleNumber(phoneNumber, defaultCountry, geocodingLocale));
+ }
+
+ /**
+ * The defaultCountry here is used for parsing phoneNumber. The geocodingLocale is used to specify
+ * the language used for displaying the area descriptions generated from phone number geocoding.
+ */
+ private String getOutputForSingleNumber(
+ String phoneNumber, String defaultCountry, Locale geocodingLocale) {
+ try {
+ PhoneNumber number = phoneUtil.parseAndKeepRawInput(phoneNumber, defaultCountry);
+ return new ResultRenderer(phoneNumber, defaultCountry, geocodingLocale, number).genHtml();
+ } catch (NumberParseException e) {
+ return new ErrorRenderer(phoneNumber, defaultCountry, geocodingLocale, e.toString())
+ .genHtml();
+ }
+ }
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/helper/WebHelper.java b/demo/src/main/java/com/google/phonenumbers/demo/helper/WebHelper.java
new file mode 100644
index 00000000..6430bb88
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/helper/WebHelper.java
@@ -0,0 +1,76 @@
+/*
+ * 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 Shaopeng Jia
+ */
+
+package com.google.phonenumbers.demo.helper;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Locale.ENGLISH;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Locale;
+
+public class WebHelper {
+ private static final String NEW_ISSUE_BASE_URL =
+ "https://issuetracker.google.com/issues/new?component=192347&title=";
+ /** Returns a stable URL pointing to the result page for the given input. */
+ public static String getPermaLinkURL(
+ String phoneNumber, String defaultCountry, Locale geocodingLocale, boolean absoluteURL) {
+ // If absoluteURL is false, generate a relative path. Otherwise, produce an absolute URL.
+ StringBuilder permaLink =
+ new StringBuilder(
+ absoluteURL
+ ? "http://libphonenumber.appspot.com/phonenumberparser"
+ : "/phonenumberparser");
+ try {
+ permaLink.append(
+ "?number=" + URLEncoder.encode(phoneNumber != null ? phoneNumber : "", UTF_8.name()));
+ if (defaultCountry != null && !defaultCountry.isEmpty()) {
+ permaLink.append("&country=" + URLEncoder.encode(defaultCountry, UTF_8.name()));
+ }
+ if (!geocodingLocale.getLanguage().equals(ENGLISH.getLanguage())
+ || !geocodingLocale.getCountry().isEmpty()) {
+ permaLink.append(
+ "&geocodingLocale=" + URLEncoder.encode(geocodingLocale.toLanguageTag(), UTF_8.name()));
+ }
+ } catch (UnsupportedEncodingException e) {
+ // UTF-8 is guaranteed in Java, so this should be impossible.
+ throw new AssertionError(e);
+ }
+ return permaLink.toString();
+ }
+
+ /** Returns a link to create a new github issue with the relevant information. */
+ public static String getNewIssueLink(
+ String phoneNumber, String defaultCountry, Locale geocodingLocale) {
+ boolean hasDefaultCountry = !defaultCountry.isEmpty() && defaultCountry != "ZZ";
+ String issueTitle =
+ "Validation issue with "
+ + phoneNumber
+ + (hasDefaultCountry ? " (" + defaultCountry + ")" : "");
+
+ String newIssueLink = NEW_ISSUE_BASE_URL;
+ try {
+ newIssueLink += URLEncoder.encode(issueTitle, UTF_8.name());
+ } catch (UnsupportedEncodingException e) {
+ // UTF-8 is guaranteed in Java, so this should be impossible.
+ throw new AssertionError(e);
+ }
+ return newIssueLink;
+ }
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/render/ErrorRenderer.java b/demo/src/main/java/com/google/phonenumbers/demo/render/ErrorRenderer.java
new file mode 100644
index 00000000..ec1d214b
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/render/ErrorRenderer.java
@@ -0,0 +1,50 @@
+/*
+ * 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.phonenumbers.demo.template.ResultErrorTemplates;
+import com.google.phonenumbers.demo.template.ResultErrorTemplates.Error;
+import java.util.Locale;
+
+public class ErrorRenderer extends LibPhoneNumberRenderer<Error> {
+ private final String phoneNumber;
+ private final String defaultCountry;
+ private final Locale geocodingLocale;
+ private final String error;
+
+ public ErrorRenderer(
+ String phoneNumber, String defaultCountry, Locale geocodingLocale, String error) {
+ super("result_error.soy", "com.google.phonenumbers.demo.error");
+ this.phoneNumber = phoneNumber;
+ this.defaultCountry = defaultCountry;
+ this.geocodingLocale = geocodingLocale;
+ this.error = error;
+ }
+
+ @Override
+ public String genHtml() {
+ return super.render(
+ ResultErrorTemplates.Error.builder()
+ .setPhoneNumber(phoneNumber)
+ .setDefaultCountry(defaultCountry)
+ .setGeocodingLocale(geocodingLocale.toLanguageTag())
+ .setError(error)
+ .build());
+ }
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/render/InputFormRenderer.java b/demo/src/main/java/com/google/phonenumbers/demo/render/InputFormRenderer.java
new file mode 100644
index 00000000..62d980de
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/render/InputFormRenderer.java
@@ -0,0 +1,37 @@
+/*
+ * 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.phonenumbers.demo.template.InputFormTemplates;
+import com.google.phonenumbers.demo.template.InputFormTemplates.InputForm;
+
+public class InputFormRenderer extends LibPhoneNumberRenderer<InputForm> {
+
+ public InputFormRenderer() {
+ super("input_form.soy", "com.google.phonenumbers.demo.inputForm");
+ }
+
+ @Override
+ public String genHtml() {
+ return super.render(
+ InputFormTemplates.InputForm.builder()
+ .setWelcomeTitle("Phone Number Parser Demo for LibPhoneNumber")
+ .build());
+ }
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/render/LibPhoneNumberRenderer.java b/demo/src/main/java/com/google/phonenumbers/demo/render/LibPhoneNumberRenderer.java
new file mode 100644
index 00000000..f20e2974
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/render/LibPhoneNumberRenderer.java
@@ -0,0 +1,50 @@
+/*
+ * 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.template.soy.SoyFileSet;
+import com.google.template.soy.data.SoyTemplate;
+import com.google.template.soy.tofu.SoyTofu;
+import java.net.URL;
+
+public abstract class LibPhoneNumberRenderer<T extends SoyTemplate> {
+ private final String template;
+ private final String namespace;
+
+ public LibPhoneNumberRenderer(String template, String namespace) {
+ this.template = template;
+ this.namespace = namespace;
+ }
+
+ private URL getResource() {
+ return LibPhoneNumberRenderer.class.getResource("../" + template);
+ }
+
+ String render(T soyTemplate) {
+ SoyFileSet sfs = SoyFileSet.builder().add(getResource()).build();
+ SoyTofu tofu = sfs.compileToTofu();
+ // For convenience, create another SoyTofu object that has a
+ // namespace specified, so you can pass partial template names to
+ // the newRenderer() method.
+ SoyTofu simpleTofu = tofu.forNamespace(namespace);
+ return simpleTofu.newRenderer(soyTemplate).render();
+ }
+
+ public abstract String genHtml();
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/render/ResultFileRenderer.java b/demo/src/main/java/com/google/phonenumbers/demo/render/ResultFileRenderer.java
new file mode 100644
index 00000000..125542b2
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/render/ResultFileRenderer.java
@@ -0,0 +1,62 @@
+/*
+ * 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.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.phonenumbers.demo.template.ResultFileTemplates.File;
+import java.util.StringTokenizer;
+
+public class ResultFileRenderer extends LibPhoneNumberRenderer<File> {
+ private final String defaultCountry;
+ private final String fileContents;
+ private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
+
+ public ResultFileRenderer(String defaultCountry, String fileContents) {
+ super("result_file.soy", "com.google.phonenumbers.demo.file");
+ this.fileContents = fileContents;
+ this.defaultCountry = defaultCountry;
+ }
+
+ @Override
+ public String genHtml() {
+ File.Builder soyTemplate = File.builder();
+ int phoneNumberId = 0;
+ StringTokenizer tokenizer = new StringTokenizer(fileContents, ",");
+ while (tokenizer.hasMoreTokens()) {
+ String numberStr = tokenizer.nextToken();
+ phoneNumberId++;
+ try {
+ PhoneNumber number = phoneUtil.parseAndKeepRawInput(numberStr, defaultCountry);
+ boolean isNumberValid = phoneUtil.isValidNumber(number);
+ soyTemplate.addRows(
+ phoneNumberId,
+ numberStr,
+ isNumberValid ? phoneUtil.formatInOriginalFormat(number, defaultCountry) : "invalid",
+ isNumberValid ? phoneUtil.format(number, PhoneNumberFormat.INTERNATIONAL) : "invalid",
+ null);
+ } catch (NumberParseException e) {
+ soyTemplate.addRows(phoneNumberId, numberStr, null, null, e.toString());
+ }
+ }
+ return super.render(soyTemplate.build());
+ }
+}
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..9c5507e3
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/render/ResultRenderer.java
@@ -0,0 +1,137 @@
+/*
+ * 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) {
+ super("result.soy", "com.google.phonenumbers.demo.singleNumber");
+ 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())
+ .setRawInput(number.getRawInput());
+
+ 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");
+
+ // 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());
+ }
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/template/InputFormTemplates.java b/demo/src/main/java/com/google/phonenumbers/demo/template/InputFormTemplates.java
new file mode 100644
index 00000000..43952282
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/template/InputFormTemplates.java
@@ -0,0 +1,95 @@
+// This file was automatically generated by the Soy compiler.
+// Please don't edit this file by hand.
+// source: src/main/resources/com/google/phonenumbers/demo/input_form.soy
+
+package com.google.phonenumbers.demo.template;
+
+
+/**
+ * Wrapper class containing {@link com.google.template.soy.data.SoyTemplate} builders for each
+ * template in: input_form.soy.
+ */
+@javax.annotation.Generated("com.google.template.soy.SoyParseInfoGenerator")
+public final class InputFormTemplates {
+
+ /** A map of filepath to symbol used for CSS resolution on server edit-refresh. */
+ private static final com.google.common.collect.ImmutableMap<java.lang.String, java.lang.String> __PROVIDED_CSS_MAP__ = com.google.common.collect.ImmutableMap.<java.lang.String, java.lang.String>of();
+
+ /** A list of provided symbols used for css validation on edit refresh. */
+ private static final com.google.common.collect.ImmutableList<java.lang.String> __PROVIDED_CSS__ = com.google.common.collect.ImmutableList.<java.lang.String>of();
+
+ /** Template params for com.google.phonenumbers.demo.inputForm.inputForm. */
+ public static final class InputForm extends com.google.template.soy.data.BaseSoyTemplateImpl {
+
+ private static final java.lang.String __NAME__ = "com.google.phonenumbers.demo.inputForm.inputForm";
+
+ /** Wraps a ListenableFuture<InputForm> as a SoyTemplate.AsyncWrapper<InputForm> */
+ public static com.google.template.soy.data.SoyTemplate.AsyncWrapper<InputForm> wrapFuture(com.google.common.util.concurrent.ListenableFuture<InputForm> paramsFuture) {
+ return new com.google.template.soy.data.SoyTemplate.AsyncWrapper<>(__NAME__, paramsFuture);
+ }
+
+ private InputForm(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ super(data);
+ }
+
+ @java.lang.Override
+ public final java.lang.String getTemplateName() {
+ return __NAME__;
+ }
+
+ /** Creates a new Builder instance. */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /** {@param welcomeTitle} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ WELCOME_TITLE =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "welcomeTitle",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@inject csp_style_nonce} Created by ContentSecurityPolicyNonceInjectionPass. */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Object>
+ CSP_STYLE_NONCE =
+ com.google.template.soy.data.SoyTemplateParam.injected(
+ "csp_style_nonce",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Object.class));
+
+ private static final com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> __PARAMS__ = com.google.common.collect.ImmutableSet.of(
+ WELCOME_TITLE);
+
+ public static final class Builder extends com.google.template.soy.data.BaseSoyTemplateImpl.AbstractBuilder<Builder, InputForm> {
+
+ private Builder() {
+ super(1);
+ }
+
+ @java.lang.Override
+ protected com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> allParams() {
+ return __PARAMS__;
+ }
+
+ @java.lang.Override
+ protected InputForm buildInternal(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ return new InputForm(data);
+ }
+
+ /** Sets welcomeTitle. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setWelcomeTitle(java.lang.String value) {
+ return setParamInternal(WELCOME_TITLE, asString(value));
+ }
+
+ /** Future compatible version of {@link #setWelcomeTitle(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setWelcomeTitleFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(WELCOME_TITLE, asFuture(future, AbstractBuilder::asString));
+ }
+
+ }
+ }
+
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/template/ResultErrorTemplates.java b/demo/src/main/java/com/google/phonenumbers/demo/template/ResultErrorTemplates.java
new file mode 100644
index 00000000..7e4e9e69
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/template/ResultErrorTemplates.java
@@ -0,0 +1,158 @@
+// This file was automatically generated by the Soy compiler.
+// Please don't edit this file by hand.
+// source: src/main/resources/com/google/phonenumbers/demo/result_error.soy
+
+package com.google.phonenumbers.demo.template;
+
+
+/**
+ * Wrapper class containing {@link com.google.template.soy.data.SoyTemplate} builders for each
+ * template in: result_error.soy.
+ */
+@javax.annotation.Generated("com.google.template.soy.SoyParseInfoGenerator")
+public final class ResultErrorTemplates {
+
+ /** A map of filepath to symbol used for CSS resolution on server edit-refresh. */
+ private static final com.google.common.collect.ImmutableMap<java.lang.String, java.lang.String> __PROVIDED_CSS_MAP__ = com.google.common.collect.ImmutableMap.<java.lang.String, java.lang.String>of();
+
+ /** A list of provided symbols used for css validation on edit refresh. */
+ private static final com.google.common.collect.ImmutableList<java.lang.String> __PROVIDED_CSS__ = com.google.common.collect.ImmutableList.<java.lang.String>of();
+
+ /** Template params for com.google.phonenumbers.demo.error.error. */
+ public static final class Error extends com.google.template.soy.data.BaseSoyTemplateImpl {
+
+ private static final java.lang.String __NAME__ = "com.google.phonenumbers.demo.error.error";
+
+ /** Wraps a ListenableFuture<Error> as a SoyTemplate.AsyncWrapper<Error> */
+ public static com.google.template.soy.data.SoyTemplate.AsyncWrapper<Error> wrapFuture(com.google.common.util.concurrent.ListenableFuture<Error> paramsFuture) {
+ return new com.google.template.soy.data.SoyTemplate.AsyncWrapper<>(__NAME__, paramsFuture);
+ }
+
+ private Error(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ super(data);
+ }
+
+ @java.lang.Override
+ public final java.lang.String getTemplateName() {
+ return __NAME__;
+ }
+
+ /** Creates a new Builder instance. */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /** {@param phoneNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ PHONE_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "phoneNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param defaultCountry} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ DEFAULT_COUNTRY =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "defaultCountry",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param geocodingLocale} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ GEOCODING_LOCALE =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "geocodingLocale",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param error} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ ERROR =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "error",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@inject csp_style_nonce} Created by ContentSecurityPolicyNonceInjectionPass. */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Object>
+ CSP_STYLE_NONCE =
+ com.google.template.soy.data.SoyTemplateParam.injected(
+ "csp_style_nonce",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Object.class));
+
+ private static final com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> __PARAMS__ = com.google.common.collect.ImmutableSet.of(
+ PHONE_NUMBER,
+ DEFAULT_COUNTRY,
+ GEOCODING_LOCALE,
+ ERROR);
+
+ public static final class Builder extends com.google.template.soy.data.BaseSoyTemplateImpl.AbstractBuilder<Builder, Error> {
+
+ private Builder() {
+ super(4);
+ }
+
+ @java.lang.Override
+ protected com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> allParams() {
+ return __PARAMS__;
+ }
+
+ @java.lang.Override
+ protected Error buildInternal(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ return new Error(data);
+ }
+
+ /** Sets phoneNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setPhoneNumber(java.lang.String value) {
+ return setParamInternal(PHONE_NUMBER, asString(value));
+ }
+
+ /** Future compatible version of {@link #setPhoneNumber(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setPhoneNumberFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(PHONE_NUMBER, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets defaultCountry. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setDefaultCountry(java.lang.String value) {
+ return setParamInternal(DEFAULT_COUNTRY, asString(value));
+ }
+
+ /** Future compatible version of {@link #setDefaultCountry(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setDefaultCountryFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(DEFAULT_COUNTRY, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets geocodingLocale. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setGeocodingLocale(java.lang.String value) {
+ return setParamInternal(GEOCODING_LOCALE, asString(value));
+ }
+
+ /** Future compatible version of {@link #setGeocodingLocale(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setGeocodingLocaleFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(GEOCODING_LOCALE, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets error. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setError(java.lang.String value) {
+ return setParamInternal(ERROR, asString(value));
+ }
+
+ /** Future compatible version of {@link #setError(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setErrorFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(ERROR, asFuture(future, AbstractBuilder::asString));
+ }
+
+ }
+ }
+
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/template/ResultFileTemplates.java b/demo/src/main/java/com/google/phonenumbers/demo/template/ResultFileTemplates.java
new file mode 100644
index 00000000..9578a9c3
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/template/ResultFileTemplates.java
@@ -0,0 +1,90 @@
+// This file was automatically generated by the Soy compiler.
+// Please don't edit this file by hand.
+// source: src/main/resources/com/google/phonenumbers/demo/result_file.soy
+
+package com.google.phonenumbers.demo.template;
+
+
+/**
+ * Wrapper class containing {@link com.google.template.soy.data.SoyTemplate} builders for each
+ * template in: result_file.soy.
+ */
+@javax.annotation.Generated("com.google.template.soy.SoyParseInfoGenerator")
+public final class ResultFileTemplates {
+
+ /** A map of filepath to symbol used for CSS resolution on server edit-refresh. */
+ private static final com.google.common.collect.ImmutableMap<java.lang.String, java.lang.String> __PROVIDED_CSS_MAP__ = com.google.common.collect.ImmutableMap.<java.lang.String, java.lang.String>of();
+
+ /** A list of provided symbols used for css validation on edit refresh. */
+ private static final com.google.common.collect.ImmutableList<java.lang.String> __PROVIDED_CSS__ = com.google.common.collect.ImmutableList.<java.lang.String>of();
+
+ /** Template params for com.google.phonenumbers.demo.file.file. */
+ public static final class File extends com.google.template.soy.data.BaseSoyTemplateImpl {
+
+ private static final java.lang.String __NAME__ = "com.google.phonenumbers.demo.file.file";
+
+ /** Wraps a ListenableFuture<File> as a SoyTemplate.AsyncWrapper<File> */
+ public static com.google.template.soy.data.SoyTemplate.AsyncWrapper<File> wrapFuture(com.google.common.util.concurrent.ListenableFuture<File> paramsFuture) {
+ return new com.google.template.soy.data.SoyTemplate.AsyncWrapper<>(__NAME__, paramsFuture);
+ }
+
+ private File(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ super(data);
+ }
+
+ @java.lang.Override
+ public final java.lang.String getTemplateName() {
+ return __NAME__;
+ }
+
+ /** Creates a new Builder instance. */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /** {@param rows} */
+ private static final com.google.template.soy.data.SoyTemplateParam<?>
+ ROWS =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "rows",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Object.class));
+
+ /** {@inject csp_style_nonce} Created by ContentSecurityPolicyNonceInjectionPass. */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Object>
+ CSP_STYLE_NONCE =
+ com.google.template.soy.data.SoyTemplateParam.injected(
+ "csp_style_nonce",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Object.class));
+
+ private static final com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> __PARAMS__ = com.google.common.collect.ImmutableSet.of(
+ ROWS);
+
+ public static final class Builder extends com.google.template.soy.data.BaseSoyTemplateImpl.AbstractBuilderWithAccumulatorParameters<Builder, File> {
+
+ private Builder() {
+ super(1);
+ initListParam(ROWS);
+ }
+
+ @java.lang.Override
+ protected com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> allParams() {
+ return __PARAMS__;
+ }
+
+ @java.lang.Override
+ protected File buildInternal(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ return new File(data);
+ }
+
+ /** Sets rows. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder addRows(long id, java.lang.String numberStr, @javax.annotation.Nullable java.lang.String prettyFormat, @javax.annotation.Nullable java.lang.String internationalFormat, @javax.annotation.Nullable java.lang.String error) {
+ return addToListParam(ROWS, asRecord("id", asInt(id), "numberStr", asString(numberStr), "prettyFormat", asNullableString(prettyFormat), "internationalFormat", asNullableString(internationalFormat), "error", asNullableString(error)));
+ }
+
+ }
+ }
+
+}
diff --git a/demo/src/main/java/com/google/phonenumbers/demo/template/ResultTemplates.java b/demo/src/main/java/com/google/phonenumbers/demo/template/ResultTemplates.java
new file mode 100644
index 00000000..3532c53e
--- /dev/null
+++ b/demo/src/main/java/com/google/phonenumbers/demo/template/ResultTemplates.java
@@ -0,0 +1,731 @@
+// This file was automatically generated by the Soy compiler.
+// Please don't edit this file by hand.
+// source: src/main/resources/com/google/phonenumbers/demo/result.soy
+
+package com.google.phonenumbers.demo.template;
+
+
+/**
+ * Wrapper class containing {@link com.google.template.soy.data.SoyTemplate} builders for each
+ * template in: result.soy.
+ */
+@javax.annotation.Generated("com.google.template.soy.SoyParseInfoGenerator")
+public final class ResultTemplates {
+
+ /** A map of filepath to symbol used for CSS resolution on server edit-refresh. */
+ private static final com.google.common.collect.ImmutableMap<java.lang.String, java.lang.String> __PROVIDED_CSS_MAP__ = com.google.common.collect.ImmutableMap.<java.lang.String, java.lang.String>of();
+
+ /** A list of provided symbols used for css validation on edit refresh. */
+ private static final com.google.common.collect.ImmutableList<java.lang.String> __PROVIDED_CSS__ = com.google.common.collect.ImmutableList.<java.lang.String>of();
+
+ /** Template params for com.google.phonenumbers.demo.singleNumber.singleNumber. */
+ public static final class SingleNumber extends com.google.template.soy.data.BaseSoyTemplateImpl {
+
+ private static final java.lang.String __NAME__ = "com.google.phonenumbers.demo.singleNumber.singleNumber";
+
+ /** Wraps a ListenableFuture<SingleNumber> as a SoyTemplate.AsyncWrapper<SingleNumber> */
+ public static com.google.template.soy.data.SoyTemplate.AsyncWrapper<SingleNumber> wrapFuture(com.google.common.util.concurrent.ListenableFuture<SingleNumber> paramsFuture) {
+ return new com.google.template.soy.data.SoyTemplate.AsyncWrapper<>(__NAME__, paramsFuture);
+ }
+
+ private SingleNumber(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ super(data);
+ }
+
+ @java.lang.Override
+ public final java.lang.String getTemplateName() {
+ return __NAME__;
+ }
+
+ /** Creates a new Builder instance. */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /** {@param phoneNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ PHONE_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "phoneNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param defaultCountry} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ DEFAULT_COUNTRY =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "defaultCountry",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param geocodingLocale} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ GEOCODING_LOCALE =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "geocodingLocale",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param countryCode} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Long>
+ COUNTRY_CODE =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "countryCode",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Long.class));
+
+ /** {@param nationalNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Long>
+ NATIONAL_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "nationalNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Long.class));
+
+ /** {@param extension} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ EXTENSION =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "extension",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param countryCodeSource} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ COUNTRY_CODE_SOURCE =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "countryCodeSource",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param italianLeadingZero} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ ITALIAN_LEADING_ZERO =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "italianLeadingZero",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param rawInput} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ RAW_INPUT =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "rawInput",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param isPossibleNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_POSSIBLE_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isPossibleNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param isValidNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_VALID_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isValidNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param isValidNumberForRegion} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_VALID_NUMBER_FOR_REGION =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isValidNumberForRegion",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param phoneNumberRegion} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ PHONE_NUMBER_REGION =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "phoneNumberRegion",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param numberType} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ NUMBER_TYPE =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "numberType",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param validationResult} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ VALIDATION_RESULT =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "validationResult",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param isPossibleShortNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_POSSIBLE_SHORT_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isPossibleShortNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param isValidShortNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_VALID_SHORT_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isValidShortNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param isPossibleShortNumberForRegion} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_POSSIBLE_SHORT_NUMBER_FOR_REGION =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isPossibleShortNumberForRegion",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param isValidShortNumberForRegion} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Boolean>
+ IS_VALID_SHORT_NUMBER_FOR_REGION =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "isValidShortNumberForRegion",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Boolean.class));
+
+ /** {@param e164Format} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ E_164_FORMAT =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "e164Format",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param originalFormat} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ ORIGINAL_FORMAT =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "originalFormat",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param nationalFormat} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ NATIONAL_FORMAT =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "nationalFormat",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param internationalFormat} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ INTERNATIONAL_FORMAT =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "internationalFormat",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param outOfCountryFormatFromUs} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ OUT_OF_COUNTRY_FORMAT_FROM_US =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "outOfCountryFormatFromUs",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param outOfCountryFormatFromCh} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ OUT_OF_COUNTRY_FORMAT_FROM_CH =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "outOfCountryFormatFromCh",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param rows} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Iterable<? extends java.util.Collection<java.lang.String>>>
+ ROWS =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "rows",
+ /* required= */ true,
+ new com.google.common.reflect.TypeToken<java.lang.Iterable<? extends java.util.Collection<java.lang.String>>>() {});
+
+ /** {@param descriptionForNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ DESCRIPTION_FOR_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "descriptionForNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param timeZonesForNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ TIME_ZONES_FOR_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "timeZonesForNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param nameForNumber} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ NAME_FOR_NUMBER =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "nameForNumber",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param newIssueLink} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ NEW_ISSUE_LINK =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "newIssueLink",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@param guidelinesLink} */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.String>
+ GUIDELINES_LINK =
+ com.google.template.soy.data.SoyTemplateParam.standard(
+ "guidelinesLink",
+ /* required= */ true,
+ com.google.common.reflect.TypeToken.of(java.lang.String.class));
+
+ /** {@inject csp_style_nonce} Created by ContentSecurityPolicyNonceInjectionPass. */
+ public static final com.google.template.soy.data.SoyTemplateParam<java.lang.Object>
+ CSP_STYLE_NONCE =
+ com.google.template.soy.data.SoyTemplateParam.injected(
+ "csp_style_nonce",
+ /* required= */ false,
+ com.google.common.reflect.TypeToken.of(java.lang.Object.class));
+
+ private static final com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> __PARAMS__ = com.google.common.collect.ImmutableSet.of(
+ PHONE_NUMBER,
+ DEFAULT_COUNTRY,
+ GEOCODING_LOCALE,
+ COUNTRY_CODE,
+ NATIONAL_NUMBER,
+ EXTENSION,
+ COUNTRY_CODE_SOURCE,
+ ITALIAN_LEADING_ZERO,
+ RAW_INPUT,
+ IS_POSSIBLE_NUMBER,
+ IS_VALID_NUMBER,
+ IS_VALID_NUMBER_FOR_REGION,
+ PHONE_NUMBER_REGION,
+ NUMBER_TYPE,
+ VALIDATION_RESULT,
+ IS_POSSIBLE_SHORT_NUMBER,
+ IS_VALID_SHORT_NUMBER,
+ IS_POSSIBLE_SHORT_NUMBER_FOR_REGION,
+ IS_VALID_SHORT_NUMBER_FOR_REGION,
+ E_164_FORMAT,
+ ORIGINAL_FORMAT,
+ NATIONAL_FORMAT,
+ INTERNATIONAL_FORMAT,
+ OUT_OF_COUNTRY_FORMAT_FROM_US,
+ OUT_OF_COUNTRY_FORMAT_FROM_CH,
+ ROWS,
+ DESCRIPTION_FOR_NUMBER,
+ TIME_ZONES_FOR_NUMBER,
+ NAME_FOR_NUMBER,
+ NEW_ISSUE_LINK,
+ GUIDELINES_LINK);
+
+ public static final class Builder extends com.google.template.soy.data.BaseSoyTemplateImpl.AbstractBuilder<Builder, SingleNumber> {
+
+ private Builder() {
+ super(31);
+ }
+
+ @java.lang.Override
+ protected com.google.common.collect.ImmutableSet<com.google.template.soy.data.SoyTemplateParam<?>> allParams() {
+ return __PARAMS__;
+ }
+
+ @java.lang.Override
+ protected SingleNumber buildInternal(com.google.common.collect.ImmutableMap<java.lang.String, com.google.template.soy.data.SoyValueProvider> data) {
+ return new SingleNumber(data);
+ }
+
+ /** Sets phoneNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setPhoneNumber(java.lang.String value) {
+ return setParamInternal(PHONE_NUMBER, asString(value));
+ }
+
+ /** Future compatible version of {@link #setPhoneNumber(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setPhoneNumberFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(PHONE_NUMBER, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets defaultCountry. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setDefaultCountry(java.lang.String value) {
+ return setParamInternal(DEFAULT_COUNTRY, asString(value));
+ }
+
+ /** Future compatible version of {@link #setDefaultCountry(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setDefaultCountryFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(DEFAULT_COUNTRY, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets geocodingLocale. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setGeocodingLocale(java.lang.String value) {
+ return setParamInternal(GEOCODING_LOCALE, asString(value));
+ }
+
+ /** Future compatible version of {@link #setGeocodingLocale(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setGeocodingLocaleFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(GEOCODING_LOCALE, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets countryCode. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setCountryCode(long value) {
+ return setParamInternal(COUNTRY_CODE, asInt(value));
+ }
+
+ /** Future compatible version of {@link #setCountryCode(long)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setCountryCodeFuture(java.util.concurrent.Future<? extends java.lang.Number> future) {
+ return setParamInternal(COUNTRY_CODE, asFuture(future, AbstractBuilder::asBoxedInt));
+ }
+
+ /** Sets nationalNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNationalNumber(long value) {
+ return setParamInternal(NATIONAL_NUMBER, asInt(value));
+ }
+
+ /** Future compatible version of {@link #setNationalNumber(long)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNationalNumberFuture(java.util.concurrent.Future<? extends java.lang.Number> future) {
+ return setParamInternal(NATIONAL_NUMBER, asFuture(future, AbstractBuilder::asBoxedInt));
+ }
+
+ /** Sets extension. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setExtension(java.lang.String value) {
+ return setParamInternal(EXTENSION, asString(value));
+ }
+
+ /** Future compatible version of {@link #setExtension(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setExtensionFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(EXTENSION, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets countryCodeSource. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setCountryCodeSource(java.lang.String value) {
+ return setParamInternal(COUNTRY_CODE_SOURCE, asString(value));
+ }
+
+ /** Future compatible version of {@link #setCountryCodeSource(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setCountryCodeSourceFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(COUNTRY_CODE_SOURCE, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets italianLeadingZero. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setItalianLeadingZero(boolean value) {
+ return setParamInternal(ITALIAN_LEADING_ZERO, asBool(value));
+ }
+
+ /** Future compatible version of {@link #setItalianLeadingZero(boolean)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setItalianLeadingZeroFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(ITALIAN_LEADING_ZERO, asFuture(future, AbstractBuilder::asBool));
+ }
+
+ /** Sets rawInput. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setRawInput(java.lang.String value) {
+ return setParamInternal(RAW_INPUT, asString(value));
+ }
+
+ /** Future compatible version of {@link #setRawInput(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setRawInputFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(RAW_INPUT, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets isPossibleNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsPossibleNumber(boolean value) {
+ return setParamInternal(IS_POSSIBLE_NUMBER, asBool(value));
+ }
+
+ /** Future compatible version of {@link #setIsPossibleNumber(boolean)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsPossibleNumberFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_POSSIBLE_NUMBER, asFuture(future, AbstractBuilder::asBool));
+ }
+
+ /** Sets isValidNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidNumber(boolean value) {
+ return setParamInternal(IS_VALID_NUMBER, asBool(value));
+ }
+
+ /** Future compatible version of {@link #setIsValidNumber(boolean)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidNumberFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_VALID_NUMBER, asFuture(future, AbstractBuilder::asBool));
+ }
+
+ /** Sets isValidNumberForRegion. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidNumberForRegion(@javax.annotation.Nullable java.lang.Boolean value) {
+ return setParamInternal(IS_VALID_NUMBER_FOR_REGION, asNullableBool(value));
+ }
+
+ /** Future compatible version of {@link #setIsValidNumberForRegion(java.lang.Boolean)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidNumberForRegionFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_VALID_NUMBER_FOR_REGION, asFuture(future, AbstractBuilder::asNullableBool));
+ }
+
+ /** Sets phoneNumberRegion. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setPhoneNumberRegion(@javax.annotation.Nullable java.lang.String value) {
+ return setParamInternal(PHONE_NUMBER_REGION, asNullableString(value));
+ }
+
+ /** Future compatible version of {@link #setPhoneNumberRegion(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setPhoneNumberRegionFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(PHONE_NUMBER_REGION, asFuture(future, AbstractBuilder::asNullableString));
+ }
+
+ /** Sets numberType. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNumberType(java.lang.String value) {
+ return setParamInternal(NUMBER_TYPE, asString(value));
+ }
+
+ /** Future compatible version of {@link #setNumberType(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNumberTypeFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(NUMBER_TYPE, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets validationResult. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setValidationResult(java.lang.String value) {
+ return setParamInternal(VALIDATION_RESULT, asString(value));
+ }
+
+ /** Future compatible version of {@link #setValidationResult(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setValidationResultFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(VALIDATION_RESULT, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets isPossibleShortNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsPossibleShortNumber(boolean value) {
+ return setParamInternal(IS_POSSIBLE_SHORT_NUMBER, asBool(value));
+ }
+
+ /** Future compatible version of {@link #setIsPossibleShortNumber(boolean)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsPossibleShortNumberFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_POSSIBLE_SHORT_NUMBER, asFuture(future, AbstractBuilder::asBool));
+ }
+
+ /** Sets isValidShortNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidShortNumber(boolean value) {
+ return setParamInternal(IS_VALID_SHORT_NUMBER, asBool(value));
+ }
+
+ /** Future compatible version of {@link #setIsValidShortNumber(boolean)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidShortNumberFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_VALID_SHORT_NUMBER, asFuture(future, AbstractBuilder::asBool));
+ }
+
+ /** Sets isPossibleShortNumberForRegion. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsPossibleShortNumberForRegion(@javax.annotation.Nullable java.lang.Boolean value) {
+ return setParamInternal(IS_POSSIBLE_SHORT_NUMBER_FOR_REGION, asNullableBool(value));
+ }
+
+ /**
+ * Future compatible version of {@link
+ * #setIsPossibleShortNumberForRegion(java.lang.Boolean)}.
+ */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsPossibleShortNumberForRegionFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_POSSIBLE_SHORT_NUMBER_FOR_REGION, asFuture(future, AbstractBuilder::asNullableBool));
+ }
+
+ /** Sets isValidShortNumberForRegion. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidShortNumberForRegion(@javax.annotation.Nullable java.lang.Boolean value) {
+ return setParamInternal(IS_VALID_SHORT_NUMBER_FOR_REGION, asNullableBool(value));
+ }
+
+ /**
+ * Future compatible version of {@link
+ * #setIsValidShortNumberForRegion(java.lang.Boolean)}.
+ */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setIsValidShortNumberForRegionFuture(java.util.concurrent.Future<java.lang.Boolean> future) {
+ return setParamInternal(IS_VALID_SHORT_NUMBER_FOR_REGION, asFuture(future, AbstractBuilder::asNullableBool));
+ }
+
+ /** Sets e164Format. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setE164Format(java.lang.String value) {
+ return setParamInternal(E_164_FORMAT, asString(value));
+ }
+
+ /** Future compatible version of {@link #setE164Format(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setE164FormatFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(E_164_FORMAT, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets originalFormat. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setOriginalFormat(java.lang.String value) {
+ return setParamInternal(ORIGINAL_FORMAT, asString(value));
+ }
+
+ /** Future compatible version of {@link #setOriginalFormat(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setOriginalFormatFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(ORIGINAL_FORMAT, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets nationalFormat. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNationalFormat(java.lang.String value) {
+ return setParamInternal(NATIONAL_FORMAT, asString(value));
+ }
+
+ /** Future compatible version of {@link #setNationalFormat(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNationalFormatFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(NATIONAL_FORMAT, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets internationalFormat. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setInternationalFormat(java.lang.String value) {
+ return setParamInternal(INTERNATIONAL_FORMAT, asString(value));
+ }
+
+ /** Future compatible version of {@link #setInternationalFormat(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setInternationalFormatFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(INTERNATIONAL_FORMAT, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets outOfCountryFormatFromUs. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setOutOfCountryFormatFromUs(java.lang.String value) {
+ return setParamInternal(OUT_OF_COUNTRY_FORMAT_FROM_US, asString(value));
+ }
+
+ /** Future compatible version of {@link #setOutOfCountryFormatFromUs(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setOutOfCountryFormatFromUsFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(OUT_OF_COUNTRY_FORMAT_FROM_US, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets outOfCountryFormatFromCh. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setOutOfCountryFormatFromCh(java.lang.String value) {
+ return setParamInternal(OUT_OF_COUNTRY_FORMAT_FROM_CH, asString(value));
+ }
+
+ /** Future compatible version of {@link #setOutOfCountryFormatFromCh(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setOutOfCountryFormatFromChFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(OUT_OF_COUNTRY_FORMAT_FROM_CH, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets rows. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setRows(java.lang.Iterable<? extends java.util.Collection<java.lang.String>> value) {
+ return setParamInternal(ROWS, asList(value, v -> asList(v, AbstractBuilder::asString)));
+ }
+
+ /** Future compatible version of {@link #setRows(java.lang.Iterable>)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setRowsFuture(java.util.concurrent.Future<? extends java.util.Collection<? extends java.util.Collection<java.lang.String>>> future) {
+ return setParamInternal(ROWS, asFuture(future, v -> asList(v, v1 -> asList(v1, AbstractBuilder::asString))));
+ }
+
+ /** Sets descriptionForNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setDescriptionForNumber(java.lang.String value) {
+ return setParamInternal(DESCRIPTION_FOR_NUMBER, asString(value));
+ }
+
+ /** Future compatible version of {@link #setDescriptionForNumber(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setDescriptionForNumberFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(DESCRIPTION_FOR_NUMBER, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets timeZonesForNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setTimeZonesForNumber(java.lang.String value) {
+ return setParamInternal(TIME_ZONES_FOR_NUMBER, asString(value));
+ }
+
+ /** Future compatible version of {@link #setTimeZonesForNumber(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setTimeZonesForNumberFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(TIME_ZONES_FOR_NUMBER, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets nameForNumber. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNameForNumber(java.lang.String value) {
+ return setParamInternal(NAME_FOR_NUMBER, asString(value));
+ }
+
+ /** Future compatible version of {@link #setNameForNumber(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNameForNumberFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(NAME_FOR_NUMBER, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets newIssueLink. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNewIssueLink(java.lang.String value) {
+ return setParamInternal(NEW_ISSUE_LINK, asString(value));
+ }
+
+ /** Future compatible version of {@link #setNewIssueLink(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setNewIssueLinkFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(NEW_ISSUE_LINK, asFuture(future, AbstractBuilder::asString));
+ }
+
+ /** Sets guidelinesLink. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setGuidelinesLink(java.lang.String value) {
+ return setParamInternal(GUIDELINES_LINK, asString(value));
+ }
+
+ /** Future compatible version of {@link #setGuidelinesLink(java.lang.String)}. */
+ @com.google.errorprone.annotations.CanIgnoreReturnValue
+ public Builder setGuidelinesLinkFuture(java.util.concurrent.Future<java.lang.String> future) {
+ return setParamInternal(GUIDELINES_LINK, asFuture(future, AbstractBuilder::asString));
+ }
+
+ }
+ }
+
+}
diff --git a/demo/src/main/webapp/phonenumberparser.jsp b/demo/src/main/resources/com/google/phonenumbers/demo/input_form.soy
index 4e7b7f2f..cbaf91b0 100644
--- a/demo/src/main/webapp/phonenumberparser.jsp
+++ b/demo/src/main/resources/com/google/phonenumbers/demo/input_form.soy
@@ -1,15 +1,18 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+{namespace com.google.phonenumbers.demo.inputForm}
+{template inputForm}
+{@param welcomeTitle: string}
<html>
<head>
<link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
+ <title>{$welcomeTitle}</title>
</head>
<body>
- <h2>Phone Number Parser Demo</h2>
+ <h2>{$welcomeTitle}</h2>
<form action="/phonenumberparser" method="post" accept-charset="UTF-8"
enctype="multipart/form-data">
<h2>Step 1</h2>
<p>
- Specify a Phone Number: <input type="text" name="phoneNumber" size="25">
+ Specify a Phone Number: <input type="text" name="phoneNumber" size="25" value="">
<p>
<b>Or</b> Upload a file containing phone numbers separated by comma.
<p>
@@ -37,3 +40,4 @@
</form>
</body>
</html>
+{/template}
diff --git a/demo/src/main/resources/com/google/phonenumbers/demo/result.soy b/demo/src/main/resources/com/google/phonenumbers/demo/result.soy
new file mode 100644
index 00000000..b448bf21
--- /dev/null
+++ b/demo/src/main/resources/com/google/phonenumbers/demo/result.soy
@@ -0,0 +1,253 @@
+{namespace com.google.phonenumbers.demo.singleNumber}
+{template singleNumber}
+{@param phoneNumber: string}
+{@param defaultCountry: string}
+{@param geocodingLocale: string}
+
+{@param countryCode: int}
+{@param nationalNumber: int}
+{@param extension: string}
+{@param countryCodeSource: string}
+{@param italianLeadingZero: bool}
+{@param rawInput: string}
+
+{@param isPossibleNumber: bool}
+{@param isValidNumber: bool}
+{@param isValidNumberForRegion: bool|null}
+{@param phoneNumberRegion: string|null}
+{@param numberType: string}
+{@param validationResult: string}
+
+{@param isPossibleShortNumber: bool}
+{@param isValidShortNumber: bool}
+{@param isPossibleShortNumberForRegion: bool|null}
+{@param isValidShortNumberForRegion: bool|null}
+
+{@param e164Format: string}
+{@param originalFormat: string}
+{@param nationalFormat: string}
+{@param internationalFormat: string}
+{@param outOfCountryFormatFromUs: string}
+{@param outOfCountryFormatFromCh: string}
+
+{@param rows: list<list<string>>}
+
+{@param descriptionForNumber: string}
+{@param timeZonesForNumber: string}
+{@param nameForNumber: string}
+{@param newIssueLink: string}
+{@param guidelinesLink: string}
+
+
+<!DOCTYPE html>
+<HTML lang="en">
+<HEAD>
+ <LINK type="text/css" rel="stylesheet" href="/stylesheets/main.css"/>
+ <title>Results for {$phoneNumber}</title>
+</HEAD>
+<BODY>
+<p>Phone Number entered: {$phoneNumber}</p>
+<p>Default Country entered: {$defaultCountry}</p>
+<p>Language entered: {$geocodingLocale}</p>
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>Parsing Result (parseAndKeepRawInput())</TD>
+ </TR>
+ <TR>
+ <TH>country_code</TH>
+ <TD>{$countryCode}</TD>
+ </TR>
+ <TR>
+ <TH>national_number</TH>
+ <TD>{$nationalNumber}</TD>
+ </TR>
+ <TR>
+ <TH>extension</TH>
+ <TD>{$extension}</TD>
+ </TR>
+ <TR>
+ <TH>country_code_source</TH>
+ <TD>{$countryCodeSource}</TD>
+ </TR>
+ <TR>
+ <TH>italian_leading_zero</TH>
+ <TD>{$italianLeadingZero}</TD>
+ </TR>
+ <TR>
+ <TH>raw_input</TH>
+ <TD>{$rawInput}</TD>
+ </TR>
+ </TABLE>
+</DIV>
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>Validation Results</TD>
+ </TR>
+ <TR>
+ <TH>Result from isPossibleNumber()</TH>
+ <TD>{$isPossibleNumber}</TD>
+ </TR>
+{if $isPossibleNumber}
+ {if $validationResult == "IS_POSSIBLE_LOCAL_ONLY"}
+ <TR>
+ <TH>Result from isPossibleNumberWithReason()</TH>
+ <TD>{$validationResult}</TD>
+ </TR>
+ <TR>
+ <TD colspan=2>Number is considered invalid as it is not a possible national number.</TD>
+ </TR>
+ {else}
+ <TR>
+ <TH>Result from isValidNumber()</TH>
+ <TD>{$isValidNumber}</TD>
+ </TR>
+ {if $isValidNumberForRegion != null}
+ <TR>
+ <TH>Result from isValidNumberForRegion()</TH>
+ <TD>{$isValidNumberForRegion}</TD>
+ </TR>
+ {/if}
+ <TR>
+ <TH>Phone Number region</TH>
+ <TD>{$phoneNumberRegion ?: ""}</TD>
+ </TR>
+ <TR>
+ <TH>Result from getNumberType()</TH>
+ <TD>{$numberType}</TD>
+ </TR>
+ {/if}
+{else}
+ <TR>
+ <TH>Result from isPossibleNumberWithReason()</TH>
+ <TD>{$validationResult}</TD>
+ </TR>
+ <TR>
+ <TD colspan=2>Note: Numbers that are not possible have type UNKNOWN, an unknown region, and are considered invalid.</TD>
+ </TR>
+{/if}
+ </TABLE>
+</DIV>
+
+{if not $isValidNumber}
+<DIV>
+ <TABLE border=1>
+ <TR><TD colspan=2>Short Number Results</TD></TR>
+ <TR>
+ <TH>Result from isPossibleShortNumber()</TH>
+ <TD>{$isPossibleShortNumber}</TD>
+ </TR>
+ {if $isPossibleShortNumber}
+ <TR>
+ <TH>Result from isValidShortNumber()</TH>
+ <TD>{$isValidShortNumber}</TD>
+ </TR>
+ {/if}
+ {if $isPossibleShortNumberForRegion != null}
+ <TR>
+ <TH>Result from isPossibleShortNumberForRegion()</TH>
+ <TD>{$isPossibleShortNumberForRegion}</TD>
+ </TR>
+ {if $isPossibleShortNumberForRegion and $isValidShortNumberForRegion != null}
+ <TR>
+ <TH>Result from isValidShortNumberForRegion()</TH>
+ <TD>{$isValidShortNumberForRegion}</TD>
+ </TR>
+ {/if}
+ {/if}
+ </TABLE>
+</DIV>
+{/if}
+
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>Formatting Results</TD>
+ </TR>
+ <TR>
+ <TH>E164 format</TH>
+ <TD>{$e164Format}</TD>
+ </TR>
+ <TR>
+ <TH>Original format</TH>
+ <TD>{$originalFormat}</TD>
+ </TR>
+ <TR>
+ <TH>National format</TH>
+ <TD>{$nationalFormat}</TD>
+ </TR>
+ <TR>
+ <TH>International format</TH>
+ <TD>{$internationalFormat}</TD>
+ </TR>
+ <TR>
+ <TH>Out-of-country format from US</TH>
+ <TD>{$outOfCountryFormatFromUs}</TD>
+ </TR>
+ <TR>
+ <TH>Out-of-country format from CH</TH>
+ <TD>{$outOfCountryFormatFromCh}</TD>
+ </TR>
+ </TABLE>
+</DIV>
+
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>AsYouTypeFormatter Results</TD>
+ </TR>
+ {for $row in $rows}
+ <TR>
+ <TH>Char entered: '{$row[0]}' Output: "</TH>
+ <TD>{$row[1]}</TD>
+ </TR>
+ {/for}
+
+ </TABLE>
+</DIV>
+
+
+{if $isValidNumber}
+
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>PhoneNumberOfflineGeocoder Results</TD>
+ </TR>
+ <TR>
+ <TH>Location</TH>
+ <TD>{$descriptionForNumber}</TD>
+ </TR>
+ </TABLE>
+</DIV>
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>PhoneNumberToTimeZonesMapper Results</TD>
+ </TR>
+ <TR>
+ <TH>Time zone(s)</TH>
+ <TD>{$timeZonesForNumber}</TD>
+ </TR>
+ </TABLE>
+</DIV>
+ {if ['MOBILE', 'FIXED_LINE_OR_MOBILE', 'PAGER'].contains($numberType)}
+<DIV>
+ <TABLE border=1>
+ <TR>
+ <TD colspan=2>PhoneNumberToCarrierMapper Results</TD>
+ </TR>
+ <TR>
+ <TH>Carrier</TH>
+ <TD>{$nameForNumber}</TD>
+ </TR>
+ </TABLE>
+</DIV>
+ {/if}
+{/if}
+
+<b style="color:red">File an issue</b>: by clicking on <a target="_blank" href="{$newIssueLink}">this link</a>, I confirm that I have read the <a target="_blank" href="{$guidelinesLink}">contributor's guidelines</a>.
+</BODY>
+</HTML>
+{/template} \ No newline at end of file
diff --git a/demo/src/main/resources/com/google/phonenumbers/demo/result_error.soy b/demo/src/main/resources/com/google/phonenumbers/demo/result_error.soy
new file mode 100644
index 00000000..1f3c4007
--- /dev/null
+++ b/demo/src/main/resources/com/google/phonenumbers/demo/result_error.soy
@@ -0,0 +1,20 @@
+{namespace com.google.phonenumbers.demo.error}
+{template error}
+{@param phoneNumber: string}
+{@param defaultCountry: string}
+{@param geocodingLocale: string}
+{@param error: string}
+<!DOCTYPE html>
+<HTML lang="en">
+<HEAD>
+ <LINK type="text/css" rel="stylesheet" href="/stylesheets/main.css"/>
+ <title>Results for {$phoneNumber}</title>
+</HEAD>
+<BODY>
+<p>Phone Number entered: {$phoneNumber}</p>
+<p>Default Country entered: {$defaultCountry}</p>
+<p>Language entered: {$geocodingLocale}</p>
+<p>An error occurred while parsing the input: {$error}
+</BODY>
+</HTML>
+{/template} \ No newline at end of file
diff --git a/demo/src/main/resources/com/google/phonenumbers/demo/result_file.soy b/demo/src/main/resources/com/google/phonenumbers/demo/result_file.soy
new file mode 100644
index 00000000..fd921fe4
--- /dev/null
+++ b/demo/src/main/resources/com/google/phonenumbers/demo/result_file.soy
@@ -0,0 +1,44 @@
+{namespace com.google.phonenumbers.demo.file}
+{template file}
+ {@param rows: list<[id: int, numberStr: string, prettyFormat: string|null, internationalFormat: string|null, error: string|null]>}
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <link rel="stylesheet" href="/stylesheets/main.css" />
+ <title>Results generated from phone numbers in the file provided</title>
+</head>
+<body>
+
+<h2>Results generated from phone numbers in the file provided:</h2>
+
+<table>
+ <tr>
+ <th>Id</th>
+ <th>Raw phone number</th>
+ <th>Pretty formatting</th>
+ <th>International format</th>
+ </tr>
+ {for $row in $rows}
+ <tr>
+ <td>{$row.id}</td>
+ <td>{$row.numberStr}</td>
+ {if $row.error == null}
+ <td>{$row.prettyFormat}</td>
+ <td>{$row.internationalFormat}</td>
+ {else}
+ <td colspan=2>{$row.error}</td>
+ {/if}
+ </tr>
+ {ifempty}
+ <tr>
+ <td colspan=4>No data in file detected!</td>
+ </tr>
+ {/for}
+
+
+</table>
+
+</body>
+</html>
+{/template} \ No newline at end of file
diff --git a/demo/src/main/webapp/WEB-INF/web.xml b/demo/src/main/webapp/WEB-INF/web.xml
index 5a4ba5c9..9be0a5f5 100644
--- a/demo/src/main/webapp/WEB-INF/web.xml
+++ b/demo/src/main/webapp/WEB-INF/web.xml
@@ -1,18 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
+ version="2.5"
+ xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+ http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
+ <servlet-class>com.google.phonenumbers.demo.ResultServlet</servlet-class>
<servlet-name>PhoneNumberParser</servlet-name>
- <servlet-class>com.google.phonenumbers.PhoneNumberParserServlet</servlet-class>
+ </servlet>
+ <servlet>
+ <servlet-class>com.google.phonenumbers.demo.InputServlet</servlet-class>
+ <servlet-name>Input</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>PhoneNumberParser</servlet-name>
<url-pattern>/phonenumberparser</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>Input</servlet-name>
+ <url-pattern>/inputform</url-pattern>
+ </servlet-mapping>
<welcome-file-list>
- <welcome-file>phonenumberparser.jsp</welcome-file>
+ <welcome-file>Input</welcome-file>
</welcome-file-list>
</web-app>
diff --git a/geocoder/pom.xml b/geocoder/pom.xml
index a4af3846..e5605a34 100644
--- a/geocoder/pom.xml
+++ b/geocoder/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>geocoder</artifactId>
- <version>2.192</version>
+ <version>2.193</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</parent>
<build>
@@ -63,12 +63,12 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
- <version>2.192</version>
+ <version>2.193</version>
</dependency>
</dependencies>
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_en
index 21b5b826..b8ea3f25 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data b/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data
index 7dc0a48d..87d2dfbd 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data
+++ b/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data
Binary files differ
diff --git a/internal/prefixmapper/pom.xml b/internal/prefixmapper/pom.xml
index 7ddc8dc2..0da8125a 100644
--- a/internal/prefixmapper/pom.xml
+++ b/internal/prefixmapper/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
- <version>2.192</version>
+ <version>2.193</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -50,7 +50,7 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</dependency>
</dependencies>
diff --git a/libphonenumber/pom.xml b/libphonenumber/pom.xml
index d1b3d660..e3ff9d17 100644
--- a/libphonenumber/pom.xml
+++ b/libphonenumber/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
</parent>
<build>
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
index 09d12540..b8a5a3bc 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
index c91bbb61..d4b42bec 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
index 12d9f4a7..962b57fe 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
index f6d9e149..67602aa7 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
index c765fb03..137ac025 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
index 0393a859..de3c5b51 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 25cac90d..f3f50673 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
index 594de97c..73aa4eee 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
index 588e11e7..fbf89c72 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
index def0b3e5..7487bbc5 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
index 3e56482a..21e2cfe9 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
index 9cad69b6..fbf5e98d 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
Binary files differ
diff --git a/pom.xml b/pom.xml
index d93c37bf..b0601665 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.56</version>
+ <version>8.12.57</version>
<packaging>pom</packaging>
<url>https://github.com/google/libphonenumber/</url>
@@ -34,7 +34,7 @@
<connection>scm:git:https://github.com/google/libphonenumber.git</connection>
<developerConnection>scm:git:git@github.com:googlei18n/libphonenumber.git</developerConnection>
<url>https://github.com/google/libphonenumber/</url>
- <tag>v8.12.56</tag>
+ <tag>v8.12.57</tag>
</scm>
<properties>
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/229_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/229_en
index 21b5b826..b8ea3f25 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/229_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/229_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data b/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data
index 7dc0a48d..87d2dfbd 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
index 09d12540..b8a5a3bc 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
index c91bbb61..d4b42bec 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
index 12d9f4a7..962b57fe 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
index f6d9e149..67602aa7 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
index c765fb03..137ac025 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
index 0393a859..de3c5b51 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 25cac90d..f3f50673 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
index 594de97c..73aa4eee 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
index 588e11e7..fbf89c72 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
index def0b3e5..7487bbc5 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
index 3e56482a..21e2cfe9 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
index 9cad69b6..fbf5e98d 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
Binary files differ