PhoneNumberFactory.java 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.zipcodewilmington.phone;
  2. import com.zipcodewilmington.exceptions.InvalidPhoneNumberFormatException;
  3. import com.zipcodewilmington.tools.RandomNumberFactory;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;
  6. /**
  7. * Created by leon on 5/1/17.
  8. */
  9. public final class PhoneNumberFactory {
  10. private static final Logger logger = Logger.getGlobal();
  11. private PhoneNumberFactory() {
  12. /** This constructor is private
  13. * This class is uninstantiable */
  14. }
  15. /**
  16. * @param phoneNumberCount - number of PhoneNumber objects to instantiate
  17. * @return array of randomly generated PhoneNumber objects
  18. */ //TODO - Implement logic
  19. public static PhoneNumber[] createRandomPhoneNumberArray(int phoneNumberCount) throws InvalidPhoneNumberFormatException{
  20. PhoneNumber[] phoneNumbers = new PhoneNumber[phoneNumberCount];
  21. for (int i = 0; i < phoneNumberCount; i++) {
  22. phoneNumbers[i] = createRandomPhoneNumber();
  23. }
  24. return phoneNumbers;
  25. }
  26. /**
  27. * @return an instance of PhoneNumber with randomly generated phone number value
  28. */ //TODO - Implement logic
  29. public static PhoneNumber createRandomPhoneNumber() throws InvalidPhoneNumberFormatException {
  30. try {
  31. int areaCode = RandomNumberFactory.createInteger(100, 999);
  32. int officeCode = RandomNumberFactory.createInteger(100, 999);
  33. int phoneLine = RandomNumberFactory.createInteger(1000, 9999);
  34. return createPhoneNumberSafely(areaCode, officeCode, phoneLine);
  35. } catch (InvalidPhoneNumberFormatException e) {return null;}
  36. }
  37. /**
  38. * @param areaCode - 3 digit code
  39. * @param centralOfficeCode - 3 digit code
  40. * @param phoneLineCode - 4 digit code
  41. * @return a new phone number object
  42. */ //TODO - if input is valid, return respective PhoneNumber object, else return null
  43. public static PhoneNumber createPhoneNumberSafely(int areaCode, int centralOfficeCode, int phoneLineCode) throws InvalidPhoneNumberFormatException{
  44. String tempString = "";
  45. try {
  46. // if (3 == String.valueOf(areaCode).length() && 3 == String.valueOf(centralOfficeCode).length() && 4 == String.valueOf(phoneLineCode).length()) {
  47. tempString = String.valueOf(areaCode) + String.valueOf(centralOfficeCode) + String.valueOf(phoneLineCode);
  48. return createPhoneNumber(tempString);
  49. // return createPhoneNumber(tempString);
  50. // }
  51. } catch (InvalidPhoneNumberFormatException inv) {
  52. logger.log(Level.FINE, (tempString + "is not a valid phone number"));
  53. return null;
  54. }
  55. }
  56. /**
  57. * @param phoneNumberString - some String corresponding to a phone number whose format is `(###)-###-####`
  58. * @return a new phone number object
  59. * @throws InvalidPhoneNumberFormatException - thrown if phoneNumberString does not match acceptable format
  60. */ // TODO - Add throws statement to method signature
  61. public static PhoneNumber createPhoneNumber (String phoneNumberString) throws InvalidPhoneNumberFormatException {
  62. StringBuilder sb = new StringBuilder();
  63. try {
  64. sb.append("(");
  65. sb.append(phoneNumberString.substring(0, 3));
  66. sb.append(")-");
  67. sb.append(phoneNumberString.substring(3, 6));
  68. sb.append("-");
  69. sb.append(phoneNumberString.substring(6));
  70. return new PhoneNumber(sb.toString());
  71. } catch (InvalidPhoneNumberFormatException e) {
  72. logger.log(Level.FINE, ("Attempting to create a new PhoneNumber object with a value of " + phoneNumberString));
  73. return null;
  74. }
  75. }
  76. }
  77. // 012-345-6789