/* * Copyright (C) 2011 Google Inc. * * 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 com.google.i18n.phonenumbers.AsYouTypeFormatter; 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 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 java.io.IOException; import java.io.InputStream; import java.util.StringTokenizer; 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 PhoneNumberParserServlet extends HttpServlet { private PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { String phoneNumber = null; String defaultCountry = null; 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()) { if (item.getFieldName().equals("phoneNumber")) { phoneNumber = Streams.asString(in, "UTF-8"); } else if (item.getFieldName().equals("defaultCountry")) { defaultCountry = Streams.asString(in); } } else { try { fileContents = IOUtils.toString(in); } finally { IOUtils.closeQuietly(in); } } } } catch (FileUploadException e1) { e1.printStackTrace(); } StringBuffer output; if (fileContents.length() == 0) { output = getOutputForSingleNumber(phoneNumber, defaultCountry); resp.setContentType("text/plain"); resp.getWriter().println("Phone Number entered: " + phoneNumber); resp.getWriter().println("defaultCountry entered: " + defaultCountry); } else { output = getOutputForFile(defaultCountry, fileContents); resp.setContentType("text/html"); } resp.getWriter().println(output); } private StringBuffer getOutputForFile(String defaultCountry, String fileContents) { StringBuffer output = new StringBuffer(); output.append("
| ID | "); output.append("Raw phone number | "); output.append("Pretty formatting | "); output.append("International format | "); int phoneNumberId = 0; StringTokenizer tokenizer = new StringTokenizer(fileContents, ","); while (tokenizer.hasMoreTokens()) { String numberStr = tokenizer.nextToken(); phoneNumberId++; output.append("||
|---|---|---|---|---|---|
| ").append(phoneNumberId).append(" | \n"); output.append("").append(numberStr).append(" | \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("").append(prettyFormat).append(" | \n"); output.append("").append(internationalFormat).append(" | \n"); } catch (NumberParseException e) { output.append("").append(e.toString()).append(" | \n"); } output.append("|