Compare commits
No commits in common. "main" and "v2.6" have entirely different histories.
@ -11,4 +11,4 @@ global:
|
||||
repository: null
|
||||
sc: git
|
||||
deploy:
|
||||
artifact: service/build/ROOT.war
|
||||
artifact: build/ROOT.war
|
||||
|
98
build.gradle
@ -1,24 +1,92 @@
|
||||
plugins { id 'com.palantir.git-version' version '0.5.2' }
|
||||
import org.apache.tools.ant.filters.ReplaceTokens
|
||||
|
||||
allprojects {
|
||||
group = "com.jdbernard"
|
||||
|
||||
buildscript {
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
maven { url 'https://mvn.jdb-labs.com/repo' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.jdbernard:gradle-exec-util:0.2.0'
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
plugins { id 'com.palantir.git-version' version '0.5.2' }
|
||||
|
||||
apply plugin: "groovy"
|
||||
apply plugin: "maven"
|
||||
apply plugin: "war"
|
||||
|
||||
group = "com.jdbernard"
|
||||
|
||||
import static com.jdbernard.gradle.ExecUtil.*
|
||||
|
||||
version = gitVersion()
|
||||
|
||||
// webAppDirName = "build/webapp/main"
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
maven { url "https://mvn.jdb-labs.com/repo" }
|
||||
}
|
||||
|
||||
apply plugin: 'com.palantir.git-version'
|
||||
version = gitVersion()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'ch.qos.logback:logback-classic:1.1.8'
|
||||
compile 'ch.qos.logback:logback-core:1.1.8'
|
||||
compile 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.6'
|
||||
compile 'com.lambdaworks:scrypt:1.4.0'
|
||||
compile 'com.zaxxer:HikariCP:2.5.1'
|
||||
compile 'javax:javaee-api:7.0'
|
||||
compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
|
||||
compile 'joda-time:joda-time:2.7'
|
||||
compile 'org.codehaus.groovy:groovy-all:2.4.7'
|
||||
compile 'org.slf4j:slf4j-api:1.7.22'
|
||||
runtime 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.2'
|
||||
runtime 'org.glassfish.jersey.containers:jersey-container-servlet:2.16'
|
||||
runtime 'org.glassfish.jersey.media:jersey-media-json-jackson:2.16'
|
||||
providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testRuntime 'com.h2database:h2:1.4.186'
|
||||
}
|
||||
|
||||
war {
|
||||
from "resources/webapp"
|
||||
from "build/webapp"
|
||||
filter(ReplaceTokens, tokens: [version: version])
|
||||
rename '(.+)(\\..*(css|js))', '$1-' + version + '$2'
|
||||
webInf { from 'resources/main/WEB-INF' }
|
||||
exclude "**/.*.swp", "**/.sass-cache"
|
||||
}
|
||||
|
||||
test { testLogging { events 'failed' } }
|
||||
|
||||
task testWar(type: War) {
|
||||
from 'resources/webapp'
|
||||
filter(ReplaceTokens, tokens: [version: version])
|
||||
rename '(.+)(\\..*(css|js))', '$1-' + version + '$2'
|
||||
webInf { from 'resources/test/WEB-INF' }
|
||||
classifier 'test' }
|
||||
|
||||
task compileScss(
|
||||
group: 'build',
|
||||
description: 'Compile SCSS files into CSS.',
|
||||
type: Exec
|
||||
) {
|
||||
executable "scss"
|
||||
args "--update", "src/main/webapp/css:build/webapp/css"
|
||||
}
|
||||
|
||||
war.dependsOn compileScss
|
||||
testWar.dependsOn compileScss
|
||||
|
||||
task deployProd(dependsOn: ['build']) { doLast {
|
||||
def warName = "${project.name}-${version}.war"
|
||||
def artifactName = "ROOT.war"
|
||||
|
||||
copy {
|
||||
from "build/libs"
|
||||
into "build"
|
||||
include warName
|
||||
rename warName, artifactName }
|
||||
|
||||
exec("eb", "deploy", "-l", "${project.name}-${version}")
|
||||
} }
|
||||
|
34
resources/test/testdb.init.sql
Normal file
@ -0,0 +1,34 @@
|
||||
INSERT INTO SERVICES (date, service_type) values
|
||||
('2015-02-01', 'SUN_AM'),
|
||||
('2015-02-01', 'SUN_PM'),
|
||||
('2015-02-04', 'WED'),
|
||||
('2015-02-08', 'SUN_AM'),
|
||||
('2015-02-08', 'SUN_PM'),
|
||||
('2015-02-11', 'WED'),
|
||||
('2015-02-15', 'SUN_AM'),
|
||||
('2015-02-15', 'SUN_PM');
|
||||
|
||||
INSERT INTO songs (name, artists) VALUES
|
||||
('Breathe On Us', 'Kari Jobe'),
|
||||
('How Great Is Our God', 'Chris Tomlin'),
|
||||
('Glorious', 'Martha Munizzi'),
|
||||
('Rez Power', 'Israel Houghton');
|
||||
|
||||
INSERT INTO performances (service_id, song_id, pianist, organist, bassist, drummer, guitarist, leader) VALUES
|
||||
(1, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(1, 2, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(1, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(2, 2, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(2, 3, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(2, 4, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(3, 1, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood'),
|
||||
(3, 2, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood'),
|
||||
(4, 3, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(5, 4, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Tony Bagliore', 'Rachel Wood'),
|
||||
(6, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(7, 2, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(8, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood');
|
||||
|
||||
INSERT INTO users (username, pwd, role) VALUES
|
||||
('admin', '', 'admin'),
|
||||
('test', '', '');
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
@ -1,79 +0,0 @@
|
||||
import org.apache.tools.ant.filters.ReplaceTokens
|
||||
|
||||
apply plugin: "groovy"
|
||||
apply plugin: "maven"
|
||||
apply plugin: "war"
|
||||
|
||||
// webAppDirName = "build/webapp/main"
|
||||
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath 'com.jdbernard:gradle-exec-util:0.2.0'
|
||||
}
|
||||
}
|
||||
|
||||
import static com.jdbernard.gradle.ExecUtil.*
|
||||
|
||||
dependencies {
|
||||
compile localGroovy()
|
||||
compile 'ch.qos.logback:logback-classic:1.1.8'
|
||||
compile 'ch.qos.logback:logback-core:1.1.8'
|
||||
compile 'org.slf4j:slf4j-api:1.7.22'
|
||||
compile 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.6'
|
||||
compile 'com.lambdaworks:scrypt:1.4.0'
|
||||
compile 'com.zaxxer:HikariCP:2.5.1'
|
||||
compile 'javax:javaee-api:7.0'
|
||||
compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
|
||||
compile 'joda-time:joda-time:2.7'
|
||||
runtime 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.2'
|
||||
runtime 'org.glassfish.jersey.containers:jersey-container-servlet:2.16'
|
||||
runtime 'org.glassfish.jersey.media:jersey-media-json-jackson:2.16'
|
||||
providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile 'com.jdblabs:db-migrate.groovy:0.2.5'
|
||||
testRuntime 'com.h2database:h2:1.4.186'
|
||||
}
|
||||
|
||||
war {
|
||||
from "resources/webapp"
|
||||
from "build/webapp"
|
||||
filter(ReplaceTokens, tokens: [version: version])
|
||||
rename '(.+)(\\..*(css|js))', '$1-' + version + '$2'
|
||||
webInf { from 'resources/main/WEB-INF' }
|
||||
exclude "**/.*.swp", "**/.sass-cache"
|
||||
}
|
||||
|
||||
test { testLogging { events 'failed' } }
|
||||
|
||||
task testWar(type: War) {
|
||||
from 'resources/webapp'
|
||||
filter(ReplaceTokens, tokens: [version: version])
|
||||
rename '(.+)(\\..*(css|js))', '$1-' + version + '$2'
|
||||
webInf { from 'resources/test/WEB-INF' }
|
||||
classifier 'test' }
|
||||
|
||||
task compileScss(
|
||||
group: 'build',
|
||||
description: 'Compile SCSS files into CSS.',
|
||||
type: Exec
|
||||
) {
|
||||
executable "scss"
|
||||
args "--update", "src/main/webapp/css:build/webapp/css"
|
||||
}
|
||||
|
||||
war.dependsOn compileScss
|
||||
testWar.dependsOn compileScss
|
||||
|
||||
task deployProd(dependsOn: ['build']) { doLast {
|
||||
def warName = "${project.name}-${version}.war"
|
||||
def artifactName = "ROOT.war"
|
||||
|
||||
copy {
|
||||
from "build/libs"
|
||||
into "build"
|
||||
include warName
|
||||
rename warName, artifactName }
|
||||
|
||||
exec("eb", "deploy", "-l", "${parent.name}-${project.name}-${version}")
|
||||
} }
|
@ -1,34 +0,0 @@
|
||||
INSERT INTO SERVICES (date, service_type) values
|
||||
('2015-02-01', 'SUN_AM'),
|
||||
('2015-02-01', 'SUN_PM'),
|
||||
('2015-02-04', 'WED'),
|
||||
('2015-02-08', 'SUN_AM'),
|
||||
('2015-02-08', 'SUN_PM'),
|
||||
('2015-02-11', 'WED'),
|
||||
('2015-02-15', 'SUN_AM'),
|
||||
('2015-02-15', 'SUN_PM');
|
||||
|
||||
INSERT INTO songs (name, artists) VALUES
|
||||
('Breathe On Us', 'Kari Jobe'),
|
||||
('How Great Is Our God', 'Chris Tomlin'),
|
||||
('Glorious', 'Martha Munizzi'),
|
||||
('Rez Power', 'Israel Houghton');
|
||||
|
||||
INSERT INTO performances (service_id, song_id, rank, pianist, organist, bassist, drummer, guitarist, leader) VALUES
|
||||
(1, 1, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(1, 2, 2, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(1, 3, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(2, 2, 1, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(2, 3, 2, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(2, 4, 3, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(3, 1, 0, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood'),
|
||||
(3, 2, 0, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood'),
|
||||
(4, 3, 0, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'),
|
||||
(5, 4, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Tony Bagliore', 'Rachel Wood'),
|
||||
(6, 1, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(7, 2, 1, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'),
|
||||
(8, 3, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood');
|
||||
|
||||
INSERT INTO users (username, pwd, role) VALUES
|
||||
('admin', '', 'admin'),
|
||||
('test', '', '');
|
@ -1,9 +0,0 @@
|
||||
-- # New Life Songs DB
|
||||
-- @author Jonathan Bernard <jdb@jdb-labs.com>
|
||||
--
|
||||
-- PostgreSQL database un-creation sript.
|
||||
DROP TABLE performances;
|
||||
DROP TABLE services;
|
||||
DROP TABLE songs;
|
||||
DROP TABLE tokens;
|
||||
DROP TABLE users;
|
@ -1,5 +0,0 @@
|
||||
-- # New Life Songs DB
|
||||
-- @author Jonathan Bernard <jdb@jdb-labs.com>
|
||||
--
|
||||
-- Remove performances.rank
|
||||
ALTER TABLE performances DROP COLUMN rank;
|
@ -1,6 +0,0 @@
|
||||
-- # New Life Songs DB
|
||||
-- @author Jonathan Bernard <jdb@jdb-labs.com>
|
||||
--
|
||||
-- Add performances.rank: the rank of the performance in the service, aka. the
|
||||
-- "track number" if the service were an album.
|
||||
ALTER TABLE performances ADD COLUMN rank integer NOT NULL DEFAULT 0;
|
@ -1 +0,0 @@
|
||||
include 'service', 'uploader'
|
@ -152,10 +152,10 @@ public class NLSongsDB {
|
||||
public Performance create(Performance perf) {
|
||||
// TODO: handle constraint violation (same service and song ids)
|
||||
sql.executeInsert(
|
||||
"INSERT INTO performances (service_id, song_id, rank, pianist, " +
|
||||
"INSERT INTO performances (service_id, song_id, pianist, " +
|
||||
"organist, bassist, drummer, guitarist, leader) VALUES " +
|
||||
"(?, ?, ?, ?, ?, ?, ?, ?)", [perf.serviceId, perf.songId,
|
||||
perf.rank, perf.pianist, perf.organist, perf.bassist, perf.drummer,
|
||||
perf.pianist, perf.organist, perf.bassist, perf.drummer,
|
||||
perf.guitarist, perf.leader])
|
||||
return perf }
|
||||
|
||||
@ -163,11 +163,10 @@ public class NLSongsDB {
|
||||
// TODO: handle constraint violation (same service and song ids)
|
||||
return sql.executeUpdate(
|
||||
"UPDATE performances SET pianist = ?, organist = ?, " +
|
||||
"bassist = ?, drummer = ?, guitarist = ?, leader = ?, " +
|
||||
"rank = ? WHERE service_id = ? AND song_id = ?",
|
||||
"bassist = ?, drummer = ?, guitarist = ?, leader = ? " +
|
||||
"WHERE service_id = ? AND song_id = ?",
|
||||
[perf.pianist, perf.organist, perf.bassist, perf.drummer,
|
||||
perf.guitarist, perf.leader, perf.rank, perf.serviceId,
|
||||
perf.songId]) }
|
||||
perf.guitarist, perf.leader, perf.serviceId, perf.songId]) }
|
||||
|
||||
public int delete(Performance perf) {
|
||||
sql.execute(
|
@ -4,7 +4,6 @@ public class Performance implements Serializable {
|
||||
|
||||
int serviceId
|
||||
int songId
|
||||
int rank
|
||||
String pianist
|
||||
String organist
|
||||
String bassist
|
||||
@ -20,7 +19,6 @@ public class Performance implements Serializable {
|
||||
|
||||
return (this.serviceId == that.serviceId &&
|
||||
this.songId == that.songId &&
|
||||
this.rank == that.rank &&
|
||||
this.pianist == that.pianist &&
|
||||
this.organist == that.organist &&
|
||||
this.bassist == that.bassist &&
|
||||
@ -29,5 +27,5 @@ public class Performance implements Serializable {
|
||||
this.leader == that.leader) }
|
||||
|
||||
@Override String toString() {
|
||||
return "($serviceId, $songId)-$rank: $leader - $pianist" }
|
||||
return "($serviceId, $songId): $leader - $pianist" }
|
||||
}
|
@ -11,8 +11,7 @@ public class NLSongsContext {
|
||||
public static String mediaBaseUrl
|
||||
|
||||
public static String makeUrl(Service service, Song song) {
|
||||
return mediaBaseUrl + '/' + service.localDate.toString('yyyy') + "/" +
|
||||
service.localDate.toString('yyyy-MM-dd') + '_' +
|
||||
return mediaBaseUrl + '/' + service.localDate.toString('yyyy-MM-dd') + '_' +
|
||||
service.serviceType.name().toLowerCase() + '_' +
|
||||
song.name.replaceAll(/[\s'"\\\/\?!]/, '') + '.mp3' }
|
||||
}
|
8
src/main/sql/create-schema.postgre.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- DROP DATABASE IF EXISTS nlsongs;
|
||||
CREATE DATABASE nlsongs
|
||||
ENCODING = 'UTF8'
|
||||
LC_COLLATE = 'en_US.UTF-8'
|
||||
LC_CTYPE = 'en_US.UTF-8'
|
||||
CONNECTION LIMIT = 1;
|
||||
|
||||
\c nlsongs
|
@ -4,7 +4,8 @@
|
||||
-- PostgreSQL database creation sript.
|
||||
|
||||
-- Services table
|
||||
CREATE TABLE services (
|
||||
DROP TABLE IF EXISTS services;
|
||||
CREATE TABLE IF NOT EXISTS services (
|
||||
id SERIAL,
|
||||
date DATE NOT NULL,
|
||||
service_type VARCHAR(16) DEFAULT NULL,
|
||||
@ -12,8 +13,10 @@ CREATE TABLE services (
|
||||
CONSTRAINT uc_serviceTypeAndDate UNIQUE (date, service_type),
|
||||
PRIMARY KEY (id));
|
||||
|
||||
|
||||
-- Songs table
|
||||
CREATE TABLE songs (
|
||||
DROP TABLE IF EXISTS songs;
|
||||
CREATE TABLE IF NOT EXISTS songs (
|
||||
id SERIAL,
|
||||
name VARCHAR(128) NOT NULL,
|
||||
artists VARCHAR(256) DEFAULT NULL,
|
||||
@ -22,7 +25,8 @@ CREATE TABLE songs (
|
||||
|
||||
|
||||
-- performances table
|
||||
CREATE TABLE performances (
|
||||
DROP TABLE IF EXISTS performances;
|
||||
CREATE TABLE IF NOT EXISTS performances (
|
||||
service_id INTEGER NOT NULL,
|
||||
song_id INTEGER NOT NULL,
|
||||
pianist VARCHAR(64) DEFAULT NULL,
|
||||
@ -36,16 +40,16 @@ CREATE TABLE performances (
|
||||
FOREIGN KEY (song_id) REFERENCES songs (id) ON DELETE CASCADE);
|
||||
|
||||
|
||||
-- Users table
|
||||
CREATE TABLE users (
|
||||
DROP TABLE IF EXISTS users;
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id SERIAL,
|
||||
username VARCHAR(64) UNIQUE NOT NULL,
|
||||
pwd VARCHAR(80),
|
||||
role VARCHAR(16) NOT NULL,
|
||||
PRIMARY KEY (id));
|
||||
|
||||
-- Tokens table
|
||||
CREATE TABLE tokens (
|
||||
DROP TABLE IF EXISTS tokens;
|
||||
CREATE TABLE IF NOT EXISTS tokens (
|
||||
token VARCHAR(64),
|
||||
user_id INTEGER NOT NULL,
|
||||
expires TIMESTAMP NOT NULL,
|
5
src/main/sql/drop-tables.sql
Normal file
@ -0,0 +1,5 @@
|
||||
DROP TABLE tokens;
|
||||
DROP TABLE users;
|
||||
DROP TABLE performances;
|
||||
DROP TABLE songs;
|
||||
DROP TABLE services;
|
@ -64,7 +64,7 @@ if (!service) { response.sendError(response.SC_NOT_FOUND); return }
|
||||
<tbody>
|
||||
<% songsDB.findPerformancesForServiceId(service.id).
|
||||
collect { [perf: it, song: songsDB.findSong(it.songId)] }.
|
||||
sort { it.song.name }.sort { it.perf.rank }.each { row -> %>
|
||||
sort { it.song.name }.each { row -> %>
|
||||
<tr><td class=actions><a href="<%= NLSongsContext.makeUrl(service, row.song) %>"><i class="fa fa-download"></i></a></td>
|
||||
<td class=song-name><a href='../song/<%= row.song.id %>'><%=
|
||||
row.song.name %></a></td>
|
@ -3,7 +3,6 @@ package com.jdbernard.nlsongs.service
|
||||
import com.jdbernard.nlsongs.db.NLSongsDB
|
||||
import com.jdbernard.nlsongs.model.*
|
||||
import com.jdbernard.nlsongs.servlet.NLSongsContext
|
||||
import com.jdblabs.dbmigrate.DbMigrate
|
||||
import com.zaxxer.hikari.HikariConfig
|
||||
import com.zaxxer.hikari.HikariDataSource
|
||||
|
||||
@ -25,9 +24,8 @@ import org.slf4j.LoggerFactory
|
||||
|
||||
public class NLSongsDBTest {
|
||||
|
||||
static NLSongsDB songsDB
|
||||
static NLSongsDB songsDB;
|
||||
static Sql sql
|
||||
static DbMigrate dbmigrate
|
||||
static Logger log = LoggerFactory.getLogger(NLSongsDBTest)
|
||||
|
||||
def dateFormat
|
||||
@ -63,23 +61,23 @@ public class NLSongsDBTest {
|
||||
new Song(id: it[0], name: it[1], artists: it[2]) }
|
||||
|
||||
this.performances = [
|
||||
[1, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood', 1],
|
||||
[1, 2, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood', 2],
|
||||
[1, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood', 3],
|
||||
[2, 2, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood', 1],
|
||||
[2, 3, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood', 2],
|
||||
[2, 4, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood', 3],
|
||||
[3, 1, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood', 0],
|
||||
[3, 2, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood', 0],
|
||||
[4, 3, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood', 0],
|
||||
[5, 4, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Tony Bagliore', 'Rachel Wood', 1],
|
||||
[6, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood', 1],
|
||||
[7, 2, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood', 1],
|
||||
[8, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood', 1] ].collect {
|
||||
[1, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'],
|
||||
[1, 2, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'],
|
||||
[1, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'],
|
||||
[2, 2, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'],
|
||||
[2, 3, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'],
|
||||
[2, 4, 'Trevor Delano', 'Connie Bernard', 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'],
|
||||
[3, 1, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood'],
|
||||
[3, 2, 'Rachel Wood', 'Krista Hatcher', 'Jonathan Bernard', 'Jared Wood', 'Tony Bagliore', 'Rachel Wood'],
|
||||
[4, 3, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser', 'Rachel Wood'],
|
||||
[5, 4, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Tony Bagliore', 'Rachel Wood'],
|
||||
[6, 1, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'],
|
||||
[7, 2, 'Trevor Delano', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'],
|
||||
[8, 3, 'Jared Wood', null, 'Jonathan Bernard', 'Christian Thompson', 'Andrew Fraiser; Tony Bagliore', 'Rachel Wood'] ].collect {
|
||||
|
||||
new Performance(serviceId: it[0], songId: it[1], pianist: it[2],
|
||||
organist: it[3], bassist: it[4], drummer: it[5],
|
||||
guitarist: it[6], leader: it[7], rank: it[8]) }
|
||||
guitarist: it[6], leader: it[7]) }
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
@ -92,13 +90,8 @@ public class NLSongsDBTest {
|
||||
HikariDataSource dataSource = new HikariDataSource(hcfg)
|
||||
|
||||
// Create NLSongsDB
|
||||
NLSongsDBTest.songsDB = new NLSongsDB(dataSource)
|
||||
NLSongsDBTest.sql = new Sql(dataSource)
|
||||
|
||||
// Setup our DB migration tool
|
||||
NLSongsDBTest.dbmigrate = new DbMigrate(
|
||||
migrationsDir: new File('src/main/sql'),
|
||||
sql: NLSongsDBTest.sql)
|
||||
this.songsDB = new NLSongsDB(dataSource)
|
||||
this.sql = new Sql(dataSource)
|
||||
|
||||
// Set NLSongsContext
|
||||
NLSongsContext.songsDB = songsDB }
|
||||
@ -110,18 +103,18 @@ public class NLSongsDBTest {
|
||||
|
||||
@Before
|
||||
public void initData() {
|
||||
// Create the DB schema
|
||||
dbmigrate.up()
|
||||
// Get the DB Schema and test data.
|
||||
File createSchemaSql = new File("src/main/sql/create-tables.sql")
|
||||
File testDataSql = new File("resources/test/testdb.init.sql")
|
||||
|
||||
// Create the DB Schema
|
||||
sql.execute(createSchemaSql.text)
|
||||
|
||||
// Populate the DB with test data.
|
||||
File testDataSql = new File("resources/test/testdb.init.sql")
|
||||
sql.execute(testDataSql.text) }
|
||||
|
||||
@After
|
||||
public void destroyData() {
|
||||
dbmigrate.down(Integer.MAX_VALUE) }
|
||||
|
||||
/// ### Services
|
||||
|
||||
@Test public void shouldCreateService() {
|
||||
def service = new Service(
|
||||
date: new Date(), serviceType: ServiceType.SUN_AM)
|
||||
@ -185,8 +178,8 @@ public class NLSongsDBTest {
|
||||
assertCollectionsEqual(
|
||||
performances.findAll { it.serviceId != 1 },
|
||||
songsDB.findAllPerformances()) }
|
||||
|
||||
/// ### Songs
|
||||
|
||||
@Test public void shoudCreateSong() {
|
||||
def song = new Song(name: "Test Song", artists: ["Bob Sam"])
|
||||
def newSong = songsDB.create(song)
|
||||
@ -254,10 +247,5 @@ public class NLSongsDBTest {
|
||||
log.info("C2: $c2")
|
||||
assertEquals(c1.size(), c2.size())
|
||||
|
||||
c1.each {
|
||||
def isPresent = c2.contains(it)
|
||||
if (!isPresent) log.info("$it is not within $c2.")
|
||||
assertTrue(isPresent) }
|
||||
|
||||
assertTrue(c1.every { c2.contains(it) }) }
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
apply plugin: 'groovy'
|
||||
apply plugin: 'application'
|
||||
|
||||
mainClassName = 'com.jdbernard.nlsongs.NLSongsUploader'
|
||||
|
||||
dependencies {
|
||||
compile localGroovy()
|
||||
compile 'ch.qos.logback:logback-classic:1.1.8'
|
||||
compile 'ch.qos.logback:logback-core:1.1.8'
|
||||
compile 'org.slf4j:slf4j-api:1.7.22'
|
||||
compile 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.6'
|
||||
compile 'com.zaxxer:HikariCP:2.5.1'
|
||||
compile 'com.miglayout:miglayout-swing:5.0'
|
||||
compile project(':service')
|
||||
}
|
||||
|
||||
task writeVersionFile(
|
||||
group: 'build',
|
||||
description: 'Write the version to VERSION.txt') { doLast {
|
||||
|
||||
(new File("${buildDir}/classes/main/VERSION.txt")).text = version
|
||||
} }
|
||||
|
||||
build.dependsOn writeVersionFile
|
@ -1,37 +0,0 @@
|
||||
package com.jdbernard.nlsongs
|
||||
|
||||
import groovy.beans.Bindable
|
||||
import groovy.swing.SwingBuilder
|
||||
import javax.swing.JFrame
|
||||
import net.miginfocom.swing.MigLayout
|
||||
|
||||
public class NLSongsUploader {
|
||||
|
||||
public static final String VERSION =
|
||||
NLSongsUploader.getResourceAsStream('/VERSION.txt').text
|
||||
|
||||
// GUI Elements (View)
|
||||
SwingBuilder swing = new SwingBuilder()
|
||||
JFrame rootFrame
|
||||
|
||||
public static void main(String[] args) { def inst = new NLSongsUploader() }
|
||||
|
||||
public NLSongsUploader() {
|
||||
|
||||
initGui()
|
||||
rootFrame.show()
|
||||
}
|
||||
|
||||
private void initGui() {
|
||||
|
||||
swing.edtBuilder {
|
||||
this.rootFrame = frame(title: "New Life Songs Uploader ${VERSION}",
|
||||
iconImages: [imageIcon('/icon.png').image],
|
||||
preferredSize: [1024, 768], pack: true,
|
||||
layout: new MigLayout("ins 0, fill"),
|
||||
defaultCloseOperation: JFrame.EXIT_ON_CLOSE) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 6.2 KiB |