package io.trygvis.container.myapp; import java.io.BufferedReader; import java.io.EOFException; import java.io.InputStreamReader; import java.sql.SQLException; import java.util.List; 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 MyAppSqlSession session; private static MyAppSqlSessionFactory sessionFactory; public static void main(String[] args) throws Exception { try { String jdbcUrl = "jdbc:h2:mem:address-book;DB_CLOSE_DELAY=-1"; sessionFactory = new MyAppSqlSessionFactory(new DriverManagerDataSource(jdbcUrl)); new AddressBookDirect().work(); } catch (EOFException ignore) { } } private void work() throws Exception { boolean done = false; while (!done) { try { session = sessionFactory.newSession(); done = main(); session.commit(); System.out.println("OK"); } finally { session.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 { session.executeUpdate(CompanyDao.createTableSql); session.executeUpdate(ContactDao.createTableSql); for (String sql : Sequences.createSequences) { session.executeUpdate(sql); } } public void drop() throws SQLException { for (String sql : Sequences.dropSequences) { session.executeUpdate(sql); } session.executeUpdate(ContactDao.dropTableSql); session.executeUpdate(CompanyDao.dropTableSql); } // ----------------------------------------------------------------------- // Company // ----------------------------------------------------------------------- private void company() throws Exception { while (true) { System.out.println("Company menu:"); System.out.println("a Add"); System.out.println("d Delete"); System.out.println("l List"); System.out.println("q Back"); String cmd = cmd(); switch (cmd) { case "a": 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); session.company.insert(company); } public void deleteCompany() { } public void listCompanies() throws SQLException { List resultList = session.company.selectWhere("1=1"); 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("a Add"); System.out.println("d Delete"); System.out.println("l list"); System.out.println("q Back"); String cmd = cmd(); switch (cmd) { case "a": 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) { } } Contact o = new Contact(name, g); o.company = session.company.selectById(1l); session.contact.insert(o); } public void deleteContact() { } public void listContacts() throws SQLException { List contacts = session.contact.selectWhere("1=1"); for (Contact contact : contacts) { System.out.println("====================="); System.out.println("Id: " + contact.getId()); System.out.println("Name: " + contact.name); System.out.println("Gender: " + contact.gender); if (contact.company != null) { System.out.println("Company:"); System.out.println(" id: " + contact.company.getId()); System.out.println(" name: " + contact.company.name); } else { System.out.println("Company: "); } } System.out.println(); } }