summaryrefslogtreecommitdiff
path: root/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java
diff options
context:
space:
mode:
Diffstat (limited to 'myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java')
-rw-r--r--myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java245
1 files changed, 175 insertions, 70 deletions
diff --git a/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java b/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java
index d5a1170..d5c93fe 100644
--- a/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java
+++ b/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java
@@ -6,13 +6,19 @@ import java.io.EOFException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
+import static io.trygvis.container.myapp.Contact.Gender.FEMALE;
+import static io.trygvis.container.myapp.Contact.Gender.MALE;
+
public class AddressBook {
private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+ private Connection c;
+
public static void main(String[] args) throws Exception {
try {
new AddressBook().work();
@@ -23,109 +29,208 @@ public class AddressBook {
private void work() throws Exception {
boolean done = false;
while (!done) {
- String cmd = Character.toString(menu());
+ c = DriverManager.getConnection("jdbc:h2:mem:address-book;DB_CLOSE_DELAY=-1");
+ try {
+ c.setAutoCommit(false);
+ done = main();
+ c.commit();
+ System.out.println("OK");
+ } finally {
+ c.close();
+ }
+ }
+ }
+
+ private boolean main() throws Exception {
+ System.out.println("Menu:");
+ System.out.println("c Create");
+ System.out.println("d Drop");
+ System.out.println("m Company menu");
+ System.out.println("n Contact menu");
+ System.out.println("q Quit");
+ String cmd = cmd();
+ switch (cmd) {
+ case "c":
+ create();
+ break;
+ case "d":
+ drop();
+ break;
+ case "m":
+ company();
+ break;
+ case "n":
+ contact();
+ break;
+ case "q":
+ return true;
+ default:
+ System.out.println("Unknown command: " + cmd);
+ }
+ return false;
+ }
+
+ private String cmd() throws Exception {
+ String cmd = null;
+ do {
+ String read = line();
+ if (read.length() != 0) {
+ cmd = read.trim();
+ }
+ } while (cmd == null);
+ return cmd;
+ }
+
+ private String line() throws Exception {
+ String line = reader.readLine();
+ if (line == null) {
+ throw new EOFException();
+ }
+ return line.trim();
+ }
+
+ public void create() throws SQLException {
+ Statement statement = c.createStatement();
+ statement.executeUpdate(CompanyDao.createTableSql);
+ statement.executeUpdate(ContactDao.createTableSql);
+ for (String sql : Sequences.createSequences) {
+ statement.executeUpdate(sql);
+ }
+ }
+
+ public void drop() throws SQLException {
+ Statement statement = c.createStatement();
+ for (String sql : Sequences.dropSequences) {
+ statement.executeUpdate(sql);
+ }
+ statement.executeUpdate(ContactDao.dropTableSql);
+ statement.executeUpdate(CompanyDao.dropTableSql);
+ }
+
+ // -----------------------------------------------------------------------
+ // Company
+ // -----------------------------------------------------------------------
+
+ private void company() throws Exception {
+ while (true) {
+ System.out.println("Company menu:");
+ System.out.println("c Create");
+ System.out.println("d Drop");
+ System.out.println("d List");
+ System.out.println("q Back");
+ String cmd = cmd();
switch (cmd) {
case "c":
- run(new CreateTablesCommand());
+ addCompany();
break;
case "d":
- run(new DropTablesCommand());
- break;
- case "a":
- run(new AddCommand());
+ deleteCompany();
break;
case "l":
- run(new ListCommand());
+ listCompanies();
break;
case "q":
- done = true;
- break;
+ return;
default:
System.out.println("Unknown command: " + cmd);
}
}
}
- private String line() throws Exception {
- String line = reader.readLine();
- if(line == null) {
- throw new EOFException();
- }
- return line.trim();
+ public void addCompany() throws Exception {
+ System.out.print("Name: ");
+ String name = line();
+
+ Company company = new Company(name);
+ CompanyDao.insertInto(c, company);
}
- public static interface Command {
- void run(Connection c) throws Exception;
+ public void deleteCompany() {
}
- public void run(Command command) throws Exception {
- try (Connection c = DriverManager.getConnection("jdbc:h2:mem:address-book;DB_CLOSE_DELAY=-1")) {
- c.setAutoCommit(false);
- command.run(c);
- c.commit();
- System.out.println("OK");
+ public void listCompanies() {
+ TypedQuery<Company> p = CompanyDao.query(c);
+
+ List<Company> resultList = p.getResultList();
+ for (Company company : resultList) {
+ System.out.println("=====================");
+ System.out.println("Id: " + company.getId());
+ System.out.println("Name: " + company.name);
}
+ System.out.println();
}
- private char menu() throws Exception {
- System.out.println("Menu:");
- System.out.println("c Create");
- System.out.println("d Drop");
- System.out.println("l List");
- System.out.println("a Add");
- System.out.println("q Quit");
+ // -----------------------------------------------------------------------
+ // Contact
+ // -----------------------------------------------------------------------
+
+ private void contact() throws Exception {
while (true) {
- String read = line();
- if (read.length() != 0) {
- return read.charAt(0);
+ System.out.println("Contact menu:");
+ System.out.println("c Create");
+ System.out.println("d Drop");
+ System.out.println("q Back");
+ String cmd = cmd();
+ switch (cmd) {
+ case "c":
+ addContact();
+ break;
+ case "d":
+ deleteContact();
+ break;
+ case "l":
+ listContacts();
+ break;
+ case "q":
+ return;
+ default:
+ System.out.println("Unknown command: " + cmd);
}
}
}
- public static class CreateTablesCommand implements Command {
- @Override
- public void run(Connection c) throws Exception {
- Statement statement = c.createStatement();
- statement.executeUpdate(ContactDao.createTableSql);
- for (String sql : Sequences.createSequences) {
- statement.executeUpdate(sql);
+ public void addContact() throws Exception {
+ System.out.print("Name: ");
+ String name = line();
+ Contact.Gender g = null;
+ while (g == null) {
+ System.out.print("Gender (m/f): ");
+ try {
+ String line = line();
+ switch (line) {
+ case "m":
+ g = MALE;
+ break;
+ case "f":
+ g = FEMALE;
+ break;
+ default:
+ g = Contact.Gender.valueOf(line);
+ break;
+ }
+ } catch (IllegalArgumentException ignore) {
}
}
- }
- public static class DropTablesCommand implements Command {
- @Override
- public void run(Connection c) throws Exception {
- Statement statement = c.createStatement();
- statement.executeUpdate(ContactDao.dropTableSql);
- for (String sql : Sequences.dropSequences) {
- statement.executeUpdate(sql);
- }
- }
+ Company company = null;
+ Contact o = new Contact(name, g, company);
+ ContactDao.insertInto(c, o);
}
- public class AddCommand implements Command {
- @Override
- public void run(Connection c) throws Exception {
- System.out.print("Name: ");
- String name = line();
- Contact o = new Contact(name);
- ContactDao.insertInto(c, o);
- }
+ public void deleteContact() {
+
}
- public static class ListCommand implements Command {
- @Override
- public void run(Connection c) throws Exception {
- TypedQuery<Contact> p = ContactDao.query(c);
-
- List<Contact> resultList = p.getResultList();
- for (int i = 0; i < resultList.size(); i++) {
- Contact contact = resultList.get(i);
- System.out.println("Item #" + i + ":");
- System.out.println("Id: " + contact.getId());
- System.out.println("Name: " + contact.name);
- }
+ public void listContacts() {
+ TypedQuery<Contact> p = ContactDao.query(c);
+
+ List<Contact> resultList = p.getResultList();
+ for (Contact contact : resultList) {
+ System.out.println("=====================");
+ System.out.println("Id: " + contact.getId());
+ System.out.println("Name: " + contact.name);
+ System.out.println("Gender: " + contact.gender);
}
+ System.out.println();
}
}