Browse Source

Demo: update Java demo to include phone number geocoding.

pull/567/head
Shaopeng Jia 15 years ago
committed by Mihaela Rosca
parent
commit
13c78d3ca1
3 changed files with 48 additions and 5 deletions
  1. +27
    -5
      java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java
  2. +8
    -0
      java/demo/war/phonenumberparser.jsp
  3. +13
    -0
      java/release_notes.txt

+ 27
- 5
java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java View File

@ -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());
}


+ 8
- 0
java/demo/war/phonenumberparser.jsp View File

@ -18,6 +18,14 @@
<input type="text" name="defaultCountry" size="2">
(<a href="http://www.iso.org/iso/english_country_names_and_code_elements">
ISO 3166-1 two-letter country code</a>)
<h2>Step 3</h2>
<p>
Specify a locale for phone number geocoding (Optional, defaults to en):
<p>
<input type="text" name="languageCode" size="2">-<input type="text" name="regionCode"
size="2">
(<a href="http://download.oracle.com/javase/6/docs/api/java/util/Locale.html">A valid ISO
Language Code and optionally a region to more precisely define the language.</a>)
<p></p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">


+ 13
- 0
java/release_notes.txt View File

@ -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


Loading…
Cancel
Save