package org.ifsoft.openlink.view;
import java.io.IOException;
import java.util.Collection;
import java.util.Locale;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import javax.servlet.annotation.*;
import org.slf4j.*;
import org.slf4j.Logger;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.util.JiveGlobals;
import org.ifsoft.openlink.OpenlinkConstants.Properties;
import org.ifsoft.openlink.component.*;
@WebServlet(value="/checkNumberFormat", name="checkNumberFormat") public class CheckNumberFormat extends HttpServlet{
private static final Logger Log = LoggerFactory.getLogger(CheckNumberFormat.class);
public void init(ServletConfig servletConfig) throws ServletException
{
super.init(servletConfig);
}
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-Type", "text/html");
response.setHeader("Connection", "close");
ServletOutputStream out = response.getOutputStream();
String pbxCountryCode = Locale.getDefault().getCountry();
String number = "";
String pbxAccessDigits = "";
String pbxNumberLength = "";
String internalPrefix = "";
String pbxAreaCode = "";
String pbxTrunkCode = "";
String phoneNumberLength = "";
String formattedNumber = "";
String formattedCanonicalNumber = "";
String error = "";
String siteID = "";
String useIDD = "yes";
String siteData = "";
number = request.getParameter("num");
pbxCountryCode = request.getParameter("pbxCountryCode");
pbxAccessDigits = request.getParameter("pbxAccessDigits");
pbxNumberLength = request.getParameter("pbxNumberLength");
pbxAreaCode = request.getParameter("pbxAreaCode");
internalPrefix = request.getParameter("pbxNumberPrefix");
pbxTrunkCode = request.getParameter("pbxTrunkCode");
phoneNumberLength = request.getParameter("phoneNumberLength");
useIDD = request.getParameter("useIDD");
siteData = request.getParameter("site");
if(null == pbxCountryCode)
pbxCountryCode = Locale.getDefault().getCountry();
if(null == pbxAccessDigits)
pbxAccessDigits = "";
if(null == pbxNumberLength)
pbxNumberLength = "";
if(null == pbxAreaCode)
pbxAreaCode = "";
if(null == number)
number = "";
if(null == internalPrefix)
internalPrefix = "";
if(null == useIDD)
useIDD = "no";
else
useIDD = "yes";
if(null == siteData)
siteData = "";
if(null == pbxTrunkCode)
pbxTrunkCode = "";
if(null == phoneNumberLength)
phoneNumberLength = "";
if(null != number && !"".equalsIgnoreCase(number)) {
try {
// Ensure Area Code is a number
if(pbxAreaCode.length() > 0)
Integer.parseInt(pbxAreaCode);
TelephoneNumberFormatter telnumFormatter = new TelephoneNumberFormatter(new Locale("en", pbxCountryCode));
telnumFormatter.setExtensionNumberLength(Integer.parseInt(pbxNumberLength));
telnumFormatter.setOutsideAccess(pbxAccessDigits);
telnumFormatter.setAreaCode(pbxTrunkCode);
telnumFormatter.setRealAreaCode(pbxAreaCode);
telnumFormatter.setPhoneNumberLength(Long.parseLong(phoneNumberLength));
telnumFormatter.setInternalPrefixes(internalPrefix);
telnumFormatter.setUseIDDFormat(useIDD);
telnumFormatter.setLocale(new Locale("en", pbxCountryCode));
String internalNum = telnumFormatter.isInternalRoutingPrefix(number);
if(null != internalNum) {
formattedCanonicalNumber = formattedNumber = internalNum;
} else {
formattedCanonicalNumber = telnumFormatter.formatCanonicalNumber(number);
formattedNumber = telnumFormatter.formatDialableNumber(formattedCanonicalNumber);
}
} catch (TelephoneNumberFormatException e) {
error = e.getMessage();
Log.error("Caught exception while formatting number", e);
} catch(NumberFormatException e){
error = e.getMessage() + " Provide numeric value for Area Code / Phone Number length";
}
catch (Exception e) {
error = e.toString();
Log.error("caught exception while formatting number", e);
}
}
out.println("");
out.println("<html>");
out.println(" <head>");
out.println(" <title>Number Formatting</title>");
out.println(" <meta name=\"pageID\" content=\"TRADERLYNC-CHECK-NUMBER-FORMAT\"/>");
out.println(" <script type=\"text/javascript\">");
out.println(" function populateFields() {");
out.println(" var siteId = document.getElementById(\"site\");");
out.println(" var siteData = siteId.options[siteId.selectedIndex].value;");
out.println(" if(siteData != \"none\") {");
out.println(" var daillingData = siteData.split(\":\");");
out.println(" document.getElementById(\"pbxCountryCode\").value=daillingData[0];");
out.println(" document.getElementById(\"pbxAccessDigits\").value=daillingData[1];");
out.println(" document.getElementById(\"pbxNumberLength\").value=daillingData[2];");
out.println(" document.getElementById(\"pbxNumberPrefix\").value=daillingData[3];");
out.println(" document.getElementById(\"pbxAreaCode\").value=daillingData[4];");
out.println(" document.getElementById(\"pbxTrunkCode\").value=daillingData[6];");
out.println(" document.getElementById(\"phoneNumberLength\").value=daillingData[7];");
out.println(" if(daillingData[5] == \"yes\") {");
out.println(" document.getElementById(\"useIDD\").checked=true;");
out.println(" document.getElementById(\"useIDD\").value=\"yes\";");
out.println(" } else {");
out.println(" document.getElementById(\"useIDD\").checked=false;");
out.println(" document.getElementById(\"useIDD\").value=\"no\";");
out.println(" }");
out.println(" } else {");
out.println(" document.getElementById(\"pbxAccessDigits\").value=\"\";");
out.println(" document.getElementById(\"pbxNumberLength\").value=\"\";");
out.println(" document.getElementById(\"pbxNumberPrefix\").value=\"\";");
out.println(" document.getElementById(\"pbxAreaCode\").value=\"\";");
out.println(" document.getElementById(\"useIDD\").checked=false;");
out.println(" document.getElementById(\"useIDD\").value=\"no\";");
out.println(" document.getElementById(\"pbxTrunkCode\").value=\"\";");
out.println(" document.getElementById(\"phoneNumberLength\").value=\"\";");
out.println(" }");
out.println(" }");
out.println(" </script>");
out.println(" </head>");
out.println(" <body>");
out.println("<form action=\"traderlync-check-number-format\" method=\"get\">");
if (error.length() > 1) {
out.println("<div class=\"error\">");
out.println(error);
out.println("</div>");
}
out.println("<div class=\"jive-contentBoxHeader\">Phone Number Rules</div>");
out.println("<div class=\"jive-contentBox\">");
out.println(" <table>");
out.println("<tr><td>Site</td><td><Select name = 'site' id = 'site' onchange=\"populateFields()\">");
out.println("<option value='none'>Select</option>");
Site site = OpenlinkComponent.self.site;
String country = JiveGlobals.getProperty(Properties.Openlink_PBX_COUNTRY_CODE + "." + site.getName().toLowerCase(), Locale.getDefault().getCountry());
String siePbxAccessDigits = JiveGlobals.getProperty(Properties.Openlink_PBX_ACCESS_DIGITS + "." + site.getName().toLowerCase(), "");
String siteAreaCode = JiveGlobals.getProperty(Properties.Openlink_AREA_CODE + "." + site.getName().toLowerCase(), "");
String sitePbxNumberLength = JiveGlobals.getProperty(Properties.Openlink_PBX_NUMBER_LENGTH + "." + site.getName().toLowerCase(), "");
String sitePbxNumberPrefix = JiveGlobals.getProperty(Properties.Openlink_PBX_NUMBER_PREFIX + "." + site.getName().toLowerCase(), "");
String sitePbxTrunkCode = JiveGlobals.getProperty(Properties.Openlink_PBX_AREA_TRUNK_CODE + "." + site.getName().toLowerCase(), "");
String sitePhoneNumberLength = JiveGlobals.getProperty(Properties.Openlink_PBX_LOCAL_PHONE_NUMBERLENGTH + "." + site.getName().toLowerCase(), "");
String siteUseIDDFormat = JiveGlobals.getProperty(Properties.Openlink_PBX_USE_IDD + "." + site.getName().toLowerCase(), "");
String scriptArgument = country+":"+siePbxAccessDigits+":"+sitePbxNumberLength+":"+sitePbxNumberPrefix+":"+siteAreaCode+":"+siteUseIDDFormat+":"+sitePbxTrunkCode+":"+sitePhoneNumberLength;
if(siteData.equals(scriptArgument)) {
out.println("<option selected value='" + scriptArgument + "'>" + site.getName() + "</option>");
} else {
out.println("<option value='" + scriptArgument + "'>" + site.getName() + "</option>");
}
out.println("</select></td><td>Select Site from list to test Dailling rules applied for Destination numbers</td></tr>");
out.println(" <tr><td>Country Code</td><td><select name='pbxCountryCode' id = 'pbxCountryCode'>");
String[] listofCountryCodes = TelephoneNumberFormatter.getISOCountryCodes();
for (int i=0; i<listofCountryCodes.length; i++)
{
if (pbxCountryCode.equals(listofCountryCodes[i]))
out.println( "<option selected value='" + listofCountryCodes[i] + "'>" + listofCountryCodes[i] + "</option>");
else
out.println( "<option value='" + listofCountryCodes[i] + "'>" + listofCountryCodes[i] + "</option>");
}
out.println(" </select></td>");
out.println(" <td>Country code for determining international dial code. For example GB for United Kingdom, US for United states of America.<p/> Your server country code is " + Locale.getDefault().getCountry() + "</td></tr>");
out.println(" <tr><td>External/PBX Access Digits</td><td><input size='20' type='text' name='pbxAccessDigits' id='pbxAccessDigits' value='" + pbxAccessDigits + "'></td>");
out.println(" <td>Dial digits required to access external lines through PBX. Usually 9</td></tr>");
out.println(" <tr><td>Internal/PBX Number Length</td><td><input size='20' type='text' name='pbxNumberLength' id = 'pbxNumberLength' value='" + pbxNumberLength + "'></td>");
out.println(" <td>How many digits are in an internal PBX phone number. Usually 4 or 5.</td></tr>");
out.println(" <tr><td>Internal Routing Prefixes</td><td><input size='20' type='text' name='pbxNumberPrefix' id = 'pbxNumberPrefix' value='" + internalPrefix + "'></td>");
out.println(" <td>Internal routing numbers start with these prefixes, Configure prefixes each seperated by ','(Optional Parameter). E.g: 71, 12</td></tr>");
out.println(" <tr><td>Trunk Code</td><td><input size='20' type='text' name='pbxTrunkCode' id = 'pbxTrunkCode' value='" + pbxTrunkCode + "'></td>");
out.println(" <td>Code used to dial long distance numbers like other town or state or province</td></tr>");
out.println(" <tr><td>Area Code</td><td><input size='20' type='text' name='pbxAreaCode' id = 'pbxAreaCode' value='" + pbxAreaCode + "'></td>");
out.println(" <td>The area code for own town, state or province within your country</td></tr>");
out.println(" <tr><td>Local phone number length</td><td><input size='20' type='text' name='phoneNumberLength' id = 'phoneNumberLength' value='" + phoneNumberLength + "'></td>");
out.println(" <td>Number of Digits in Local numbers including area code. Eg. 10 for London - GB</td></tr>");
if(useIDD.equals("yes")) {
out.println(" <tr><td>Use IDD format</td><td><input size='20' type='checkbox' name='useIDD' id = 'useIDD' value='yes' checked/></td>");
out.println(" <td>Use International Dialing Digit format only Eg: 0044201234567</td></tr>");
} else {
out.println(" <tr><td>Use IDD format</td><td><input size='20' type='checkbox' name='useIDD' id = 'useIDD'/></td>");
out.println(" <td>Use International Dialing Digit format only Eg: 0044201234567</td></tr>");
}
out.println(" </table>");
out.println("</div>");
out.println("");
out.println("<div class=\"jive-contentBoxHeader\">Format Number</div>");
out.println("<div class=\"jive-contentBox\">");
out.println("<table>");
out.println("<tr>");
out.println("<td>Enter Number</td><td><input type = 'text' name='num' value='"+ number +"'/></td><td> </td><td> </td><td>Formatted CanonicalNumber</td><td><input type='text' name = 'canonicalNumber' id='canonicalNumber' disabled value='"+ formattedCanonicalNumber +"'></td><td> </td><td> </td><td>Formatted Number</td><td><input type='text' name='formattedNumber' id='formattedNumber' disabled value='"+ formattedNumber +"'></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td><input type = 'submit' value='Check Format'/>");
out.println("</tr>");
out.println("</table>");
out.println("</div>");
out.println("</body>");
out.println("</html>");
}
}