summaryrefslogtreecommitdiff
path: root/myapp
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2013-08-07 23:53:53 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2013-08-07 23:53:53 +0200
commit26b01b500065634eb3133dc354a0ba71b13bff56 (patch)
tree2fed1b329f421b7da7bf6c223f17fad230d1b5bd /myapp
parentdd150071369e825d4b4a59e15ad3291841c7ba13 (diff)
downloadcontainer-playground-26b01b500065634eb3133dc354a0ba71b13bff56.tar.gz
container-playground-26b01b500065634eb3133dc354a0ba71b13bff56.tar.bz2
container-playground-26b01b500065634eb3133dc354a0ba71b13bff56.tar.xz
container-playground-26b01b500065634eb3133dc354a0ba71b13bff56.zip
wip
o Start of JPA implementation.
Diffstat (limited to 'myapp')
-rw-r--r--myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java (renamed from myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java)13
-rw-r--r--myapp/src/main/java/io/trygvis/container/myapp/AddressBookJpa.java242
-rw-r--r--myapp/src/main/java/io/trygvis/container/myapp/DriverManagerDataSource.java60
-rw-r--r--myapp/src/main/java/io/trygvis/container/myapp/package-info.java2
4 files changed, 310 insertions, 7 deletions
diff --git a/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java b/myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java
index d5c93fe..df0f283 100644
--- a/myapp/src/main/java/io/trygvis/container/myapp/AddressBook.java
+++ b/myapp/src/main/java/io/trygvis/container/myapp/AddressBookDirect.java
@@ -10,10 +10,11 @@ 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 AddressBook {
+public class AddressBookDirect {
private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
@@ -21,7 +22,7 @@ public class AddressBook {
public static void main(String[] args) throws Exception {
try {
- new AddressBook().work();
+ new AddressBookDirect().work();
} catch (EOFException ignore) {
}
}
@@ -142,14 +143,14 @@ public class AddressBook {
String name = line();
Company company = new Company(name);
- CompanyDao.insertInto(c, company);
+ insertCompany(c, company);
}
public void deleteCompany() {
}
public void listCompanies() {
- TypedQuery<Company> p = CompanyDao.query(c);
+ TypedQuery<Company> p = CompanyDao.Utils.queryCompany(c);
List<Company> resultList = p.getResultList();
for (Company company : resultList) {
@@ -214,7 +215,7 @@ public class AddressBook {
Company company = null;
Contact o = new Contact(name, g, company);
- ContactDao.insertInto(c, o);
+ ContactDao.Utils.insertContact(c, o);
}
public void deleteContact() {
@@ -222,7 +223,7 @@ public class AddressBook {
}
public void listContacts() {
- TypedQuery<Contact> p = ContactDao.query(c);
+ TypedQuery<Contact> p = ContactDao.Utils.queryContact(c);
List<Contact> resultList = p.getResultList();
for (Contact contact : resultList) {
diff --git a/myapp/src/main/java/io/trygvis/container/myapp/AddressBookJpa.java b/myapp/src/main/java/io/trygvis/container/myapp/AddressBookJpa.java
new file mode 100644
index 0000000..3981805
--- /dev/null
+++ b/myapp/src/main/java/io/trygvis/container/myapp/AddressBookJpa.java
@@ -0,0 +1,242 @@
+package io.trygvis.container.myapp;
+
+import io.trygvis.persistence.sql.SqlEntityMeta;
+import io.trygvis.persistence.sql.SqlUnit;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.TypedQuery;
+import javax.sql.DataSource;
+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 AddressBookJpa {
+
+ private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+
+ private EntityManager entityManager;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ new AddressBookJpa().work();
+ } catch (EOFException ignore) {
+ }
+ }
+
+ private void work() throws Exception {
+ DataSource ds = new DriverManagerDataSource("jdbc:h2:mem:address-book;DB_CLOSE_DELAY=-1");
+ EntityManagerFactory emf = new MyAppEntityManagerFactory(ds);
+ boolean done = false;
+ while (!done) {
+ try {
+ entityManager = emf.createEntityManager();
+ EntityTransaction transaction = entityManager.getTransaction();
+ done = main();
+ System.out.println("OK");
+ transaction.commit();
+ } finally {
+ entityManager.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 {
+ for (SqlEntityMeta entityMeta : entityManager.unwrap(SqlUnit.class).getEntities()) {
+ entityManager.createNativeQuery(entityMeta.createTableSql).executeUpdate();
+ }
+ for (String sql : Sequences.createSequences) {
+ entityManager.createNativeQuery(sql).executeUpdate();
+ }
+ }
+
+ public void drop() throws SQLException {
+ for (String sql : Sequences.dropSequences) {
+ entityManager.createNativeQuery(sql);
+ }
+ for (SqlEntityMeta entityMeta : entityManager.unwrap(SqlUnit.class).getEntities()) {
+ entityManager.createNativeQuery(entityMeta.dropTableSql).executeUpdate();
+ }
+ }
+
+ // -----------------------------------------------------------------------
+ // 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);
+ entityManager.persist(company);
+ }
+
+ public void deleteCompany() {
+ }
+
+ public void listCompanies() {
+ TypedQuery<Company> p = entityManager.createQuery("", Company.class);
+
+ 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);
+ entityManager.persist(company);
+ }
+
+ public void deleteContact() {
+
+ }
+
+ public void listContacts() {
+ TypedQuery<Contact> p = entityManager.createQuery("", Contact.class);
+
+ 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();
+ }
+}
diff --git a/myapp/src/main/java/io/trygvis/container/myapp/DriverManagerDataSource.java b/myapp/src/main/java/io/trygvis/container/myapp/DriverManagerDataSource.java
new file mode 100644
index 0000000..3165f17
--- /dev/null
+++ b/myapp/src/main/java/io/trygvis/container/myapp/DriverManagerDataSource.java
@@ -0,0 +1,60 @@
+package io.trygvis.container.myapp;
+
+import javax.sql.DataSource;
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.logging.Logger;
+
+class DriverManagerDataSource implements DataSource {
+ private final String url;
+
+ DriverManagerDataSource(String url) {
+ this.url = url;
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ return DriverManager.getConnection(url);
+ }
+
+ @Override
+ public Connection getConnection(String username, String password) throws SQLException {
+ return DriverManager.getConnection(url, username, password);
+ }
+
+ @Override
+ public PrintWriter getLogWriter() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setLogWriter(PrintWriter out) throws SQLException {
+ }
+
+ @Override
+ public void setLoginTimeout(int seconds) throws SQLException {
+ }
+
+ @Override
+ public int getLoginTimeout() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+ return null;
+ }
+
+ @Override
+ public <T> T unwrap(Class<T> iface) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean isWrapperFor(Class<?> iface) throws SQLException {
+ return false;
+ }
+}
diff --git a/myapp/src/main/java/io/trygvis/container/myapp/package-info.java b/myapp/src/main/java/io/trygvis/container/myapp/package-info.java
index c212ca1..fdb7353 100644
--- a/myapp/src/main/java/io/trygvis/container/myapp/package-info.java
+++ b/myapp/src/main/java/io/trygvis/container/myapp/package-info.java
@@ -1,3 +1,3 @@
-@SqlEntitySet package io.trygvis.container.myapp;
+@SqlEntitySet(name = "MyApp") package io.trygvis.container.myapp;
import io.trygvis.persistence.SqlEntitySet;