/**
  * find person using name (firstname + lastName) using Phonebook database perhaps use phonebook
  * list?
  */
 @Override
 public Person findPersonFromDb(String firstName, String lastName) {
   Person newPerson = new Person();
   try (Connection cn = DatabaseUtil.getConnection()) {
     String queryString = "SELECT NAME, PHONENUMBER, ADDRESS FROM PHONEBOOK WHERE NAME = ?";
     PreparedStatement stmt = cn.prepareStatement(queryString);
     stmt.setString(1, firstName + " " + lastName);
     ResultSet rs = stmt.executeQuery();
     if (rs.next()) {
       newPerson.setName(rs.getString("NAME"));
       newPerson.setPhoneNumber(rs.getString("PHONENUMBER"));
       newPerson.setAddress(rs.getString("ADDRESS"));
     } else newPerson = null;
   } catch (ClassNotFoundException e) {
     // TODO Auto-generated catch block
     System.out.println("findPerson failed");
     e.printStackTrace();
   } catch (SQLException e) {
     // TODO Auto-generated catch block
     System.out.println("findPerson failed");
     e.printStackTrace();
   }
   return newPerson;
 }
  /** Updates name and/or phone number of person found by index. */
  private void updateRegister() {
    if (register.getCount() < 1) {
      System.err.println("Register does not contain any persons");
      return;
    }
    System.out.println("Enter index: ");
    int index = readIndex();
    if (index == 0) {
      return;
    }
    Person person = register.getPerson(index - 1);
    System.out.println(person.toString());
    System.out.println(
        "What do you want to update?\n1. Name \n2. Phone Number\n3. Name and PhoneNumber\n9. Back");

    try {
      index = Integer.parseInt(readLine());
    } catch (NumberFormatException e) { // if input is not number, return to
      // menu
      System.err.println("Wrong format");
    }
    String name;
    String phoneNumber;
    switch (index) {
      case 1:
        System.out.println("Enter new name: ");
        name = readLine();
        if (register.findPersonByBoth(name, person.getPhoneNumber()) != null) {
          System.err.println("Person with this NAME and NUMBER is already registered!");
          return;
        }
        person.setName(name);
        break;
      case 2:
        System.out.println("Enter new phoneNumber: ");
        phoneNumber = readLine();
        if (register.findPersonByBoth(person.getName(), phoneNumber) != null) {
          System.err.println("Person with this NAME and NUMBER is already registered!");
          return;
        }
        try {
          person.setPhoneNumber(phoneNumber);
        } catch (RuntimeException e) {
          System.err.println("Wrong number format");
        }
        break;

      case 3:
        System.out.println("Enter new name: ");
        name = readLine();
        System.out.println("Enter new phoneNumber: ");
        phoneNumber = readLine();
        if (register.findPersonByBoth(name, phoneNumber) != null) {
          System.err.println("Person with this NAME and NUMBER is already registered!");
          return;
        }
        person.setName(name);
        try {
          person.setPhoneNumber(phoneNumber);
        } catch (RuntimeException e) {
          System.err.println("Wrong number format");
        }
        break;

      case 9:
        return;
      default:
        System.err.println("Wrong index, choose only 1,2,3 or 9");
        break;
    }
    register.updateList();
  }
 public static PersonContainer createWithTestData() {
   final String[] fnames = {
     "Peter", "Alice", "Joshua", "Mike", "Olivia", "Nina", "Alex", "Rita", "Dan", "Umberto",
     "Henrik", "Rene", "Lisa", "Marge"
   };
   final String[] lnames = {
     "Smith",
     "Gordon",
     "Simpson",
     "Brown",
     "Clavel",
     "Simons",
     "Verne",
     "Scott",
     "Allison",
     "Gates",
     "Rowling",
     "Barks",
     "Ross",
     "Schneider",
     "Tate"
   };
   final String cities[] = {
     "Amsterdam",
     "Berlin",
     "Helsinki",
     "Hong Kong",
     "London",
     "Luxemburg",
     "New York",
     "Oslo",
     "Paris",
     "Rome",
     "Stockholm",
     "Tokyo",
     "Turku"
   };
   final String streets[] = {
     "4215 Blandit Av.",
     "452-8121 Sem Ave",
     "279-4475 Tellus Road",
     "4062 Libero. Av.",
     "7081 Pede. Ave",
     "6800 Aliquet St.",
     "P.O. Box 298, 9401 Mauris St.",
     "161-7279 Augue Ave",
     "P.O. Box 496, 1390 Sagittis. Rd.",
     "448-8295 Mi Avenue",
     "6419 Non Av.",
     "659-2538 Elementum Street",
     "2205 Quis St.",
     "252-5213 Tincidunt St.",
     "P.O. Box 175, 4049 Adipiscing Rd.",
     "3217 Nam Ave",
     "P.O. Box 859, 7661 Auctor St.",
     "2873 Nonummy Av.",
     "7342 Mi, Avenue",
     "539-3914 Dignissim. Rd.",
     "539-3675 Magna Avenue",
     "Ap #357-5640 Pharetra Avenue",
     "416-2983 Posuere Rd.",
     "141-1287 Adipiscing Avenue",
     "Ap #781-3145 Gravida St.",
     "6897 Suscipit Rd.",
     "8336 Purus Avenue",
     "2603 Bibendum. Av.",
     "2870 Vestibulum St.",
     "Ap #722 Aenean Avenue",
     "446-968 Augue Ave",
     "1141 Ultricies Street",
     "Ap #992-5769 Nunc Street",
     "6690 Porttitor Avenue",
     "Ap #105-1700 Risus Street",
     "P.O. Box 532, 3225 Lacus. Avenue",
     "736 Metus Street",
     "414-1417 Fringilla Street",
     "Ap #183-928 Scelerisque Road",
     "561-9262 Iaculis Avenue"
   };
   PersonContainer c = null;
   Random r = new Random(0);
   try {
     c = new PersonContainer();
     for (int i = 0; i < 100; i++) {
       Person p = new Person();
       p.setFirstName(fnames[r.nextInt(fnames.length)]);
       p.setLastName(lnames[r.nextInt(lnames.length)]);
       p.setCity(cities[r.nextInt(cities.length)]);
       p.setEmail(
           p.getFirstName().toLowerCase() + "." + p.getLastName().toLowerCase() + "@vaadin.com");
       p.setPhoneNumber(
           "+358 02 555 " + r.nextInt(10) + r.nextInt(10) + r.nextInt(10) + r.nextInt(10));
       int n = r.nextInt(100000);
       if (n < 10000) {
         n += 10000;
       }
       p.setPostalCode(n);
       p.setStreetAddress(streets[r.nextInt(streets.length)]);
       c.addItem(p);
     }
   } catch (InstantiationException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   } catch (IllegalAccessException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
   return c;
 }