PhoneNumberFactory.java 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package com.zipcodewilmington.phone;
  2. import com.zipcodewilmington.exceptions.InvalidPhoneNumberFormatException;
  3. import com.zipcodewilmington.tools.RandomNumberFactory;
  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[] phoneBook = new PhoneNumber[phoneNumberCount];
  20. for(int i = 1; i <= phoneNumberCount; i++) {
  21. phoneBook[i-1] = createRandomPhoneNumber();
  22. }
  23. return phoneBook;
  24. }
  25. /**
  26. * @return an instance of PhoneNumber with randomly generated phone number value
  27. */ //TODO - Implement logic
  28. public static PhoneNumber createRandomPhoneNumber() {
  29. int areaCd = RandomNumberFactory.createInteger(100,999);
  30. int centralOCd = RandomNumberFactory.createInteger(100, 999);
  31. int phoneLineCd = RandomNumberFactory.createInteger(100, 999);
  32. return createPhoneNumberSafely(areaCd, centralOCd, phoneLineCd);
  33. }
  34. /**
  35. * @param areaCode - 3 digit code
  36. * @param centralOfficeCode - 3 digit code
  37. * @param phoneLineCode - 4 digit code
  38. * @return a new phone number object
  39. */ //TODO - if input is valid, return respective PhoneNumber object, else return null
  40. public static PhoneNumber createPhoneNumberSafely(int areaCode, int centralOfficeCode, int phoneLineCode) {
  41. String phoneNumberStr = "(" + areaCode + ")-" + centralOfficeCode + "-" + phoneLineCode;
  42. try {return createPhoneNumber(phoneNumberStr);}
  43. catch(InvalidPhoneNumberFormatException e) {
  44. logger.info(phoneNumberStr + "is not a valid phone number");
  45. return null;
  46. }
  47. }
  48. /**
  49. * @param phoneNumberString - some String corresponding to a phone number whose format is `(###)-###-####`
  50. * @return a new phone number object
  51. * @throws InvalidPhoneNumberFormatException - thrown if phoneNumberString does not match acceptable format
  52. */ // TODO - Add throws statement to method signature
  53. public static PhoneNumber createPhoneNumber(String phoneNumberString) throws InvalidPhoneNumberFormatException {
  54. PhoneNumber phoneNum = new PhoneNumber(phoneNumberString);
  55. logger.info("Attempting to create a new PhoneNumber object with a value of " + phoneNumberString);
  56. return phoneNum;
  57. }
  58. }