PhoneNumberFactory.java 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package com.zipcodewilmington.phone;
  2. import com.zipcodewilmington.exceptions.InvalidPhoneNumberFormatException;
  3. import java.util.Random;
  4. import java.util.logging.Logger;
  5. /**
  6. * Created by leon on 5/1/17.
  7. */
  8. public final class PhoneNumberFactory {
  9. private static final Logger logger = Logger.getGlobal();
  10. private PhoneNumberFactory() {
  11. /** This constructor is private
  12. * This class is uninstantiable */
  13. }
  14. /**
  15. * @param phoneNumberCount - number of PhoneNumber objects to instantiate
  16. * @return array of randomly generated PhoneNumber objects
  17. */ //TODO - Implement logic
  18. public static PhoneNumber[] createRandomPhoneNumberArray(int phoneNumberCount) {
  19. PhoneNumber[] ret = new PhoneNumber[phoneNumberCount];
  20. for (int i=0;i<ret.length;i++)
  21. ret[i] = createRandomPhoneNumber();
  22. return ret;
  23. }
  24. /**
  25. * @return an instance of PhoneNumber with randomly generated phone number value
  26. */ //TODO - Implement logic
  27. public static PhoneNumber createRandomPhoneNumber() {
  28. return createPhoneNumberSafely(randAreaOrOfficeCode(), randAreaOrOfficeCode(), randLineCode());
  29. }
  30. static int randAreaOrOfficeCode() {
  31. return genRandomSequence(3);
  32. }
  33. static int randLineCode() {
  34. return genRandomSequence(4);
  35. }
  36. static int genRandomSequence(int howManyDigits) {
  37. Random r = new Random();
  38. int sum = 0;
  39. for (int i=0;i<howManyDigits;i++)
  40. sum += r.nextInt(10) * Math.pow(10, i);
  41. return sum;
  42. }
  43. /**
  44. * @param areaCode - 3 digit code
  45. * @param centralOfficeCode - 3 digit code
  46. * @param phoneLineCode - 4 digit code
  47. * @return a new phone number object
  48. */ //TODO - if input is valid, return respective PhoneNumber object, else return null
  49. public static PhoneNumber createPhoneNumberSafely(int areaCode, int centralOfficeCode, int phoneLineCode) {
  50. String phoneNumberString = String.format("(%03d)-%03d-%04d", areaCode, centralOfficeCode, phoneLineCode);
  51. try {
  52. logger.info("Attempting to create a new PhoneNumber object with a value of " + phoneNumberString);
  53. return createPhoneNumber(phoneNumberString);
  54. } catch (InvalidPhoneNumberFormatException ipne) {
  55. logger.info(phoneNumberString + " is not a valid phone number");
  56. return null;
  57. }
  58. }
  59. /**
  60. * @param phoneNumberString - some String corresponding to a phone number whose format is `(###)-###-####`
  61. * @return a new phone number object
  62. * @throws InvalidPhoneNumberFormatException - thrown if phoneNumberString does not match acceptable format
  63. */ // TODO - Add throws statement to method signature
  64. public static PhoneNumber createPhoneNumber(String phoneNumberString) throws InvalidPhoneNumberFormatException{
  65. return new PhoneNumber(phoneNumberString);
  66. }
  67. }