diff --git a/adapter/adapter-api/pom.xml b/adapter/adapter-api/pom.xml
index 126246f5c..804b80f63 100644
--- a/adapter/adapter-api/pom.xml
+++ b/adapter/adapter-api/pom.xml
@@ -1,75 +1,75 @@
4.0.0
SHRINE Adapter Client API
shrine-adapter-client-api
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-client
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
diff --git a/adapter/adapter-service/pom.xml b/adapter/adapter-service/pom.xml
index bf7df02da..75c163792 100644
--- a/adapter/adapter-service/pom.xml
+++ b/adapter/adapter-service/pom.xml
@@ -1,181 +1,181 @@
4.0.0
SHRINE Adapter
shrine-adapter-service
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
org.squeryl
squeryl_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-data-commons
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-config
${project.version}
com.typesafe.slick
slick_2.11
${slick-version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
mysql
mysql-connector-java
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
net.shrine
shrine-util
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
diff --git a/apps/dashboard-app/pom.xml b/apps/dashboard-app/pom.xml
index 24066dd5c..b8b6972e2 100644
--- a/apps/dashboard-app/pom.xml
+++ b/apps/dashboard-app/pom.xml
@@ -1,176 +1,176 @@
shrine-base
net.shrine
- 1.21.1
+ 1.21.2
../../pom.xml
4.0.0
dashboard-app
Dashboard App
jar
net.alchim31.maven
scala-maven-plugin
com.github.eirslett
frontend-maven-plugin
0.0.23
src/main/js
install node and npm
install-node-and-npm
v0.10.33
2.7.4
npm install
npm
generate-resources
install
bower install
bower
install
grunt default
grunt
--no-color
io.spray
spray-routing_2.11
${spray-version}
io.spray
spray-servlet_2.11
${spray-version}
io.spray
spray-util_2.11
${spray-version}
io.spray
spray-testkit_2.11
${spray-version}
test
com.typesafe.akka
akka-actor_2.11
${akka-version}
com.typesafe.akka
akka-slf4j_2.11
${akka-version}
com.typesafe.akka
akka-testkit_2.11
${akka-testkit-version}
test
org.json4s
json4s-native_2.11
${json4s-version}
com.typesafe.slick
slick_2.11
${slick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
com.h2database
h2
${h2-version}
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-auth
${project.version}
mysql
mysql-connector-java
${mysql-version}
io.jsonwebtoken
jjwt
0.6.0
diff --git a/apps/dashboard-app/src/main/js/pom.xml b/apps/dashboard-app/src/main/js/pom.xml
index c8064a77c..90a1e0058 100644
--- a/apps/dashboard-app/src/main/js/pom.xml
+++ b/apps/dashboard-app/src/main/js/pom.xml
@@ -1,92 +1,92 @@
shrine-base
net.shrine
- 1.21.1-SNAPSHOT
+ 1.21.2-SNAPSHOT
4.0.0
net.shrine
dashboard-app-client
pom
com.github.eirslett
frontend-maven-plugin
0.0.23
install node and npm
install-node-and-npm
v0.10.33
2.7.4
npm install
npm
generate-resources
install
bower install
bower
install
grunt default
grunt
--no-color
diff --git a/apps/dashboard-war/pom.xml b/apps/dashboard-war/pom.xml
index 52cf1ebba..2d1527174 100644
--- a/apps/dashboard-war/pom.xml
+++ b/apps/dashboard-war/pom.xml
@@ -1,38 +1,38 @@
shrine-base
net.shrine
- 1.21.1
+ 1.21.2
../../pom.xml
4.0.0
dashboard-war
Dashboard War
war
org.apache.maven.plugins
maven-war-plugin
shrine-dashboard
net.shrine
dashboard-app
${project.version}
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
diff --git a/apps/proxy/pom.xml b/apps/proxy/pom.xml
index ec0d53eed..290188866 100644
--- a/apps/proxy/pom.xml
+++ b/apps/proxy/pom.xml
@@ -1,53 +1,53 @@
4.0.0
SHRINE Proxy
shrine-proxy
war
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
javax.servlet
javax.servlet-api
provided
src/main/scala
src/test/scala
shrine-proxy
net.alchim31.maven
scala-maven-plugin
diff --git a/apps/shrine-app/pom.xml b/apps/shrine-app/pom.xml
index 2fa418dc6..fa7bbb688 100644
--- a/apps/shrine-app/pom.xml
+++ b/apps/shrine-app/pom.xml
@@ -1,108 +1,108 @@
shrine-base
net.shrine
- 1.21.1
+ 1.21.2
../../pom.xml
4.0.0
shrine-app
SHRINE App
jar
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-hms-core
${project.version}
net.shrine
shrine-qep
${project.version}
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-broadcaster-service
${project.version}
net.shrine
shrine-adapter-service
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-ont-support
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
net.shrine
shrine-broadcaster-aggregator
${project.version}
test-jar
test
net.shrine
shrine-client
${project.version}
test-jar
test
diff --git a/apps/steward-app/pom.xml b/apps/steward-app/pom.xml
index 6f3a4f925..21e87b270 100644
--- a/apps/steward-app/pom.xml
+++ b/apps/steward-app/pom.xml
@@ -1,192 +1,192 @@
shrine-base
net.shrine
- 1.21.1
+ 1.21.2
../../pom.xml
4.0.0
steward-app
Steward App
jar
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
com.github.eirslett
frontend-maven-plugin
0.0.23
src/main/js
install node and npm
install-node-and-npm
v0.10.33
2.7.4
npm install
npm
generate-resources
install
bower install
bower
install
grunt default
grunt
--no-color
io.spray
spray-routing_2.11
${spray-version}
io.spray
spray-servlet_2.11
${spray-version}
io.spray
spray-util_2.11
${spray-version}
io.spray
spray-testkit_2.11
${spray-version}
test
com.typesafe.akka
akka-actor_2.11
${akka-version}
com.typesafe.akka
akka-slf4j_2.11
${akka-version}
com.typesafe.akka
akka-testkit_2.11
${akka-testkit-version}
test
org.json4s
json4s-native_2.11
${json4s-version}
com.typesafe.slick
slick_2.11
${slick-version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
com.h2database
h2
${h2-version}
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-auth
${project.version}
mysql
mysql-connector-java
${mysql-version}
diff --git a/apps/steward-app/src/main/js/pom.xml b/apps/steward-app/src/main/js/pom.xml
index 3caec8575..a89d17cec 100644
--- a/apps/steward-app/src/main/js/pom.xml
+++ b/apps/steward-app/src/main/js/pom.xml
@@ -1,92 +1,92 @@
shrine-base
net.shrine
- 1.21.1-SNAPSHOT
+ 1.21.2-SNAPSHOT
4.0.0
net.shrine
steward-client
pom
com.github.eirslett
frontend-maven-plugin
0.0.23
install node and npm
install-node-and-npm
v0.10.33
2.7.4
npm install
npm
generate-resources
install
bower install
bower
install
grunt default
grunt
--no-color
diff --git a/apps/steward-war/pom.xml b/apps/steward-war/pom.xml
index e7a51239e..31c875599 100644
--- a/apps/steward-war/pom.xml
+++ b/apps/steward-war/pom.xml
@@ -1,44 +1,44 @@
shrine-base
net.shrine
- 1.21.1
+ 1.21.2
../../pom.xml
4.0.0
steward
Steward War
war
org.apache.maven.plugins
maven-war-plugin
steward
net.shrine
steward-app
${project.version}
com.h2database
h2
${h2-version}
test
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
diff --git a/apps/war/pom.xml b/apps/war/pom.xml
index f50db6ec6..9e5d87783 100644
--- a/apps/war/pom.xml
+++ b/apps/war/pom.xml
@@ -1,59 +1,59 @@
4.0.0
SHRINE War
shrine-war
war
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-app
${project.version}
net.shrine
shrine-adapter-service
${project.version}
javax.servlet
javax.servlet-api
provided
com.sun.jersey
jersey-servlet
net.shrine
shrine-adapter-service
${project.version}
test-jar
test
shrine-cell
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/auth/pom.xml b/commons/auth/pom.xml
index a279c9065..3d1de8f9c 100644
--- a/commons/auth/pom.xml
+++ b/commons/auth/pom.xml
@@ -1,98 +1,98 @@
4.0.0
SHRINE Auth*
shrine-auth
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-protocol
${project.version}
com.typesafe.akka
akka-actor_2.11
2.3.8
org.json4s
json4s-native_2.11
3.2.11
io.spray
spray-client_2.11
1.3.3
io.spray
spray-routing_2.11
1.3.3
io.spray
spray-servlet_2.11
1.3.3
io.spray
spray-util_2.11
1.3.3
io.spray
spray-testkit_2.11
1.3.3
test
com.typesafe.akka
akka-slf4j_2.11
2.3.8
com.typesafe.akka
akka-testkit_2.11
2.3.11
test
net.shrine
shrine-client
${project.version}
net.shrine
shrine-test-commons
${project.version}
test-jar
test
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/client/pom.xml b/commons/client/pom.xml
index 3d315d745..2cc97bafa 100644
--- a/commons/client/pom.xml
+++ b/commons/client/pom.xml
@@ -1,69 +1,69 @@
4.0.0
SHRINE Client
shrine-client
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
com.sun.jersey
jersey-client
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/config/pom.xml b/commons/config/pom.xml
index 0128ca7f2..f2e0012ce 100644
--- a/commons/config/pom.xml
+++ b/commons/config/pom.xml
@@ -1,57 +1,57 @@
4.0.0
SHRINE Config
shrine-config
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.sf.opencsv
opencsv
com.typesafe
config
net.shrine
shrine-util
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/crypto/pom.xml b/commons/crypto/pom.xml
index 0c3aa822f..a67bdf2d7 100644
--- a/commons/crypto/pom.xml
+++ b/commons/crypto/pom.xml
@@ -1,53 +1,53 @@
4.0.0
SHRINE Crypto
shrine-crypto
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-config
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/data-commons/pom.xml b/commons/data-commons/pom.xml
index fa70b0a03..4e8d15e66 100644
--- a/commons/data-commons/pom.xml
+++ b/commons/data-commons/pom.xml
@@ -1,79 +1,79 @@
4.0.0
SHRINE Data Access Classes
shrine-data-commons
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.squeryl
squeryl_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
net.shrine
shrine-protocol
${project.version}
org.springframework
spring-jdbc
test
com.h2database
h2
test
diff --git a/commons/ont-support/pom.xml b/commons/ont-support/pom.xml
index cb8d8d7f7..51a7366f2 100644
--- a/commons/ont-support/pom.xml
+++ b/commons/ont-support/pom.xml
@@ -1,64 +1,64 @@
4.0.0
SHRINE Ontology Support
shrine-ont-support
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-util
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-client
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/protocol-query/pom.xml b/commons/protocol-query/pom.xml
index eedbba66d..f2bda6ff9 100644
--- a/commons/protocol-query/pom.xml
+++ b/commons/protocol-query/pom.xml
@@ -1,58 +1,58 @@
4.0.0
SHRINE Query Protocol
shrine-protocol-query
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.liftweb
lift-json_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
net.shrine
shrine-util
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/protocol/pom.xml b/commons/protocol/pom.xml
index 74f17072f..c25515246 100644
--- a/commons/protocol/pom.xml
+++ b/commons/protocol/pom.xml
@@ -1,87 +1,87 @@
4.0.0
SHRINE Protocol
shrine-protocol
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
net.shrine
shrine-protocol-query
${project.version}
net.shrine
shrine-util
${project.version}
net.shrine
shrine-util
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.liftweb
lift-json_${scala-major-version}
org.easymock
easymock
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
src/main/scala
src/test/scala
src/main/resources
true
shrine-versions.properties
net.alchim31.maven
scala-maven-plugin
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/test-commons/pom.xml b/commons/test-commons/pom.xml
index 9c71cabae..89a84e4ac 100644
--- a/commons/test-commons/pom.xml
+++ b/commons/test-commons/pom.xml
@@ -1,49 +1,49 @@
4.0.0
SHRINE Test Commons
shrine-test-commons
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
com.sun.jersey
jersey-client
test
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
src/test/scala
org.apache.maven.plugins
maven-jar-plugin
test-jar
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/util/pom.xml b/commons/util/pom.xml
index 73eae318b..c5622fa14 100644
--- a/commons/util/pom.xml
+++ b/commons/util/pom.xml
@@ -1,85 +1,85 @@
4.0.0
SHRINE Utility Code
shrine-util
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
org.apache.commons
commons-email
1.2
net.liftweb
lift-json_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
log4j
log4j
net.shrine
shrine-test-commons
${project.version}
test-jar
test
src/main/scala
src/test/scala
src/main/resources
true
shrine-versions.properties
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
2.6
test-jar
diff --git a/hms-support/hms-core/pom.xml b/hms-support/hms-core/pom.xml
index 4228b4932..38782cd0d 100644
--- a/hms-support/hms-core/pom.xml
+++ b/hms-support/hms-core/pom.xml
@@ -1,63 +1,63 @@
net.shrine
shrine-hms-support
- 1.21.1
+ 1.21.2
4.0.0
shrine-hms-core
SHRINE HMS Support (Core Classes)
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
org.easymock
easymock
test
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/hms-support/pom.xml b/hms-support/pom.xml
index fb25c7ea3..92a6ac4d2 100644
--- a/hms-support/pom.xml
+++ b/hms-support/pom.xml
@@ -1,16 +1,16 @@
4.0.0
SHRINE HMS Support
shrine-hms-support
pom
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
hms-core
diff --git a/hub/broadcaster-aggregator/pom.xml b/hub/broadcaster-aggregator/pom.xml
index 7f6fe0e2f..ffdbfa943 100644
--- a/hub/broadcaster-aggregator/pom.xml
+++ b/hub/broadcaster-aggregator/pom.xml
@@ -1,162 +1,162 @@
4.0.0
SHRINE Broadcaster Aggregator
shrine-broadcaster-aggregator
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
src/main/scala
src/test/scala
org.codehaus.mojo
tomcat-maven-plugin
1.0-beta-1
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
mysql
mysql-connector-java
net.shrine
shrine-util
${project.version}
test-jar
test
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
org.codehaus.mojo
findbugs-maven-plugin
2.3.1
Max
org.codehaus.mojo
cobertura-maven-plugin
2.3
org.apache.maven.plugins
maven-checkstyle-plugin
2.5
org.apache.maven.plugins
maven-pmd-plugin
2.4
1.6
diff --git a/hub/broadcaster-service/pom.xml b/hub/broadcaster-service/pom.xml
index 222bb41f7..1c0d259e9 100644
--- a/hub/broadcaster-service/pom.xml
+++ b/hub/broadcaster-service/pom.xml
@@ -1,149 +1,149 @@
4.0.0
SHRINE Broadcast Service
shrine-broadcaster-service
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
com.sun.jersey
jersey-server
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
log4j
log4j
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
org.codehaus.mojo
findbugs-maven-plugin
2.3.1
Max
org.codehaus.mojo
cobertura-maven-plugin
2.3
org.apache.maven.plugins
maven-checkstyle-plugin
2.5
org.apache.maven.plugins
maven-pmd-plugin
2.4
1.6
diff --git a/install/pom.xml b/install/pom.xml
index 0e2cef755..588b094bc 100644
--- a/install/pom.xml
+++ b/install/pom.xml
@@ -1,35 +1,35 @@
4.0.0
SHRINE Install Scripts
shrine-install-scripts
pom
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
shrine-install-scripts
org.apache.maven.plugins
maven-assembly-plugin
src/main/assembly/assembly.xml
make-assembly
package
single
diff --git a/integration/pom.xml b/integration/pom.xml
index bfb0404da..79565375f 100644
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -1,119 +1,119 @@
4.0.0
SHRINE Integration Tests
shrine-integration-tests
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
test
net.shrine
shrine-adapter-service
${project.version}
test
net.shrine
shrine-adapter-service
${project.version}
test-jar
test
net.shrine
shrine-adapter-client-api
${project.version}
test
net.shrine
shrine-broadcaster-aggregator
${project.version}
test
net.shrine
shrine-qep
${project.version}
test
net.shrine
shrine-broadcaster-service
${project.version}
test
com.h2database
h2
test
org.slf4j
slf4j-log4j12
test
org.springframework
spring-jdbc
test
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
diff --git a/pom.xml b/pom.xml
index 50d99e66b..d168e3ab5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,377 +1,377 @@
4.0.0
SHRINE
net.shrine
shrine-base
pom
- 1.21.1
+ 1.21.2
UTF-8
4.2.2.RELEASE
2.6.2
2.11.7
2.11
4.12
1.7.12
1.2.17
1.19
2.2.5
3.2.2
0.9.6-RC4
1.2.1
1.4.190
3.4
5.1.37
2.3
3.0.1
0.9.5
1.3.3
2.3.8
2.4.0
3.3.0
3.1.0
3.1.1.1
apps/dashboard-app
apps/dashboard-war
apps/steward-app
apps/steward-war
apps/proxy
apps/shrine-app
apps/war
qep/service
hub/broadcaster-aggregator
hub/broadcaster-service
adapter/adapter-api
adapter/adapter-service
hms-support
tools
commons/util
commons/auth
commons/protocol-query
commons/data-commons
commons/protocol
commons/crypto
commons/client
commons/config
commons/ont-support
commons/test-commons
install
integration
shrine-webclient
net.alchim31.maven
scala-maven-plugin
${scala-maven-plugin-version}
compile
compile
compile
test-compile
testCompile
test-compile
process-resources
compile
incremental
true
-XX:+AggressiveOpts
-XX:CompileThreshold=500
-XX:+UseFastAccessorMethods
-XX:+UseStringCache
-XX:+OptimizeStringConcat
-XX:+TieredCompilation
-XX:+UseConcMarkSweepGC
-XX:+DoEscapeAnalysis
-server
-Xms64m
-Xmx1024m
-XX:MaxPermSize=384m
${scala-version}
-Xcheckinit
-unchecked
-deprecation
-Xlint:adapted-args,inaccessible,infer-any,missing-interpolator,private-shadow,type-parameter-shadow,unsound-match
7
maven-compiler-plugin
7
org.codehaus.mojo
buildnumber-maven-plugin
1.1
org.apache.maven.plugins
maven-jar-plugin
2.4
org.apache.maven.plugins
maven-war-plugin
2.1.1
org.codehaus.mojo
buildnumber-maven-plugin
validate
create
{0,date,yyyy-MM-dd HH:mm:ss}
(not available)
org.apache.maven.plugins
maven-jar-plugin
true
${buildNumber}
${scmBranch}
${timestamp}
org.apache.maven.plugins
maven-war-plugin
true
${buildNumber}
${scmBranch}
${timestamp}
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
true
true
true
true
http://shrine-dev1.catalyst:6060/shrine/rest/happy
scm:git:https://open.med.harvard.edu/stash/scm/shrine/shrine.git
CBMI-Nexus
https://repo.open.med.harvard.edu/nexus/content/groups/public/
com.typesafe
config
${typesafe-config-version}
log4j
log4j
${log4j-version}
org.springframework
spring-jdbc
${spring.version}
test
com.h2database
h2
${h2-version}
test
org.easymock
easymock
${easymock-version}
test
org.slf4j
slf4j-log4j12
${slf4j-version}
test
mysql
mysql-connector-java
${mysql-version}
net.sf.opencsv
opencsv
${opencsv-version}
net.liftweb
lift-json_${scala-major-version}
${lift-version}
com.sun.jersey
jersey-server
${jersey-version}
com.sun.jersey
jersey-servlet
${jersey-version}
com.sun.jersey
jersey-client
${jersey-version}
org.squeryl
squeryl_${scala-major-version}
${squeryl-version}
javax.servlet
javax.servlet-api
${servlet-api-version}
provided
org.scala-lang
scala-library
${scala-version}
junit
junit
${junit-version}
test
org.scalatest
scalatest_${scala-major-version}
${scalatest-version}
test
org.scala-lang
scala-actors
org.scala-lang
scala-reflect
org.scala-lang
scala-actors
${scala-version}
test
org.scala-lang
scala-reflect
${scala-version}
nexus
Nexus Repo
https://repo.open.med.harvard.edu/nexus/content/repositories/snapshots
false
nexus
Nexus Repo
https://repo.open.med.harvard.edu/nexus/content/repositories/releases
diff --git a/qep/service/pom.xml b/qep/service/pom.xml
index 2f2d93ddd..200af10d3 100644
--- a/qep/service/pom.xml
+++ b/qep/service/pom.xml
@@ -1,215 +1,215 @@
4.0.0
SHRINE Service
shrine-qep
jar
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
false
org.squeryl
squeryl_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
com.sun.jersey
jersey-server
com.sun.jersey
jersey-client
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
com.typesafe.slick
slick_2.11
${slick-version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
mysql
mysql-connector-java
log4j
log4j
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
net.shrine
shrine-util
${project.version}
test-jar
test
org.codehaus.mojo
findbugs-maven-plugin
2.3.1
Max
org.codehaus.mojo
cobertura-maven-plugin
2.3
org.apache.maven.plugins
maven-checkstyle-plugin
2.5
org.apache.maven.plugins
maven-pmd-plugin
2.4
1.6
diff --git a/qep/service/src/main/scala/net/shrine/qep/AbstractQepService.scala b/qep/service/src/main/scala/net/shrine/qep/AbstractQepService.scala
index 2febdd90d..e39573d30 100644
--- a/qep/service/src/main/scala/net/shrine/qep/AbstractQepService.scala
+++ b/qep/service/src/main/scala/net/shrine/qep/AbstractQepService.scala
@@ -1,260 +1,260 @@
package net.shrine.qep
import net.shrine.aggregation.{Aggregator, Aggregators, DeleteQueryAggregator, FlagQueryAggregator, ReadInstanceResultsAggregator, RenameQueryAggregator, RunQueryAggregator, UnFlagQueryAggregator}
import net.shrine.audit.NetworkQueryId
import net.shrine.authentication.AuthenticationResult.Authenticated
import net.shrine.authentication.{AuthenticationResult, Authenticator, NotAuthenticatedException}
import net.shrine.authorization.AuthorizationResult.{Authorized, NotAuthorized}
import net.shrine.authorization.QueryAuthorizationService
import net.shrine.broadcaster.BroadcastAndAggregationService
import net.shrine.log.Loggable
import net.shrine.problem.{ProblemSources, AbstractProblem}
import net.shrine.protocol.{ErrorResponse, QueryResult, AggregatedReadInstanceResultsResponse, AggregatedRunQueryResponse, AuthenticationInfo, BaseShrineRequest, BaseShrineResponse, Credential, DeleteQueryRequest, FlagQueryRequest, QueryInstance, ReadApprovedQueryTopicsRequest, ReadInstanceResultsRequest, ReadPreviousQueriesRequest, ReadPreviousQueriesResponse, ReadQueryDefinitionRequest, ReadQueryInstancesRequest, ReadQueryInstancesResponse, ReadResultOutputTypesRequest, ReadResultOutputTypesResponse, RenameQueryRequest, ResultOutputType, RunQueryRequest, UnFlagQueryRequest}
import net.shrine.qep.audit.QepAuditDb
import net.shrine.qep.dao.AuditDao
import net.shrine.qep.queries.QepQueryDb
import net.shrine.util.XmlDateHelper
import scala.concurrent.{Await, Future}
import scala.concurrent.duration.Duration
/**
* @author clint
* @since Feb 19, 2014
*/
trait AbstractQepService[BaseResp <: BaseShrineResponse] extends Loggable {
val commonName:String
val auditDao: AuditDao
val authenticator: Authenticator
val authorizationService: QueryAuthorizationService
val includeAggregateResult: Boolean
val broadcastAndAggregationService: BroadcastAndAggregationService
val queryTimeout: Duration
val breakdownTypes: Set[ResultOutputType]
val collectQepAudit:Boolean
protected def doReadResultOutputTypes(request: ReadResultOutputTypesRequest): BaseResp = {
info(s"doReadResultOutputTypes($request)")
authenticateAndThen(request) { authResult =>
val resultOutputTypes = ResultOutputType.nonErrorTypes ++ breakdownTypes
//TODO: XXX: HACK: Would like to remove the cast
ReadResultOutputTypesResponse(resultOutputTypes).asInstanceOf[BaseResp]
}
}
protected def doFlagQuery(request: FlagQueryRequest, shouldBroadcast: Boolean = true): BaseResp = {
- authenticateAndThen(request) { authResult =>
+ authenticateAndThen(request) { authResult:Authenticated =>
QepQueryDb.db.insertQepQueryFlag(request)
doBroadcastQuery(request, new FlagQueryAggregator, shouldBroadcast,authResult)
}
}
protected def doUnFlagQuery(request: UnFlagQueryRequest, shouldBroadcast: Boolean = true): BaseResp = {
authenticateAndThen(request) { authResult =>
QepQueryDb.db.insertQepQueryFlag(request)
doBroadcastQuery(request, new UnFlagQueryAggregator, shouldBroadcast,authResult)
}
}
protected def doRunQuery(request: RunQueryRequest, shouldBroadcast: Boolean): BaseResp = {
authenticateAndThen(request) { authResult =>
info(s"doRunQuery($request,$shouldBroadcast) with $runQueryAggregatorFor")
//store the query in the qep's database inside doBroadcastQuery()
doBroadcastQuery(request, runQueryAggregatorFor(request), shouldBroadcast,authResult)
}
}
//returns a ReadQueryDefinitionResponse
protected def doReadQueryDefinition(request: ReadQueryDefinitionRequest, shouldBroadcast: Boolean): BaseResp = {
authenticateAndThen(request) { authResult =>
- val result =QepQueryDb.db.selectPreviousQuery(request).getOrElse(
+ val result =QepQueryDb.db.selectPreviousQuery(request,authResult).getOrElse(
ErrorResponse(PreviousQueryDoesNotExist(request.queryId,request.authn.username,request.authn.domain))).asInstanceOf[BaseResp]
info(s"doReadQueryDefinition($request,$shouldBroadcast) result is $result")
result
}
}
protected def doReadInstanceResults(request: ReadInstanceResultsRequest, shouldBroadcast: Boolean): BaseResp = {
authenticateAndThen(request) { authResult =>
info(s"doReadInstanceResults($request,$shouldBroadcast)")
val networkId = request.shrineNetworkQueryId
//read from the QEP database code here. Only broadcast if some result is in some sketchy state
val resultsFromDb: Seq[QueryResult] = QepQueryDb.db.selectMostRecentQepResultsFor(networkId)
//If any query result was pending
val response = if (resultsFromDb.nonEmpty && (!resultsFromDb.exists(!_.statusType.isDone))) {
debug(s"Using qep cached results for query $networkId")
AggregatedReadInstanceResultsResponse(networkId, resultsFromDb).asInstanceOf[BaseResp]
}
else {
debug(s"Requesting results for $networkId from network")
val response = doBroadcastQuery(request, new ReadInstanceResultsAggregator(networkId, false), shouldBroadcast,authResult)
//put the new results in the database if we got what we wanted
response match {
case arirr: AggregatedReadInstanceResultsResponse => arirr.results.foreach(r => QepQueryDb.db.insertQueryResult(networkId, r))
case _ => //do nothing
}
response
}
response
}
}
protected def doReadQueryInstances(request: ReadQueryInstancesRequest, shouldBroadcast: Boolean): BaseResp = {
authenticateAndThen(request) { authResult =>
info(s"doReadQueryInstances($request,$shouldBroadcast)")
val now = XmlDateHelper.now
val networkQueryId = request.networkQueryId
val username = request.authn.username
val groupId = request.projectId
//NB: Return a dummy response, with a dummy QueryInstance containing the network (Shrine) id of the query we'd like
//to get "instances" for. This allows the legacy web client to formulate a request for query results that Shrine
//can understand, while meeting the conversational requirements of the legacy web client.
val instance = QueryInstance(networkQueryId.toString, networkQueryId.toString, username, groupId, now, now)
//TODO: XXX: HACK: Would like to remove the cast
//NB: Munge in username from authentication result
ReadQueryInstancesResponse(networkQueryId, authResult.username, groupId, Seq(instance)).asInstanceOf[BaseResp]
}
}
protected def doReadPreviousQueries(request: ReadPreviousQueriesRequest, shouldBroadcast: Boolean): ReadPreviousQueriesResponse = {
authenticateAndThen(request){ authResult =>
info(s"doReadPreviousQueries($request,$shouldBroadcast)")
//todo if any results are in one of the pending states go ahead and request them async (has to wait for async Shrine)
//pull queries from the local database.
- QepQueryDb.db.selectPreviousQueries(request)
+ QepQueryDb.db.selectPreviousQueries(request,authResult)
}
}
protected def doRenameQuery(request: RenameQueryRequest, shouldBroadcast: Boolean): BaseResp = {
authenticateAndThen(request) { authResult =>
info(s"doRenameQuery($request,$shouldBroadcast)")
QepQueryDb.db.renamePreviousQuery(request)
doBroadcastQuery(request, new RenameQueryAggregator, shouldBroadcast,authResult)
}
}
protected def doDeleteQuery(request: DeleteQueryRequest, shouldBroadcast: Boolean): BaseResp = {
authenticateAndThen(request) { authResult =>
info(s"doDeleteQuery($request,$shouldBroadcast)")
QepQueryDb.db.markDeleted(request)
doBroadcastQuery(request, new DeleteQueryAggregator, shouldBroadcast,authResult)
}
}
protected def doReadApprovedQueryTopics(request: ReadApprovedQueryTopicsRequest, shouldBroadcast: Boolean): BaseResp = authenticateAndThen(request) { _ =>
info(s"doReadApprovedQueryTopics($request,$shouldBroadcast)")
//TODO: XXX: HACK: Would like to remove the cast
authorizationService.readApprovedEntries(request) match {
case Left(errorResponse) => errorResponse.asInstanceOf[BaseResp]
case Right(validResponse) => validResponse.asInstanceOf[BaseResp]
}
}
import broadcastAndAggregationService.sendAndAggregate
protected def doBroadcastQuery(request: BaseShrineRequest, aggregator: Aggregator, shouldBroadcast: Boolean, authResult:Authenticated): BaseResp = {
debug(s"doBroadcastQuery($request) authResult is $authResult")
//NB: Use credentials obtained from Authenticator (oddly, we authenticate with one set of credentials and are "logged in" under (possibly!) another
//When making BroadcastMessages
val networkAuthn = AuthenticationInfo(authResult.domain, authResult.username, Credential("", isToken = false))
//NB: Only audit RunQueryRequests
request match {
case runQueryRequest: RunQueryRequest =>
// inject modified, authorized runQueryRequest
//although it might make more sense to put this whole if block in the aggregator, the RunQueryAggregator lives in the hub, far from this DB code
auditAuthorizeAndThen(runQueryRequest) { authorizedRequest =>
debug(s"doBroadcastQuery authorizedRequest is $authorizedRequest")
// tuck the ACT audit metrics data into a database here
if (collectQepAudit) QepAuditDb.db.insertQepQuery(authorizedRequest,commonName)
- QepQueryDb.db.insertQepQuery(authorizedRequest)
+ QepQueryDb.db.insertQepQuery(authorizedRequest,authResult)
val response: BaseResp = doSynchronousQuery(networkAuthn,authorizedRequest,aggregator,shouldBroadcast)
response match {
//todo do in one transaction
case aggregated:AggregatedRunQueryResponse => aggregated.results.foreach(QepQueryDb.db.insertQueryResult(runQueryRequest.networkQueryId,_))
case _ => debug(s"Unanticipated response type $response")
}
response
}
case _ => doSynchronousQuery(networkAuthn,request,aggregator,shouldBroadcast)
}
}
private def doSynchronousQuery(networkAuthn: AuthenticationInfo,request: BaseShrineRequest, aggregator: Aggregator, shouldBroadcast: Boolean) = {
info(s"doSynchronousQuery($request) started")
val response = waitFor(sendAndAggregate(networkAuthn, request, aggregator, shouldBroadcast)).asInstanceOf[BaseResp]
info(s"doSynchronousQuery($request) completed with response $response")
response
}
private[qep] val runQueryAggregatorFor: RunQueryRequest => RunQueryAggregator = Aggregators.forRunQueryRequest(includeAggregateResult)
protected def waitFor[R](futureResponse: Future[R]): R = {
XmlDateHelper.time("Waiting for aggregated results")(debug(_)) {
Await.result(futureResponse, queryTimeout)
}
}
private[qep] def auditAuthorizeAndThen[T](request: RunQueryRequest)(body: (RunQueryRequest => T)): T = {
auditTransactionally(request) {
debug(s"auditAuthorizeAndThen($request) with $authorizationService")
- val authorizedRequest = authorizationService.authorizeRunQueryRequest(request) match {
+ val authorizedRequest: RunQueryRequest = authorizationService.authorizeRunQueryRequest(request) match {
case na: NotAuthorized => throw na.toException
case authorized: Authorized => request.copy(topicName = authorized.topicIdAndName.map(x => x._2))
}
body(authorizedRequest)
}
}
private[qep] def auditTransactionally[T](request: RunQueryRequest)(body: => T): T = {
try { body } finally {
auditDao.addAuditEntry(
request.projectId,
request.authn.domain,
request.authn.username,
request.queryDefinition.toI2b2String, //TODO: Use i2b2 format Still?
request.topicId)
}
}
//todo move auth code with SHRINE-1322
import AuthenticationResult._
private[qep] def authenticateAndThen[T](request: BaseShrineRequest)(f: Authenticated => T): T = {
val AuthenticationInfo(domain, username, _) = request.authn
val authResult = authenticator.authenticate(request.authn)
authResult match {
case a: Authenticated => f(a)
case na:NotAuthenticated => throw NotAuthenticatedException(na)
}
}
}
case class PreviousQueryDoesNotExist(networkQueryId: NetworkQueryId,username: String,domain:String) extends AbstractProblem(ProblemSources.Qep) {
override val summary: String = "No previous query with the requested id exists for this user."
override def description: String = s"No previous query with id $networkQueryId exists for ${username}:${domain}"
}
diff --git a/qep/service/src/main/scala/net/shrine/qep/queries/QepQueryDb.scala b/qep/service/src/main/scala/net/shrine/qep/queries/QepQueryDb.scala
index dccdc3141..ecadcab6f 100644
--- a/qep/service/src/main/scala/net/shrine/qep/queries/QepQueryDb.scala
+++ b/qep/service/src/main/scala/net/shrine/qep/queries/QepQueryDb.scala
@@ -1,559 +1,559 @@
package net.shrine.qep.queries
import java.sql.SQLException
import java.util.concurrent.TimeoutException
import javax.sql.DataSource
import com.typesafe.config.Config
import net.shrine.audit.{NetworkQueryId, QueryName, Time, UserName}
+import net.shrine.authentication.AuthenticationResult.Authenticated
import net.shrine.log.Loggable
-import net.shrine.problem.{AbstractProblem, ProblemSources, ProblemDigest}
-import net.shrine.protocol.{ReadQueryDefinitionResponse, ReadQueryDefinitionRequest, ResultOutputTypes, DeleteQueryRequest, RenameQueryRequest, I2b2ResultEnvelope, QueryResult, ResultOutputType, DefaultBreakdownResultOutputTypes, UnFlagQueryRequest, FlagQueryRequest, QueryMaster, ReadPreviousQueriesRequest, ReadPreviousQueriesResponse, RunQueryRequest}
+import net.shrine.problem.{AbstractProblem, ProblemDigest, ProblemSources}
+import net.shrine.protocol.{DefaultBreakdownResultOutputTypes, DeleteQueryRequest, FlagQueryRequest, I2b2ResultEnvelope, QueryMaster, QueryResult, ReadPreviousQueriesRequest, ReadPreviousQueriesResponse, ReadQueryDefinitionRequest, ReadQueryDefinitionResponse, RenameQueryRequest, ResultOutputType, ResultOutputTypes, RunQueryRequest, UnFlagQueryRequest}
import net.shrine.qep.QepConfigSource
import net.shrine.slick.TestableDataSourceCreator
import net.shrine.util.XmlDateHelper
import slick.driver.JdbcProfile
import scala.collection.immutable.Iterable
import scala.concurrent.duration.{Duration, DurationInt}
import scala.concurrent.{Await, Future, blocking}
import scala.language.postfixOps
-
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.control.NonFatal
import scala.xml.XML
/**
* DB code for the QEP's query instances and query results.
*
* @author david
* @since 1/19/16
*/
case class QepQueryDb(schemaDef:QepQuerySchema,dataSource: DataSource,timeout:Duration) extends Loggable {
import schemaDef._
import jdbcProfile.api._
val database = Database.forDataSource(dataSource)
def createTables() = schemaDef.createTables(database)
def dropTables() = schemaDef.dropTables(database)
def dbRun[R](action: DBIOAction[R, NoStream, Nothing]):R = {
val future: Future[R] = database.run(action)
try {
blocking {
Await.result(future, timeout)
}
}
catch {
case tx:TimeoutException => throw CouldNotRunDbIoActionException(dataSource,tx)
case NonFatal(x) => throw CouldNotRunDbIoActionException(dataSource,x)
}
}
- def insertQepQuery(runQueryRequest: RunQueryRequest):Unit = {
+ def insertQepQuery(runQueryRequest: RunQueryRequest,authResult:Authenticated):Unit = {
debug(s"insertQepQuery $runQueryRequest")
- insertQepQuery(QepQuery(runQueryRequest))
+ insertQepQuery(QepQuery(runQueryRequest,authResult))
}
def insertQepQuery(qepQuery: QepQuery):Unit = {
dbRun(allQepQueryQuery += qepQuery)
}
def selectAllQepQueries:Seq[QepQuery] = {
dbRun(mostRecentVisibleQepQueries.result)
}
- def selectPreviousQuery(request:ReadQueryDefinitionRequest):Option[ReadQueryDefinitionResponse] = {
- selectPreviousQuery(request.authn.username,request.authn.domain,request.queryId).map(_.toReadQueryDefinitionResponse)
+ def selectPreviousQuery(request:ReadQueryDefinitionRequest,authResult:Authenticated):Option[ReadQueryDefinitionResponse] = {
+ selectPreviousQuery(authResult.username,authResult.domain,request.queryId).map(_.toReadQueryDefinitionResponse)
}
def selectPreviousQuery(userName: UserName, domain: String,networkQueryId: NetworkQueryId):Option[QepQuery] = {
dbRun(mostRecentVisibleQepQueries.filter(_.networkId === networkQueryId).filter(_.userName === userName).filter(_.userDomain === domain).sortBy(x => x.changeDate.desc).result) match {
case Nil => None
case Seq(only) => Some(only)
case other => throw new IllegalStateException(s"${other.size} queries stored for id $networkQueryId for $userName:$domain.")
}
}
- def selectPreviousQueries(request: ReadPreviousQueriesRequest):ReadPreviousQueriesResponse = {
- val previousQueries: Seq[QepQuery] = selectPreviousQueriesByUserAndDomain(request.authn.username,request.authn.domain,request.fetchSize)
+ def selectPreviousQueries(request: ReadPreviousQueriesRequest,authResult:Authenticated):ReadPreviousQueriesResponse = {
+ val previousQueries: Seq[QepQuery] = selectPreviousQueriesByUserAndDomain(authResult.username,authResult.domain,request.fetchSize)
val flags:Map[NetworkQueryId,QepQueryFlag] = selectMostRecentQepQueryFlagsFor(previousQueries.map(_.networkId).to[Set])
val queriesAndFlags = previousQueries.map(x => (x,flags.get(x.networkId)))
ReadPreviousQueriesResponse(queriesAndFlags.map(x => x._1.toQueryMaster(x._2)))
}
def selectPreviousQueriesByUserAndDomain(userName: UserName, domain: String, limit:Int):Seq[QepQuery] = {
dbRun(mostRecentVisibleQepQueries.filter(_.userName === userName).filter(_.userDomain === domain).sortBy(x => x.changeDate.desc).take(limit).result)
}
def renamePreviousQuery(request:RenameQueryRequest):Unit = {
val networkQueryId = request.networkQueryId
dbRun(
for {
queryResults <- mostRecentVisibleQepQueries.filter(_.networkId === networkQueryId).result
_ <- allQepQueryQuery ++= queryResults.map(_.copy(queryName = request.queryName,changeDate = System.currentTimeMillis()))
} yield queryResults
)
}
def markDeleted(request:DeleteQueryRequest):Unit = {
val networkQueryId = request.networkQueryId
dbRun(
for {
queryResults <- mostRecentVisibleQepQueries.filter(_.networkId === networkQueryId).result
_ <- allQepQueryQuery ++= queryResults.map(_.copy(deleted = true,changeDate = System.currentTimeMillis()))
} yield queryResults
)
}
def insertQepQueryFlag(flagQueryRequest: FlagQueryRequest):Unit = {
insertQepQueryFlag(QepQueryFlag(flagQueryRequest))
}
def insertQepQueryFlag(unflagQueryRequest: UnFlagQueryRequest):Unit = {
insertQepQueryFlag(QepQueryFlag(unflagQueryRequest))
}
def insertQepQueryFlag(qepQueryFlag: QepQueryFlag):Unit = {
dbRun(allQepQueryFlags += qepQueryFlag)
}
def selectMostRecentQepQueryFlagsFor(networkIds:Set[NetworkQueryId]):Map[NetworkQueryId,QepQueryFlag] = {
val flags:Seq[QepQueryFlag] = dbRun(mostRecentQueryFlags.filter(_.networkId inSet networkIds).result)
flags.map(x => x.networkQueryId -> x).toMap
}
def insertQepResultRow(qepQueryRow:QueryResultRow) = {
dbRun(allQueryResultRows += qepQueryRow)
}
def insertQueryResult(networkQueryId:NetworkQueryId,result:QueryResult) = {
val adapterNode = result.description.getOrElse(throw new IllegalStateException("description is empty, does not have an adapter node"))
val queryResultRow = QueryResultRow(networkQueryId,result)
val breakdowns: Iterable[QepQueryBreakdownResultsRow] = result.breakdowns.flatMap(QepQueryBreakdownResultsRow.breakdownRowsFor(networkQueryId,adapterNode,result.resultId,_))
val problem: Seq[QepProblemDigestRow] = result.problemDigest.map(p => QepProblemDigestRow(networkQueryId,adapterNode,p.codec,p.stampText,p.summary,p.description,p.detailsXml.toString,System.currentTimeMillis())).to[Seq]
dbRun(
for {
_ <- allQueryResultRows += queryResultRow
_ <- allBreakdownResultsRows ++= breakdowns
_ <- allProblemDigestRows ++= problem
} yield ()
)
}
def selectMostRecentQepResultRowsFor(networkId:NetworkQueryId): Seq[QueryResultRow] = {
dbRun(mostRecentQueryResultRows.filter(_.networkQueryId === networkId).result)
}
def selectMostRecentQepResultsFor(networkId:NetworkQueryId): Seq[QueryResult] = {
val (queryResults, breakdowns,problems) = dbRun(
for {
queryResults <- mostRecentQueryResultRows.filter(_.networkQueryId === networkId).result
breakdowns <- mostRecentBreakdownResultsRows.filter(_.networkQueryId === networkId).result
problems <- mostRecentProblemDigestRows.filter(_.networkQueryId === networkId).result
} yield (queryResults, breakdowns, problems)
)
val resultIdsToI2b2ResultEnvelopes: Map[Long, Map[ResultOutputType, I2b2ResultEnvelope]] = breakdowns.groupBy(_.resultId).map(rIdToB => rIdToB._1 -> QepQueryBreakdownResultsRow.resultEnvelopesFrom(rIdToB._2))
def seqOfOneProblemRowToProblemDigest(problemSeq:Seq[QepProblemDigestRow]):ProblemDigest = {
if(problemSeq.size == 1) problemSeq.head.toProblemDigest
else throw new IllegalStateException(s"problemSeq size was not 1. $problemSeq")
}
val adapterNodesToProblemDigests: Map[String, ProblemDigest] = problems.groupBy(_.adapterNode).map(nodeToProblem => nodeToProblem._1 -> seqOfOneProblemRowToProblemDigest(nodeToProblem._2) )
queryResults.map(r => r.toQueryResult(
resultIdsToI2b2ResultEnvelopes.getOrElse(r.resultId,Map.empty),
adapterNodesToProblemDigests.get(r.adapterNode)
))
}
def insertQueryBreakdown(breakdownResultsRow:QepQueryBreakdownResultsRow) = {
dbRun(allBreakdownResultsRows += breakdownResultsRow)
}
def selectAllBreakdownResultsRows: Seq[QepQueryBreakdownResultsRow] = {
dbRun(allBreakdownResultsRows.result)
}
}
object QepQueryDb extends Loggable {
val dataSource:DataSource = TestableDataSourceCreator.dataSource(QepQuerySchema.config)
val timeout = QepQuerySchema.config.getInt("timeout") seconds
val db = QepQueryDb(QepQuerySchema.schema,dataSource,timeout)
val createTablesOnStart = QepQuerySchema.config.getBoolean("createTablesOnStart")
if(createTablesOnStart) QepQueryDb.db.createTables()
}
/**
* Separate class to support schema generation without actually connecting to the database.
*
* @param jdbcProfile Database profile to use for the schema
*/
case class QepQuerySchema(jdbcProfile: JdbcProfile,moreBreakdowns: Set[ResultOutputType]) extends Loggable {
import jdbcProfile.api._
def ddlForAllTables: jdbcProfile.DDL = {
allQepQueryQuery.schema ++ allQepQueryFlags.schema ++ allQueryResultRows.schema ++ allBreakdownResultsRows.schema ++ allProblemDigestRows.schema
}
//to get the schema, use the REPL
//println(QepQuerySchema.schema.ddlForAllTables.createStatements.mkString(";\n"))
def createTables(database:Database) = {
try {
val future = database.run(ddlForAllTables.create)
Await.result(future,10 seconds)
} catch {
//I'd prefer to check and create schema only if absent. No way to do that with Oracle.
case x:SQLException => info("Caught exception while creating tables. Recover by assuming the tables already exist.",x)
}
}
def dropTables(database:Database) = {
val future = database.run(ddlForAllTables.drop)
//Really wait forever for the cleanup
Await.result(future,Duration.Inf)
}
class QepQueries(tag:Tag) extends Table[QepQuery](tag,"previousQueries") {
def networkId = column[NetworkQueryId]("networkId")
def userName = column[UserName]("userName")
def userDomain = column[String]("domain")
def queryName = column[QueryName]("queryName")
def expression = column[Option[String]]("expression")
def dateCreated = column[Time]("dateCreated")
def deleted = column[Boolean]("deleted")
def queryXml = column[String]("queryXml")
def changeDate = column[Long]("changeDate")
def * = (networkId,userName,userDomain,queryName,expression,dateCreated,deleted,queryXml,changeDate) <> (QepQuery.tupled,QepQuery.unapply)
}
val allQepQueryQuery = TableQuery[QepQueries]
val mostRecentQepQueryQuery: Query[QepQueries, QepQuery, Seq] = for(
queries <- allQepQueryQuery if !allQepQueryQuery.filter(_.networkId === queries.networkId).filter(_.changeDate > queries.changeDate).exists
) yield queries
val mostRecentVisibleQepQueries = mostRecentQepQueryQuery.filter(_.deleted === false)
class QepQueryFlags(tag:Tag) extends Table[QepQueryFlag](tag,"queryFlags") {
def networkId = column[NetworkQueryId]("networkId")
def flagged = column[Boolean]("flagged")
def flagMessage = column[String]("flagMessage")
def changeDate = column[Long]("changeDate")
def * = (networkId,flagged,flagMessage,changeDate) <> (QepQueryFlag.tupled,QepQueryFlag.unapply)
}
val allQepQueryFlags = TableQuery[QepQueryFlags]
val mostRecentQueryFlags: Query[QepQueryFlags, QepQueryFlag, Seq] = for(
queryFlags <- allQepQueryFlags if !allQepQueryFlags.filter(_.networkId === queryFlags.networkId).filter(_.changeDate > queryFlags.changeDate).exists
) yield queryFlags
val qepQueryResultTypes = DefaultBreakdownResultOutputTypes.toSet ++ ResultOutputType.values ++ moreBreakdowns
val stringsToQueryResultTypes: Map[String, ResultOutputType] = qepQueryResultTypes.map(x => (x.name,x)).toMap
val queryResultTypesToString: Map[ResultOutputType, String] = stringsToQueryResultTypes.map(_.swap)
implicit val qepQueryResultTypesColumnType = MappedColumnType.base[ResultOutputType,String] ({
(resultType: ResultOutputType) => queryResultTypesToString(resultType)
},{
(string: String) => stringsToQueryResultTypes(string)
})
implicit val queryStatusColumnType = MappedColumnType.base[QueryResult.StatusType,String] ({
statusType => statusType.name
},{
name => QueryResult.StatusType.valueOf(name).getOrElse(throw new IllegalStateException(s"$name is not one of ${QueryResult.StatusType.values.map(_.name).mkString(", ")}"))
})
class QepQueryResults(tag:Tag) extends Table[QueryResultRow](tag,"queryResults") {
def resultId = column[Long]("resultId")
def networkQueryId = column[NetworkQueryId]("networkQueryId")
def instanceId = column[Long]("instanceId")
def adapterNode = column[String]("adapterNode")
def resultType = column[Option[ResultOutputType]]("resultType")
def size = column[Long]("size")
def startDate = column[Option[Long]]("startDate")
def endDate = column[Option[Long]]("endDate")
def status = column[QueryResult.StatusType]("status")
def statusMessage = column[Option[String]]("statusMessage")
def changeDate = column[Long]("changeDate")
def * = (resultId,networkQueryId,instanceId,adapterNode,resultType,size,startDate,endDate,status,statusMessage,changeDate) <> (QueryResultRow.tupled,QueryResultRow.unapply)
}
val allQueryResultRows = TableQuery[QepQueryResults]
//Most recent query result rows for each queryId from each adapter
val mostRecentQueryResultRows: Query[QepQueryResults, QueryResultRow, Seq] = for(
queryResultRows <- allQueryResultRows if !allQueryResultRows.filter(_.networkQueryId === queryResultRows.networkQueryId).filter(_.adapterNode === queryResultRows.adapterNode).filter(_.changeDate > queryResultRows.changeDate).exists
) yield queryResultRows
class QepQueryBreakdownResults(tag:Tag) extends Table[QepQueryBreakdownResultsRow](tag,"queryBreakdownResults") {
def networkQueryId = column[NetworkQueryId]("networkQueryId")
def adapterNode = column[String]("adapterNode")
def resultId = column[Long]("resultId")
def resultType = column[ResultOutputType]("resultType")
def dataKey = column[String]("dataKey")
def value = column[Long]("value")
def changeDate = column[Long]("changeDate")
def * = (networkQueryId,adapterNode,resultId,resultType,dataKey,value,changeDate) <> (QepQueryBreakdownResultsRow.tupled,QepQueryBreakdownResultsRow.unapply)
}
val allBreakdownResultsRows = TableQuery[QepQueryBreakdownResults]
//Most recent query result rows for each queryId from each adapter
val mostRecentBreakdownResultsRows: Query[QepQueryBreakdownResults, QepQueryBreakdownResultsRow, Seq] = for(
breakdownResultsRows <- allBreakdownResultsRows if !allBreakdownResultsRows.filter(_.networkQueryId === breakdownResultsRows.networkQueryId).filter(_.adapterNode === breakdownResultsRows.adapterNode).filter(_.resultId === breakdownResultsRows.resultId).filter(_.changeDate > breakdownResultsRows.changeDate).exists
) yield breakdownResultsRows
/*
case class ProblemDigest(codec: String, stampText: String, summary: String, description: String, detailsXml: NodeSeq) extends XmlMarshaller {
*/
class QepResultProblemDigests(tag:Tag) extends Table [QepProblemDigestRow](tag,"queryResultProblemDigests") {
def networkQueryId = column[NetworkQueryId]("networkQueryId")
def adapterNode = column[String]("adapterNode")
def codec = column[String]("codec")
def stamp = column[String]("stamp")
def summary = column[String]("summary")
def description = column[String]("description")
def details = column[String]("details")
def changeDate = column[Long]("changeDate")
def * = (networkQueryId,adapterNode,codec,stamp,summary,description,details,changeDate) <> (QepProblemDigestRow.tupled,QepProblemDigestRow.unapply)
}
val allProblemDigestRows = TableQuery[QepResultProblemDigests]
val mostRecentProblemDigestRows: Query[QepResultProblemDigests, QepProblemDigestRow, Seq] = for(
problemDigests <- allProblemDigestRows if !allProblemDigestRows.filter(_.networkQueryId === problemDigests.networkQueryId).filter(_.adapterNode === problemDigests.adapterNode).filter(_.changeDate > problemDigests.changeDate).exists
) yield problemDigests
}
object QepQuerySchema {
val allConfig:Config = QepConfigSource.config
val config:Config = allConfig.getConfig("shrine.queryEntryPoint.audit.database")
val slickProfileClassName = config.getString("slickProfileClassName")
val slickProfile:JdbcProfile = QepConfigSource.objectForName(slickProfileClassName)
import net.shrine.config.{ConfigExtensions, Keys}
val moreBreakdowns: Set[ResultOutputType] = config.getOptionConfigured(Keys.breakdownResultOutputTypes,ResultOutputTypes.fromConfig).getOrElse(Set.empty)
val schema = QepQuerySchema(slickProfile,moreBreakdowns)
}
case class QepQuery(
networkId:NetworkQueryId,
userName: UserName,
userDomain: String,
queryName: QueryName,
expression: Option[String],
dateCreated: Time,
deleted: Boolean,
queryXml: String,
changeDate: Time
){
def toQueryMaster(qepQueryFlag:Option[QepQueryFlag]):QueryMaster = {
QueryMaster(
queryMasterId = networkId.toString,
networkQueryId = networkId,
name = queryName,
userId = userName,
groupId = userDomain,
createDate = XmlDateHelper.toXmlGregorianCalendar(dateCreated),
held = None, //todo this field is never used. Remove it in 1.22
flagged = qepQueryFlag.map(_.flagged),
flagMessage = qepQueryFlag.map(_.flagMessage)
)
}
def toReadQueryDefinitionResponse:ReadQueryDefinitionResponse = {
ReadQueryDefinitionResponse(
masterId = networkId,
name = queryName,
userId = userName,
createDate = XmlDateHelper.toXmlGregorianCalendar(dateCreated),
queryDefinition = queryXml
)
}
}
object QepQuery extends ((NetworkQueryId,UserName,String,QueryName,Option[String],Time,Boolean,String,Time) => QepQuery) {
- def apply(runQueryRequest: RunQueryRequest):QepQuery = {
+ def apply(runQueryRequest: RunQueryRequest,authenticated: Authenticated):QepQuery = {
new QepQuery(
networkId = runQueryRequest.networkQueryId,
- userName = runQueryRequest.authn.username,
- userDomain = runQueryRequest.authn.domain,
+ userName = authenticated.username,
+ userDomain = authenticated.domain,
queryName = runQueryRequest.queryDefinition.name,
expression = runQueryRequest.queryDefinition.expr.map(_.toString),
dateCreated = System.currentTimeMillis(),
deleted = false,
queryXml = runQueryRequest.queryDefinition.toI2b2String,
changeDate = System.currentTimeMillis()
)
}
}
case class QepQueryFlag(
networkQueryId: NetworkQueryId,
flagged:Boolean,
flagMessage:String,
changeDate:Long
)
object QepQueryFlag extends ((NetworkQueryId,Boolean,String,Long) => QepQueryFlag) {
def apply(flagQueryRequest: FlagQueryRequest):QepQueryFlag = {
QepQueryFlag(
networkQueryId = flagQueryRequest.networkQueryId,
flagged = true,
flagMessage = flagQueryRequest.message.getOrElse(""),
changeDate = System.currentTimeMillis()
)
}
def apply(unflagQueryRequest: UnFlagQueryRequest):QepQueryFlag = {
QepQueryFlag(
networkQueryId = unflagQueryRequest.networkQueryId,
flagged = false,
flagMessage = "",
changeDate = System.currentTimeMillis()
)
}
}
case class QueryResultRow(
resultId:Long,
networkQueryId:NetworkQueryId,
instanceId:Long,
adapterNode:String,
resultType:Option[ResultOutputType],
size:Long,
startDate:Option[Long],
endDate:Option[Long],
status:QueryResult.StatusType,
statusMessage:Option[String],
changeDate:Long
) {
def toQueryResult(breakdowns:Map[ResultOutputType,I2b2ResultEnvelope],problemDigest:Option[ProblemDigest]) = QueryResult(
resultId = resultId,
instanceId = instanceId,
resultType = resultType,
setSize = size,
startDate = startDate.map(XmlDateHelper.toXmlGregorianCalendar),
endDate = endDate.map(XmlDateHelper.toXmlGregorianCalendar),
description = Some(adapterNode),
statusType = status,
statusMessage = statusMessage,
breakdowns = breakdowns,
problemDigest = problemDigest
)
}
object QueryResultRow extends ((Long,NetworkQueryId,Long,String,Option[ResultOutputType],Long,Option[Long],Option[Long],QueryResult.StatusType,Option[String],Long) => QueryResultRow)
{
def apply(networkQueryId:NetworkQueryId,result:QueryResult):QueryResultRow = {
new QueryResultRow(
resultId = result.resultId,
networkQueryId = networkQueryId,
instanceId = result.instanceId,
adapterNode = result.description.getOrElse(s"$result has None in its description field, not a name of an adapter node."),
resultType = result.resultType,
size = result.setSize,
startDate = result.startDate.map(_.toGregorianCalendar.getTimeInMillis),
endDate = result.endDate.map(_.toGregorianCalendar.getTimeInMillis),
status = result.statusType,
statusMessage = result.statusMessage,
changeDate = System.currentTimeMillis()
)
}
}
case class QepQueryBreakdownResultsRow(
networkQueryId: NetworkQueryId,
adapterNode:String,
resultId:Long,
resultType: ResultOutputType,
dataKey:String,
value:Long,
changeDate:Long
)
object QepQueryBreakdownResultsRow extends ((NetworkQueryId,String,Long,ResultOutputType,String,Long,Long) => QepQueryBreakdownResultsRow){
def breakdownRowsFor(networkQueryId:NetworkQueryId,
adapterNode:String,
resultId:Long,
breakdown:(ResultOutputType,I2b2ResultEnvelope)): Iterable[QepQueryBreakdownResultsRow] = {
breakdown._2.data.map(b => QepQueryBreakdownResultsRow(networkQueryId,adapterNode,resultId,breakdown._1,b._1,b._2,System.currentTimeMillis()))
}
def resultEnvelopesFrom(breakdowns:Seq[QepQueryBreakdownResultsRow]): Map[ResultOutputType, I2b2ResultEnvelope] = {
def resultEnvelopeFrom(resultType:ResultOutputType,breakdowns:Seq[QepQueryBreakdownResultsRow]):I2b2ResultEnvelope = {
val data = breakdowns.map(b => b.dataKey -> b.value).toMap
I2b2ResultEnvelope(resultType,data)
}
breakdowns.groupBy(_.resultType).map(r => r._1 -> resultEnvelopeFrom(r._1,r._2))
}
}
case class QepProblemDigestRow(
networkQueryId: NetworkQueryId,
adapterNode: String,
codec: String,
stampText: String,
summary: String,
description: String,
details: String,
changeDate:Long
){
def toProblemDigest = {
ProblemDigest(
codec,
stampText,
summary,
description,
if(!details.isEmpty) XML.loadString(details)
else
)
}
}
case class CouldNotRunDbIoActionException(dataSource: DataSource, exception: Throwable) extends RuntimeException(exception) {
override def getMessage:String = s"Could not use the database defined by $dataSource due to ${exception.getLocalizedMessage}"
}
case class QepDatabaseProblem(x:Exception) extends AbstractProblem(ProblemSources.Qep){
override val summary = "A problem encountered while using a database."
override val throwable = Some(x)
override val description = x.getMessage
}
\ No newline at end of file
diff --git a/shrine-webclient/pom.xml b/shrine-webclient/pom.xml
index fae77da1d..fd40be15f 100644
--- a/shrine-webclient/pom.xml
+++ b/shrine-webclient/pom.xml
@@ -1,42 +1,42 @@
4.0.0
SHRINE Web Client
shrine-webclient
pom
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
1.5
2.4
maven-assembly-plugin
${assembly-plugin-version}
assembly
package
single
src/main/assembly/assembly.xml
diff --git a/tools/adapter-queries-to-qep/pom.xml b/tools/adapter-queries-to-qep/pom.xml
index f737145ab..444497e1e 100644
--- a/tools/adapter-queries-to-qep/pom.xml
+++ b/tools/adapter-queries-to-qep/pom.xml
@@ -1,58 +1,58 @@
4.0.0
SHRINE Copy Adapter Queries to QEP
adapter-queries-to-qep
jar
net.shrine
shrine-tools
- 1.21.1
+ 1.21.2
net.shrine
shrine-data-commons
${project.version}
com.typesafe
config
net.shrine
shrine-adapter-service
${project.version}
net.shrine
shrine-qep
${project.version}
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
adapter-queries-to-qep-${project.version}
false
diff --git a/tools/batch-querier/pom.xml b/tools/batch-querier/pom.xml
index c4ee01ed1..a68170ade 100644
--- a/tools/batch-querier/pom.xml
+++ b/tools/batch-querier/pom.xml
@@ -1,87 +1,87 @@
4.0.0
SHRINE Query Automation Utility
shrine-batch-querier-utility
jar
net.shrine
shrine-tools
- 1.21.1
+ 1.21.2
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-utility-commons
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
shrine-batch-querier-${project.version}
false
diff --git a/tools/mapping-automation/pom.xml b/tools/mapping-automation/pom.xml
index 20e786c43..e8a3cc139 100644
--- a/tools/mapping-automation/pom.xml
+++ b/tools/mapping-automation/pom.xml
@@ -1,86 +1,86 @@
4.0.0
SHRINE Term Mapping Automation Utilities
shrine-mapping-automation
jar
net.shrine
shrine-tools
- 1.21.1
+ 1.21.2
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-ont-support
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-utility-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
shrine-mapping-tools-${project.version}
false
diff --git a/tools/monitor/pom.xml b/tools/monitor/pom.xml
index 5ca7021c2..ce6a7dec3 100644
--- a/tools/monitor/pom.xml
+++ b/tools/monitor/pom.xml
@@ -1,91 +1,91 @@
4.0.0
SHRINE Monitor Utilities
shrine-monitor-utilities
jar
net.shrine
shrine-tools
- 1.21.1
+ 1.21.2
ant
ant-javamail
1.6.5
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-config
${project.version}
org.codehaus.groovy.modules.http-builder
http-builder
0.5.1
org.codehaus.groovy
groovy
org.codehaus.gmaven.runtime
gmaven-runtime-1.7
1.3
mysql
mysql-connector-java
com.h2database
h2
test
net.sf.opencsv
opencsv
org.apache.commons
commons-email
1.2
org.codehaus.gmaven
gmaven-plugin
maven-assembly-plugin
shrine-monitor-${project.version}.zip
false
diff --git a/tools/pom.xml b/tools/pom.xml
index 84460b055..2b107a1ac 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -1,81 +1,81 @@
4.0.0
SHRINE Tools
shrine-tools
pom
net.shrine
shrine-base
- 1.21.1
+ 1.21.2
1.5
2.4
monitor
utility-commons
scanner
batch-querier
adapter-queries-to-qep
mapping-automation
net.shrine
shrine-protocol
${project.version}
org.codehaus.gmaven
gmaven-plugin
${gmaven-plugin-version}
compile
testCompile
true
true
true
maven-assembly-plugin
${assembly-plugin-version}
assembly
package
single
src/main/assembly/assembly.xml
diff --git a/tools/scanner/pom.xml b/tools/scanner/pom.xml
index 36ad3df77..7d328f7d4 100644
--- a/tools/scanner/pom.xml
+++ b/tools/scanner/pom.xml
@@ -1,104 +1,104 @@
4.0.0
SHRINE Scanner Utility
shrine-scanner-utility
jar
net.shrine
shrine-tools
- 1.21.1
+ 1.21.2
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-ont-support
${project.version}
net.shrine
shrine-hms-core
${project.version}
net.shrine
shrine-config
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-utility-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
net.shrine
shrine-broadcaster-aggregator
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
shrine-scanner-${project.version}
false
diff --git a/tools/utility-commons/pom.xml b/tools/utility-commons/pom.xml
index b64c86bdf..275b5d54b 100644
--- a/tools/utility-commons/pom.xml
+++ b/tools/utility-commons/pom.xml
@@ -1,65 +1,65 @@
4.0.0
SHRINE Common Classes for Utilities
shrine-utility-commons
jar
net.shrine
shrine-tools
- 1.21.1
+ 1.21.2
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar