summaryrefslogtreecommitdiff
path: root/myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java
diff options
context:
space:
mode:
Diffstat (limited to 'myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java')
-rw-r--r--myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java237
1 files changed, 237 insertions, 0 deletions
diff --git a/myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java b/myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java
new file mode 100644
index 0000000..df0f283
--- /dev/null
+++ b/myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java
@@ -0,0 +1,237 @@
+package io.trygvis.container.myapp;
+
+import javax.persistence.TypedQuery;
+import java.io.BufferedReader;
+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.CompanyDao.Utils.insertCompany;
+import static io.trygvis.container.myapp.Contact.Gender.FEMALE;
+import static io.trygvis.container.myapp.Contact.Gender.MALE;
+
+public class AddressBookDirect {
+
+ private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+
+ private Connection c;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ new AddressBookDirect().work();
+ } catch (EOFException ignore) {
+ }
+ }
+
+ private void work() throws Exception {
+ boolean done = false;
+ while (!done) {
+ 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":
+ addCompany();
+ break;
+ case "d":
+ deleteCompany();
+ break;
+ case "l":
+ listCompanies();
+ break;
+ case "q":
+ return;
+ default:
+ System.out.println("Unknown command: " + cmd);
+ }
+ }
+ }
+
+ public void addCompany() throws Exception {
+ System.out.print("Name: ");
+ String name = line();
+
+ Company company = new Company(name);
+ insertCompany(c, company);
+ }
+
+ public void deleteCompany() {
+ }
+
+ public void listCompanies() {
+ TypedQuery<Company> p = CompanyDao.Utils.queryCompany(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();
+ }
+
+ // -----------------------------------------------------------------------
+ // Contact
+ // -----------------------------------------------------------------------
+
+ private void contact() throws Exception {
+ while (true) {
+ 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 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) {
+ }
+ }
+
+ Company company = null;
+ Contact o = new Contact(name, g, company);
+ ContactDao.Utils.insertContact(c, o);
+ }
+
+ public void deleteContact() {
+
+ }
+
+ public void listContacts() {
+ TypedQuery<Contact> p = ContactDao.Utils.queryContact(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();
+ }
+}