diff --git a/java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java b/java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java index bf9b2acde..e76536677 100644 --- a/java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java +++ b/java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java @@ -20,6 +20,7 @@ package com.google.phonenumbers; import com.google.i18n.phonenumbers.AsYouTypeFormatter; import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberOfflineGeocoder; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; @@ -33,6 +34,7 @@ import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; +import java.util.Locale; import java.util.StringTokenizer; import javax.servlet.http.HttpServlet; @@ -51,6 +53,8 @@ public class PhoneNumberParserServlet extends HttpServlet { 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); @@ -60,10 +64,15 @@ public class PhoneNumberParserServlet extends HttpServlet { FileItemStream item = iterator.next(); InputStream in = item.openStream(); if (item.isFormField()) { - if (item.getFieldName().equals("phoneNumber")) { + String fieldName = item.getFieldName(); + if (fieldName.equals("phoneNumber")) { phoneNumber = Streams.asString(in, "UTF-8"); - } else if (item.getFieldName().equals("defaultCountry")) { + } else if (fieldName.equals("defaultCountry")) { defaultCountry = Streams.asString(in); + } else if (fieldName.equals("languageCode")) { + languageCode = Streams.asString(in); + } else if (fieldName.equals("regionCode")) { + regionCode = Streams.asString(in); } } else { try { @@ -79,10 +88,14 @@ public class PhoneNumberParserServlet extends HttpServlet { StringBuilder output; if (fileContents.length() == 0) { - output = getOutputForSingleNumber(phoneNumber, defaultCountry); + output = getOutputForSingleNumber(phoneNumber, defaultCountry, languageCode, regionCode); resp.setContentType("text/plain"); + resp.setCharacterEncoding("UTF-8"); resp.getWriter().println("Phone Number entered: " + phoneNumber); resp.getWriter().println("defaultCountry entered: " + defaultCountry); + resp.getWriter().println( + "Language entered: " + languageCode + + (regionCode.length() == 0 ? "" : " (" + regionCode + ")")); } else { output = getOutputForFile(defaultCountry, fileContents); resp.setContentType("text/html"); @@ -129,7 +142,13 @@ public class PhoneNumberParserServlet extends HttpServlet { return output; } - private StringBuilder getOutputForSingleNumber(String phoneNumber, String defaultCountry) { + /** + * The defaultCountry here is used for parsing phoneNumber. The languageCode and regionCode are + * used to specify the language used for displaying the area descriptions generated from phone + * number geocoding. + */ + private StringBuilder getOutputForSingleNumber( + String phoneNumber, String defaultCountry, String languageCode, String regionCode) { StringBuilder output = new StringBuilder(); try { PhoneNumber number = phoneUtil.parseAndKeepRawInput(phoneNumber, defaultCountry); @@ -172,7 +191,10 @@ public class PhoneNumberParserServlet extends HttpServlet { output.append("\nChar entered: ").append(inputChar).append(" Output: ") .append(formatter.inputDigit(inputChar)); } - output.append("\n\n"); + output.append("\n\n****PhoneNumberOfflineGeocoder Results****"); + output.append("\n" + + PhoneNumberOfflineGeocoder.getInstance().getDescriptionForNumber( + number, new Locale(languageCode, regionCode))); } catch (NumberParseException e) { output.append(e.toString()); } diff --git a/java/demo/war/phonenumberparser.jsp b/java/demo/war/phonenumberparser.jsp index 4860f2498..e10d43f3a 100644 --- a/java/demo/war/phonenumberparser.jsp +++ b/java/demo/war/phonenumberparser.jsp @@ -18,6 +18,14 @@ ( ISO 3166-1 two-letter country code) +

Step 3

+

+ Specify a locale for phone number geocoding (Optional, defaults to en): +

+ - + (A valid ISO + Language Code and optionally a region to more precisely define the language.)

diff --git a/java/release_notes.txt b/java/release_notes.txt index 7f80b915d..14e57369d 100644 --- a/java/release_notes.txt +++ b/java/release_notes.txt @@ -1,3 +1,16 @@ +June 14th, 2011 +* Code changes + - Added PhoneNumberOfflineGeocoder, supporting classes and their unittests. + - Added GenerateAreaCodeData to transform phone number area mapping files from text files to binary + files. + - Modified PhoneNumberParserServlet.java and phonenumberparser.jsp to incorporate + PhoneNumberOfflineGeocoding in the appengine demo. + +* Metadata changes + - Added phone number area mapping files for NANPA countries and GB in English, NL in Dutch, AR, CL + and ES in Spanish, AT and DE in German, SE in Swedish, BR in Portuguese, KR in English, Korean, + Simplified and Traditional Chinese, and CN in Simplified Chinese. + June 10th, 2011 * Code changes: - Fixes for PhoneNumberMatcher to be more restrictive in valid mode and not match numbers