commit 123ba27acdca573824b5c960f3bfdc43e7426929 Author: Greg Burd Date: Mon Apr 3 11:25:47 2017 -0400 Initial import. diff --git a/.gradle/2.2/taskArtifacts/cache.properties b/.gradle/2.2/taskArtifacts/cache.properties new file mode 100644 index 0000000..5fe0b69 --- /dev/null +++ b/.gradle/2.2/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Fri Mar 31 21:55:13 EDT 2017 diff --git a/.gradle/2.2/taskArtifacts/cache.properties.lock b/.gradle/2.2/taskArtifacts/cache.properties.lock new file mode 100644 index 0000000..e244035 Binary files /dev/null and b/.gradle/2.2/taskArtifacts/cache.properties.lock differ diff --git a/.gradle/2.2/taskArtifacts/fileHashes.bin b/.gradle/2.2/taskArtifacts/fileHashes.bin new file mode 100644 index 0000000..402cf5c Binary files /dev/null and b/.gradle/2.2/taskArtifacts/fileHashes.bin differ diff --git a/.gradle/2.2/taskArtifacts/fileSnapshots.bin b/.gradle/2.2/taskArtifacts/fileSnapshots.bin new file mode 100644 index 0000000..892b3d1 Binary files /dev/null and b/.gradle/2.2/taskArtifacts/fileSnapshots.bin differ diff --git a/.gradle/2.2/taskArtifacts/outputFileStates.bin b/.gradle/2.2/taskArtifacts/outputFileStates.bin new file mode 100644 index 0000000..3db93da Binary files /dev/null and b/.gradle/2.2/taskArtifacts/outputFileStates.bin differ diff --git a/.gradle/2.2/taskArtifacts/taskArtifacts.bin b/.gradle/2.2/taskArtifacts/taskArtifacts.bin new file mode 100644 index 0000000..de9a084 Binary files /dev/null and b/.gradle/2.2/taskArtifacts/taskArtifacts.bin differ diff --git a/.idea/modules/farsite_main.iml b/.idea/modules/farsite_main.iml new file mode 100644 index 0000000..bc58c18 --- /dev/null +++ b/.idea/modules/farsite_main.iml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/farsite_test.iml b/.idea/modules/farsite_test.iml new file mode 100644 index 0000000..85b0f87 --- /dev/null +++ b/.idea/modules/farsite_test.iml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..07cdd16 --- /dev/null +++ b/build.gradle @@ -0,0 +1,106 @@ +// gradle wrapper +// ./gradlew clean generateLock saveLock +// ./gradlew compileJava +// ./gradlew run +// ./gradlew run --debug-jvm + +buildscript { + ext { + } + repositories { + jcenter() + mavenCentral() + maven { url "https://clojars.org/repo" } + } + dependencies { + classpath 'com.netflix.nebula:gradle-dependency-lock-plugin:4.+' + classpath 'com.uber:okbuck:0.19.0' + } +} + +apply plugin: 'java' +apply plugin: 'idea' +apply plugin: 'com.uber.okbuck' +apply plugin: 'nebula.dependency-lock' +apply plugin: 'application' + +mainClassName = "com.example.farsite.Main" +applicationDefaultJvmArgs = ["-Dgreeting.language=en"] + +task execute(type:JavaExec) { + classpath = sourceSets.main.runtimeClasspath + main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "com.example.farsite.Main" +} + +dependencies { + testCompile 'junit:junit:4.12' +} + +jar { + baseName = '' + version = '0.0.1-SNAPSHOT' +} + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +repositories { + jcenter() + mavenLocal() + mavenCentral() + maven { url "https://clojars.org/repo" } +} + +configurations { + compile.exclude module: 'spring-boot-starter-tomcat' + compile.exclude module: 'tomcat-jdbc' +} + +configurations.all { + exclude group: "org.slf4j", module: "slf4j-log4j12" + exclude group: "log4j", module: "log4j" +} + +dependencies { + // Some Java Extras + compile group: 'javax.inject', name: 'javax.inject', version: '1' + + // Google Guava, "For all the Goodness(TM)" + compile group: 'com.google.guava', name: 'guava', version: '21.+' + + // Joda Time, "Because time is hard(TM)" + compile group: 'joda-time', name: 'joda-time', version: '2.+' + + // Lombok, "Where less is more(TM)" + compile group: 'org.projectlombok', name: 'lombok', version: '1.+' + + // Entity Storage (aka. txn{CRUD}), "Things necessary for data persistence" + // - CockroachDB (the *clustered, scale-out* PostgreSQL server) + // - HikariCP (Connection Pooling) + // - EclipseLink (ORM) + compile group: 'org.postgresql', name: 'postgresql', version: '42.+' + compile group: 'org.eclipse.persistence', name: 'eclipselink', version: '2.+' + compile group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.+' + compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.jpa', version: '2.+' + + + // Dropwizard (aka. CodaHale) Metrics, "Measure all the things!(TM)" + compile group: 'io.dropwizard.metrics', name: 'metrics-core', version: '3.+' + compile group: 'io.dropwizard.metrics', name: 'metrics-jvm', version: '3.+' + compile group: 'io.dropwizard.metrics', name: 'metrics-healthchecks', version: '3.+' + compile group: 'io.dropwizard.metrics', name: 'metrics-graphite', version: '3.+' + compile group: 'io.riemann', name: 'metrics3-riemann-reporter', version: '0.+' + + // Logging for Java, "Visibility proceeds insight(TM)" + compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.+' + compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.+' + compile group: 'org.zalando', name: 'logbook-core', version: '1.+' + + // Fake data generator + compile group: 'com.github.javafaker', name: 'javafaker', version: '0.+' + +} + +task wrapper(type: Wrapper) { + gradleVersion = '2.2' +} diff --git a/dependencies.lock b/dependencies.lock new file mode 100644 index 0000000..f01cd66 --- /dev/null +++ b/dependencies.lock @@ -0,0 +1,360 @@ +{ + "compile": { + "ch.qos.logback:logback-classic": { + "locked": "1.2.3", + "requested": "1.+" + }, + "com.github.javafaker:javafaker": { + "locked": "0.13", + "requested": "0.+" + }, + "com.google.guava:guava": { + "locked": "21.0", + "requested": "21.+" + }, + "io.dropwizard.metrics:metrics-core": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-graphite": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-healthchecks": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-jvm": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.riemann:metrics3-riemann-reporter": { + "locked": "0.4.3", + "requested": "0.+" + }, + "javax.inject:javax.inject": { + "locked": "1", + "requested": "1" + }, + "joda-time:joda-time": { + "locked": "2.9.9", + "requested": "2.+" + }, + "org.eclipse.persistence:eclipselink": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.eclipse.persistence:javax.persistence": { + "locked": "2.1.1", + "requested": "2.+" + }, + "org.eclipse.persistence:org.eclipse.persistence.jpa": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.postgresql:postgresql": { + "locked": "42.0.0", + "requested": "42.+" + }, + "org.projectlombok:lombok": { + "locked": "1.16.16", + "requested": "1.+" + }, + "org.slf4j:log4j-over-slf4j": { + "locked": "1.7.25", + "requested": "1.+" + }, + "org.zalando:logbook-core": { + "locked": "1.1.1", + "requested": "1.+" + } + }, + "default": { + "ch.qos.logback:logback-classic": { + "locked": "1.2.3", + "requested": "1.+" + }, + "com.github.javafaker:javafaker": { + "locked": "0.13", + "requested": "0.+" + }, + "com.google.guava:guava": { + "locked": "21.0", + "requested": "21.+" + }, + "io.dropwizard.metrics:metrics-core": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-graphite": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-healthchecks": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-jvm": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.riemann:metrics3-riemann-reporter": { + "locked": "0.4.3", + "requested": "0.+" + }, + "javax.inject:javax.inject": { + "locked": "1", + "requested": "1" + }, + "joda-time:joda-time": { + "locked": "2.9.9", + "requested": "2.+" + }, + "org.eclipse.persistence:eclipselink": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.eclipse.persistence:javax.persistence": { + "locked": "2.1.1", + "requested": "2.+" + }, + "org.eclipse.persistence:org.eclipse.persistence.jpa": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.postgresql:postgresql": { + "locked": "42.0.0", + "requested": "42.+" + }, + "org.projectlombok:lombok": { + "locked": "1.16.16", + "requested": "1.+" + }, + "org.slf4j:log4j-over-slf4j": { + "locked": "1.7.25", + "requested": "1.+" + }, + "org.zalando:logbook-core": { + "locked": "1.1.1", + "requested": "1.+" + } + }, + "runtime": { + "ch.qos.logback:logback-classic": { + "locked": "1.2.3", + "requested": "1.+" + }, + "com.github.javafaker:javafaker": { + "locked": "0.13", + "requested": "0.+" + }, + "com.google.guava:guava": { + "locked": "21.0", + "requested": "21.+" + }, + "io.dropwizard.metrics:metrics-core": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-graphite": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-healthchecks": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-jvm": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.riemann:metrics3-riemann-reporter": { + "locked": "0.4.3", + "requested": "0.+" + }, + "javax.inject:javax.inject": { + "locked": "1", + "requested": "1" + }, + "joda-time:joda-time": { + "locked": "2.9.9", + "requested": "2.+" + }, + "org.eclipse.persistence:eclipselink": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.eclipse.persistence:javax.persistence": { + "locked": "2.1.1", + "requested": "2.+" + }, + "org.eclipse.persistence:org.eclipse.persistence.jpa": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.postgresql:postgresql": { + "locked": "42.0.0", + "requested": "42.+" + }, + "org.projectlombok:lombok": { + "locked": "1.16.16", + "requested": "1.+" + }, + "org.slf4j:log4j-over-slf4j": { + "locked": "1.7.25", + "requested": "1.+" + }, + "org.zalando:logbook-core": { + "locked": "1.1.1", + "requested": "1.+" + } + }, + "testCompile": { + "ch.qos.logback:logback-classic": { + "locked": "1.2.3", + "requested": "1.+" + }, + "com.github.javafaker:javafaker": { + "locked": "0.13", + "requested": "0.+" + }, + "com.google.guava:guava": { + "locked": "21.0", + "requested": "21.+" + }, + "io.dropwizard.metrics:metrics-core": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-graphite": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-healthchecks": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-jvm": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.riemann:metrics3-riemann-reporter": { + "locked": "0.4.3", + "requested": "0.+" + }, + "javax.inject:javax.inject": { + "locked": "1", + "requested": "1" + }, + "joda-time:joda-time": { + "locked": "2.9.9", + "requested": "2.+" + }, + "junit:junit": { + "locked": "4.12", + "requested": "4.12" + }, + "org.eclipse.persistence:eclipselink": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.eclipse.persistence:javax.persistence": { + "locked": "2.1.1", + "requested": "2.+" + }, + "org.eclipse.persistence:org.eclipse.persistence.jpa": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.postgresql:postgresql": { + "locked": "42.0.0", + "requested": "42.+" + }, + "org.projectlombok:lombok": { + "locked": "1.16.16", + "requested": "1.+" + }, + "org.slf4j:log4j-over-slf4j": { + "locked": "1.7.25", + "requested": "1.+" + }, + "org.zalando:logbook-core": { + "locked": "1.1.1", + "requested": "1.+" + } + }, + "testRuntime": { + "ch.qos.logback:logback-classic": { + "locked": "1.2.3", + "requested": "1.+" + }, + "com.github.javafaker:javafaker": { + "locked": "0.13", + "requested": "0.+" + }, + "com.google.guava:guava": { + "locked": "21.0", + "requested": "21.+" + }, + "io.dropwizard.metrics:metrics-core": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-graphite": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-healthchecks": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.dropwizard.metrics:metrics-jvm": { + "locked": "3.2.2", + "requested": "3.+" + }, + "io.riemann:metrics3-riemann-reporter": { + "locked": "0.4.3", + "requested": "0.+" + }, + "javax.inject:javax.inject": { + "locked": "1", + "requested": "1" + }, + "joda-time:joda-time": { + "locked": "2.9.9", + "requested": "2.+" + }, + "junit:junit": { + "locked": "4.12", + "requested": "4.12" + }, + "org.eclipse.persistence:eclipselink": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.eclipse.persistence:javax.persistence": { + "locked": "2.1.1", + "requested": "2.+" + }, + "org.eclipse.persistence:org.eclipse.persistence.jpa": { + "locked": "2.6.4", + "requested": "2.+" + }, + "org.postgresql:postgresql": { + "locked": "42.0.0", + "requested": "42.+" + }, + "org.projectlombok:lombok": { + "locked": "1.16.16", + "requested": "1.+" + }, + "org.slf4j:log4j-over-slf4j": { + "locked": "1.7.25", + "requested": "1.+" + }, + "org.zalando:logbook-core": { + "locked": "1.1.1", + "requested": "1.+" + } + } +} \ No newline at end of file diff --git a/farsite.iml b/farsite.iml new file mode 100644 index 0000000..28a9b57 --- /dev/null +++ b/farsite.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/farsite.ipr b/farsite.ipr new file mode 100644 index 0000000..cd425e0 --- /dev/null +++ b/farsite.ipr @@ -0,0 +1,481 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.6 + + + + + + + + + + + + + \ No newline at end of file diff --git a/farsite.iws b/farsite.iws new file mode 100644 index 0000000..4a964ce --- /dev/null +++ b/farsite.iws @@ -0,0 +1,1467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Assembles and tests this project and all projects that depend on it.<p><i>Task group: build<i> + Generates IDEA project files (IML, IPR, IWS)<p><i>Task group: IDE<i> + Assembles classes 'main'.<p><i>Task group: build<i> + Delete stale configuration files generated by OkBuck<p><i>Task group: okbuck<i> + Setup okbuck cache and dependencies<p><i>Task group: okbuck<i> + Move the generated lock file into the project directory<p><i>Task group: Locking<i> + Runs this project as a JVM application<p><i>Task group: application<i> + <i>Task group: other<i> + Apply updates to a preexisting lock file and write to build/<specified name><p><i>Task group: Locking<i> + <i>Task group: other<i> + Assembles classes 'test'.<p><i>Task group: build<i> + Generates Javadoc API documentation for the main source code.<p><i>Task group: documentation<i> + Creates OS specific scripts to run the project as a JVM application.<p><i>Task group: other<i> + Assembles a jar archive containing the main classes.<p><i>Task group: build<i> + Create buck wrapper<p><i>Task group: okbuck<i> + Generates IDEA module files (IML)<p><i>Task group: other<i> + Processes JVM resources 'main:resources'.<p><i>Task group: other<i> + Apply updates to a preexisting lock file and write to build/<specified name><p><i>Task group: Locking<i> + <i>Task group: other<i> + <i>Task group: other<i> + Cleans IDEA project files (IML, IPR)<p><i>Task group: IDE<i> + <i>Task group: other<i> + Generates an IDEA workspace file (IWS)<p><i>Task group: other<i> + Runs the unit tests.<p><i>Task group: verification<i> + Compiles Java source 'main:java'.<p><i>Task group: other<i> + Create a lock file in build/<configured name><p><i>Task group: Locking<i> + Runs all checks.<p><i>Task group: verification<i> + Generate BUCK files<p><i>Task group: okbuck<i> + Assembles the outputs of this project.<p><i>Task group: build<i> + Deletes the build directory.<p><i>Task group: build<i> + Compiles Java source 'test:java'.<p><i>Task group: other<i> + <i>Task group: other<i> + Installs the project as a JVM application along with libs and OS specific scripts.<p><i>Task group: application<i> + <i>Task group: other<i> + Processes JVM resources 'test:resources'.<p><i>Task group: other<i> + Assembles and tests this project.<p><i>Task group: build<i> + Create a lock file in build/<configured name><p><i>Task group: Locking<i> + Assembles and tests this project and all projects it depends on.<p><i>Task group: build<i> + Bundles the project as a JVM application with libs and OS specific scripts.<p><i>Task group: application<i> + Generates IDEA project file (IPR)<p><i>Task group: other<i> + Move the generated lock file into the project directory<p><i>Task group: Locking<i> + Bundles the project as a JVM application with libs and OS specific scripts.<p><i>Task group: application<i> + <i>Task group: other<i> + Configuration for archive artifacts. + Compile classpath for source set 'main'. + Configuration for default artifacts. + + Runtime classpath for source set 'main'. + Compile classpath for source set 'test'. + Runtime classpath for source set 'test'. + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + 1491013016028 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/META-INF/persistence.xml b/src/META-INF/persistence.xml new file mode 100644 index 0000000..62dd562 --- /dev/null +++ b/src/META-INF/persistence.xml @@ -0,0 +1,47 @@ + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + true + + + + + + + + + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + true + + + + + + + + + + + + + + + diff --git a/src/main/java/com/example/farsite/Main.java b/src/main/java/com/example/farsite/Main.java new file mode 100644 index 0000000..8813d73 --- /dev/null +++ b/src/main/java/com/example/farsite/Main.java @@ -0,0 +1,36 @@ +package com.example.farsite; + +import com.example.farsite.model.Todo; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.Query; +import java.util.List; + +public class Main { + private static final String PERSISTENCE_UNIT_NAME = "todos"; + private static EntityManagerFactory factory; + + public static void main(String[] args) { + factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); + EntityManager em = factory.createEntityManager(); + // read the existing entries and write to console + Query q = em.createQuery("select t from Todo t"); + List todoList = q.getResultList(); + for (Todo todo : todoList) { + System.out.println(todo); + } + System.out.println("Size: " + todoList.size()); + + // create new todo + em.getTransaction().begin(); + Todo todo = new Todo(); + todo.setSummary("This is a test"); + todo.setDescription("This is a test"); + em.persist(todo); + em.getTransaction().commit(); + + em.close(); + } +} diff --git a/src/main/java/com/example/farsite/model/Family.java b/src/main/java/com/example/farsite/model/Family.java new file mode 100644 index 0000000..e8749a1 --- /dev/null +++ b/src/main/java/com/example/farsite/model/Family.java @@ -0,0 +1,19 @@ +package com.example.farsite.model; + +import lombok.Data; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Data +public class Family { + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + private int id; + private String description; + + @OneToMany(mappedBy = "family") + private final List members = new ArrayList(); +} diff --git a/src/main/java/com/example/farsite/model/Job.java b/src/main/java/com/example/farsite/model/Job.java new file mode 100644 index 0000000..f09fbb6 --- /dev/null +++ b/src/main/java/com/example/farsite/model/Job.java @@ -0,0 +1,16 @@ +package com.example.farsite.model; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Job { + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + private int id; + private double salery; + private String jobDescr; +} diff --git a/src/main/java/com/example/farsite/model/Person.java b/src/main/java/com/example/farsite/model/Person.java new file mode 100644 index 0000000..f3b34cd --- /dev/null +++ b/src/main/java/com/example/farsite/model/Person.java @@ -0,0 +1,32 @@ +package com.example.farsite.model; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Transient; + +@Entity +@Data +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + private String id; + private String firstName; + private String lastName; + + @ManyToOne + private Family family; + + @Transient + private String nonsenseField = ""; + + @OneToMany + private List jobList = new ArrayList(); +} diff --git a/src/main/java/com/example/farsite/model/Todo.java b/src/main/java/com/example/farsite/model/Todo.java new file mode 100644 index 0000000..20f0353 --- /dev/null +++ b/src/main/java/com/example/farsite/model/Todo.java @@ -0,0 +1,18 @@ +package com.example.farsite.model; + +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +@Data +public class Todo { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String summary; + private String description; +} diff --git a/src/test/java/com/example/farsite/model/JpaTest.java b/src/test/java/com/example/farsite/model/JpaTest.java new file mode 100644 index 0000000..5e6f17d --- /dev/null +++ b/src/test/java/com/example/farsite/model/JpaTest.java @@ -0,0 +1,107 @@ +package com.example.farsite.model; + +import org.junit.Before; +import org.junit.Test; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.Query; + +import static org.junit.Assert.assertTrue; + +public class JpaTest { + + private static final String PERSISTENCE_UNIT_NAME = "people"; + private EntityManagerFactory factory; + + @Before + public void setUp() throws Exception { + factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); + EntityManager em = factory.createEntityManager(); + + // Begin a new local transaction so that we can persist a new entity + em.getTransaction().begin(); + + // read the existing entries + Query q = em.createQuery("select m from Person m"); + // Persons should be empty + + // do we have entries? + boolean createNewEntries = (q.getResultList().size() == 0); + + // No, so lets create new entries + if (createNewEntries) { + assertTrue(q.getResultList().size() == 0); + Family family = new Family(); + family.setDescription("Family for the Knopfs"); + em.persist(family); + for (int i = 0; i < 40; i++) { + Person person = new Person(); + person.setFirstName("Jim_" + i); + person.setLastName("Knopf_" + i); + em.persist(person); + // now persists the family person relationship + family.getMembers().add(person); + em.persist(person); + em.persist(family); + } + } + + // Commit the transaction, which will cause the entity to + // be stored in the database + em.getTransaction().commit(); + + // It is always good practice to close the EntityManager so that + // resources are conserved. + em.close(); + + } + + @Test + public void checkAvailablePeople() { + + // now lets check the database and see if the created entries are there + // create a fresh, new EntityManager + EntityManager em = factory.createEntityManager(); + + // Perform a simple query for all the Message entities + Query q = em.createQuery("select m from Person m"); + + // We should have 40 Persons in the database + assertTrue(q.getResultList().size() == 40); + + em.close(); + } + + @Test + public void checkFamily() { + EntityManager em = factory.createEntityManager(); + // Go through each of the entities and print out each of their + // messages, as well as the date on which it was created + Query q = em.createQuery("select f from Family f"); + + // We should have one family with 40 persons + assertTrue(q.getResultList().size() == 1); + assertTrue(((Family) q.getSingleResult()).getMembers().size() == 40); + em.close(); + } + + @Test(expected = javax.persistence.NoResultException.class) + public void deletePerson() { + EntityManager em = factory.createEntityManager(); + // Begin a new local transaction so that we can persist a new entity + em.getTransaction().begin(); + Query q = em + .createQuery("SELECT p FROM Person p WHERE p.firstName = :firstName AND p.lastName = :lastName"); + q.setParameter("firstName", "Jim_1"); + q.setParameter("lastName", "Knopf_!"); + Person user = (Person) q.getSingleResult(); + em.remove(user); + em.getTransaction().commit(); + Person person = (Person) q.getSingleResult(); + // Begin a new local transaction so that we can persist a new entity + + em.close(); + } +}