diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 4a01c9476f..b40eabe9f2 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -6483,9 +6483,9 @@
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
"node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
@@ -6495,7 +6495,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -7131,9 +7131,9 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"engines": {
"node": ">= 0.6"
}
@@ -7318,9 +7318,9 @@
}
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -8303,9 +8303,9 @@
}
},
"node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"engines": {
"node": ">= 0.8"
}
@@ -9330,36 +9330,36 @@
}
},
"node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.2.0",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.12",
"proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -9368,6 +9368,10 @@
},
"engines": {
"node": ">= 0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/express/node_modules/debug": {
@@ -9542,12 +9546,12 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -13844,9 +13848,12 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
"node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-stream": {
"version": "2.0.0",
@@ -14133,9 +14140,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [
{
"type": "github",
@@ -14647,9 +14654,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
},
"node_modules/path-type": {
"version": "4.0.0",
@@ -16365,11 +16372,11 @@
}
},
"node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -17956,9 +17963,9 @@
}
},
"node_modules/rollup": {
- "version": "2.79.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
- "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "version": "2.79.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
"bin": {
"rollup": "dist/bin/rollup"
},
@@ -18259,9 +18266,9 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
@@ -18294,6 +18301,14 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -18378,14 +18393,14 @@
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dependencies": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -25861,9 +25876,9 @@
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
"body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
@@ -25873,7 +25888,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -26344,9 +26359,9 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="
},
"cookie-signature": {
"version": "1.0.6",
@@ -26470,9 +26485,9 @@
}
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -27157,9 +27172,9 @@
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
},
"encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
},
"enhanced-resolve": {
"version": "5.17.1",
@@ -27908,36 +27923,36 @@
}
},
"express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.2.0",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.12",
"proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -28089,12 +28104,12 @@
}
},
"finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"requires": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -31157,9 +31172,9 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
"merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="
},
"merge-stream": {
"version": "2.0.0",
@@ -31355,9 +31370,9 @@
}
},
"nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="
},
"natural-compare": {
"version": "1.4.0",
@@ -31715,9 +31730,9 @@
}
},
"path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
},
"path-type": {
"version": "4.0.0",
@@ -32737,11 +32752,11 @@
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
},
"qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"requires": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
}
},
"querystringify": {
@@ -33823,9 +33838,9 @@
}
},
"rollup": {
- "version": "2.79.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
- "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "version": "2.79.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
"requires": {
"fsevents": "~2.3.2"
}
@@ -34014,9 +34029,9 @@
}
},
"send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"requires": {
"debug": "2.6.9",
"depd": "2.0.0",
@@ -34048,6 +34063,11 @@
}
}
},
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ },
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -34124,14 +34144,14 @@
}
},
"serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"requires": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "0.19.0"
}
},
"set-function-length": {
diff --git a/frontend/src/FrontDesk.jsx b/frontend/src/FrontDesk.jsx
index 828b832dd9..b08fefd8bc 100644
--- a/frontend/src/FrontDesk.jsx
+++ b/frontend/src/FrontDesk.jsx
@@ -15,8 +15,10 @@ import {
sessionCountdownTime,
} from "./constants/sessionWarning";
import useGetSiteSettings from "./models/useGetSiteSettings";
+import useDocumentTitle from "./hooks/useDocumentTitle";
export default function FrontDesk() {
+ useDocumentTitle();
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [collaborationTitle, setCollaborationTitle] = useState();
const [collaborationData, setCollaborationData] = useState([]);
diff --git a/frontend/src/hooks/useDocumentTitle.js b/frontend/src/hooks/useDocumentTitle.js
index b1a2192f8c..a11c8e8053 100644
--- a/frontend/src/hooks/useDocumentTitle.js
+++ b/frontend/src/hooks/useDocumentTitle.js
@@ -3,10 +3,36 @@ import useGetSiteSettings from "../models/useGetSiteSettings";
export default function useDocumentTitle() {
const { data: siteSettings } = useGetSiteSettings();
+
document.title = siteSettings?.siteName || "wildbook";
useEffect(() => {
+ if (!siteSettings) return;
let iconURL = siteSettings?.siteFavicon;
let link = document.querySelector("link[rel*='icon']");
+ const metaDescription = document.querySelector("meta[name='description']");
+ const metaKeywords = document.querySelector("meta[name='keywords']");
+ const metaAuthor = document.querySelector("meta[name='author']");
+
+ if (!metaDescription) {
+ const meta = document.createElement("meta");
+ meta.name = "description";
+ meta.content = siteSettings?.siteDescription;
+ document.getElementsByTagName("head")[0].appendChild(meta);
+ }
+
+ if (!metaKeywords) {
+ const meta = document.createElement("meta");
+ meta.name = "keywords";
+ meta.content = siteSettings?.siteKeywords;
+ document.getElementsByTagName("head")[0].appendChild(meta);
+ }
+
+ if (!metaAuthor) {
+ const meta = document.createElement("meta");
+ meta.name = "author";
+ meta.content = siteSettings?.siteAuthor;
+ document.getElementsByTagName("head")[0].appendChild(meta);
+ }
if (link) {
link.href = iconURL;
diff --git a/pom.xml b/pom.xml
index 0b38baacda..b25fdff89a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.ecocean
wildbook
- 10.5.2
+ 10.5.3
war
diff --git a/src/main/java/org/ecocean/Base.java b/src/main/java/org/ecocean/Base.java
index ff94170d5d..8313503d1c 100644
--- a/src/main/java/org/ecocean/Base.java
+++ b/src/main/java/org/ecocean/Base.java
@@ -106,9 +106,12 @@ public JSONObject opensearchMapping() {
public void opensearchIndex()
throws IOException {
+ long startT = System.currentTimeMillis();
OpenSearch opensearch = new OpenSearch();
opensearch.index(this.opensearchIndexName(), this);
+ long endT = System.currentTimeMillis();
+ System.out.println("opensearchIndex(): " + (endT - startT) + "ms indexing " + this);
}
// this will index "related" objects as needed
diff --git a/src/main/java/org/ecocean/Encounter.java b/src/main/java/org/ecocean/Encounter.java
index 584e9d70cf..16a2aa8b45 100644
--- a/src/main/java/org/ecocean/Encounter.java
+++ b/src/main/java/org/ecocean/Encounter.java
@@ -4705,35 +4705,4 @@ public void sendCreationEmails(Shepherd myShepherd, String langCode) {
}
}
- public void opensearchIndexDeep()
- throws IOException {
- final String encId = this.getId();
- final Encounter origEnc = this;
- ExecutorService executor = Executors.newFixedThreadPool(4);
- Runnable rn = new Runnable() {
- public void run() {
- Shepherd bgShepherd = new Shepherd("context0");
- bgShepherd.setAction("Encounter.opensearchIndexDeep_" + encId);
- bgShepherd.beginDBTransaction();
- try {
- Encounter enc = bgShepherd.getEncounter(encId);
- if (enc == null) {
- // we use origEnc if we can (especially necessary on initial creation of Encounter)
- if (origEnc != null) origEnc.opensearchIndex();
- bgShepherd.rollbackAndClose();
- executor.shutdown();
- return;
- }
- enc.opensearchIndex();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- bgShepherd.rollbackAndClose();
- }
- executor.shutdown();
- }
- };
-
- executor.execute(rn);
- }
}
diff --git a/src/main/java/org/ecocean/EncounterQueryProcessor.java b/src/main/java/org/ecocean/EncounterQueryProcessor.java
index 5b020bd3b2..a1ed1a38ba 100644
--- a/src/main/java/org/ecocean/EncounterQueryProcessor.java
+++ b/src/main/java/org/ecocean/EncounterQueryProcessor.java
@@ -48,218 +48,153 @@ public static String queryStringBuilder(HttpServletRequest request, StringBuffer
context = ServletUtilities.getContext(request);
Shepherd myShepherd = new Shepherd(context);
myShepherd.setAction("EncounterQueryProcessor.class");
-
- String searchQueryId = request.getParameter("searchQueryId");
- // hack to build a ridiculous query string from an OpenSearch query
- if (searchQueryId != null) {
- String failed = filter + " 1 == 0";
- List encIds = new ArrayList();
- User user = myShepherd.getUser(request);
- if (user == null) return failed;
- JSONObject searchQuery = OpenSearch.queryLoad(searchQueryId);
- if (searchQuery == null) return failed;
- String indexName = searchQuery.optString("indexName", null);
- if (indexName == null) return failed;
- searchQuery = OpenSearch.queryScrubStored(searchQuery);
- JSONObject sanitized = null;
- try {
- sanitized = OpenSearch.querySanitize(searchQuery, user, myShepherd);
- } catch (IOException ex) {
- ex.printStackTrace();
- // this should be unlikely, so fail hard
- throw new RuntimeException("query failed");
- }
- OpenSearch os = new OpenSearch();
- String sort = request.getParameter("sort");
- String sortOrder = request.getParameter("sortOrder");
- int numFrom = 0;
- // for historical code reasons, this needs to be "all" encounters,
- // so we hope this does the job if background indexing set correctly
- int pageSize = 10000;
- try {
- pageSize = os.getSettings(indexName).optInt("max_result_window", 10000);
- } catch (Exception ex) {}
- try {
- os.deletePit(indexName);
- JSONObject queryRes = os.queryPit(indexName, sanitized, numFrom, pageSize, sort,
- sortOrder);
- JSONObject outerHits = queryRes.optJSONObject("hits");
- if (outerHits == null) {
- System.out.println("could not find (outer) hits");
- return failed;
- }
- JSONArray hits = outerHits.optJSONArray("hits");
- if (hits == null) {
- System.out.println("could not find hits");
- return failed;
+ myShepherd.beginDBTransaction();
+ // wrap all myShepherd use in try/catch block
+ try {
+ String searchQueryId = request.getParameter("searchQueryId");
+ // hack to build a ridiculous query string from an OpenSearch query
+ if (searchQueryId != null) {
+ String failed = filter + " 1 == 0";
+ List encIds = new ArrayList();
+ User user = myShepherd.getUser(request);
+ if (user == null) return failed;
+ JSONObject searchQuery = OpenSearch.queryLoad(searchQueryId);
+ if (searchQuery == null) return failed;
+ String indexName = searchQuery.optString("indexName", null);
+ if (indexName == null) return failed;
+ searchQuery = OpenSearch.queryScrubStored(searchQuery);
+ JSONObject sanitized = null;
+ try {
+ sanitized = OpenSearch.querySanitize(searchQuery, user, myShepherd);
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ // this should be unlikely, so fail hard
+ throw new RuntimeException("query failed");
}
- for (int i = 0; i < hits.length(); i++) {
- JSONObject h = hits.optJSONObject(i);
- if (h == null) {
- System.out.println("failed to parse hits[" + i + "]");
+ OpenSearch os = new OpenSearch();
+ String sort = request.getParameter("sort");
+ String sortOrder = request.getParameter("sortOrder");
+ int numFrom = 0;
+ // for historical code reasons, this needs to be "all" encounters,
+ // so we hope this does the job if background indexing set correctly
+ int pageSize = 10000;
+ try {
+ pageSize = os.getSettings(indexName).optInt("max_result_window", 10000);
+ } catch (Exception ex) {}
+ try {
+ os.deletePit(indexName);
+ JSONObject queryRes = os.queryPit(indexName, sanitized, numFrom, pageSize, sort,
+ sortOrder);
+ JSONObject outerHits = queryRes.optJSONObject("hits");
+ if (outerHits == null) {
+ System.out.println("could not find (outer) hits");
return failed;
}
- String hId = h.optString("_id", null);
- if (hId == null) {
- System.out.println("failed to parse _id from hits[" + i + "]");
+ JSONArray hits = outerHits.optJSONArray("hits");
+ if (hits == null) {
+ System.out.println("could not find hits");
return failed;
}
- // Encounter enc = myShepherd.getEncounter(hId);
- boolean hasAccess = Encounter.opensearchAccess(h.optJSONObject("_source"), user,
- myShepherd);
- if (hasAccess) encIds.add(hId);
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- return failed;
- }
- filter += " (catalogNumber == \"" + String.join("\") || (catalogNumber == \"",
- encIds) + "\")";
- System.out.println("queryStringBuilder: searchQueryId=" + searchQueryId + " yielded " +
- encIds.size() + " matching encounters");
- return filter;
- }
- // filter for location------------------------------------------
- if ((request.getParameter("locationField") != null) &&
- (!request.getParameter("locationField").equals(""))) {
- String locString = request.getParameter("locationField").toLowerCase().replaceAll("%20",
- " ").trim();
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "(verbatimLocality.toLowerCase().indexOf('" + locString + "') != -1)";
- } else {
- filter += " && (verbatimLocality.toLowerCase().indexOf('" + locString + "') != -1)";
- }
- prettyPrint.append("locationField contains \"" + locString + "\".
");
- }
- // end location filter--------------------------------------------------------------------------------------
- // filter for organization-------------------
- if ((request.getParameter("organizationId") != null) &&
- (!request.getParameter("organizationId").equals("")) &&
- Util.isUUID(request.getParameter("organizationId"))) {
- String orgId = request.getParameter("organizationId");
- filter =
- "SELECT FROM org.ecocean.Encounter WHERE user.username == this.submitterID && org.members.contains(user) && org.id == '"
- + orgId + "'";
- String variables_statement =
- " VARIABLES org.ecocean.User user; org.ecocean.Organization org";
- jdoqlVariableDeclaration = addOrgVars(variables_statement, filter);
- } else {}
- // end filter for organization------------------
- // filter for projectName-------------------
- if (Util.isUUID(request.getParameter("projectId"))) {
- filter = SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE +
- " proj.encounters.contains(this) && ";
- String[] projectIds = request.getParameterValues("projectId");
- if ((projectIds != null) && (!projectIds[0].equals("None"))) {
- prettyPrint.append("Assigned to one of the following projects: ");
- int numProjIds = projectIds.length;
- String projIdFilter = "(";
- for (int i = 0; i < numProjIds; i++) {
- String currentProjId = projectIds[i].toLowerCase().replaceAll("%20",
- " ").trim();
- if (!currentProjId.equals("")) {
- if (projIdFilter.equals("(")) {
- projIdFilter += " proj.id == \"" + currentProjId + "\"";
- } else {
- projIdFilter += " || proj.id == \"" + currentProjId + "\"";
+ for (int i = 0; i < hits.length(); i++) {
+ JSONObject h = hits.optJSONObject(i);
+ if (h == null) {
+ System.out.println("failed to parse hits[" + i + "]");
+ return failed;
}
+ String hId = h.optString("_id", null);
+ if (hId == null) {
+ System.out.println("failed to parse _id from hits[" + i + "]");
+ return failed;
+ }
+ // Encounter enc = myShepherd.getEncounter(hId);
+ boolean hasAccess = Encounter.opensearchAccess(h.optJSONObject("_source"),
+ user, myShepherd);
+ if (hasAccess) encIds.add(hId);
}
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ return failed;
}
- projIdFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE +
- " proj.encounters.contains(this) && ")) {
- filter += projIdFilter;
+ filter += " (catalogNumber == \"" + String.join("\") || (catalogNumber == \"",
+ encIds) + "\")";
+ System.out.println("queryStringBuilder: searchQueryId=" + searchQueryId +
+ " yielded " + encIds.size() + " matching encounters");
+ return filter;
+ }
+ // filter for location------------------------------------------
+ if ((request.getParameter("locationField") != null) &&
+ (!request.getParameter("locationField").equals(""))) {
+ String locString = request.getParameter("locationField").toLowerCase().replaceAll(
+ "%20", " ").trim();
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "(verbatimLocality.toLowerCase().indexOf('" + locString + "') != -1)";
} else {
- filter += (" && " + projIdFilter);
+ filter += " && (verbatimLocality.toLowerCase().indexOf('" + locString +
+ "') != -1)";
}
- prettyPrint.append(filter);
- prettyPrint.append("
");
- }
- String variables_statement = " VARIABLES org.ecocean.Project proj";
- jdoqlVariableDeclaration = addOrgVars(variables_statement, filter);
- } else {}
- // end filter for projectName------------------
- // username filters-------------------------------------------------
- String[] usernames = request.getParameterValues("username");
- if ((usernames != null) && (!usernames[0].equals("None"))) {
- prettyPrint.append("Assigned to one of the following usernames: ");
- int kwLength = usernames.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = usernames[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " submitterID == \"" + kwParam + "\"";
- } else {
- locIDFilter += " || submitterID == \"" + kwParam + "\"";
+ prettyPrint.append("locationField contains \"" + locString + "\".
");
+ }
+ // end location filter--------------------------------------------------------------------------------------
+ // filter for organization-------------------
+ if ((request.getParameter("organizationId") != null) &&
+ (!request.getParameter("organizationId").equals("")) &&
+ Util.isUUID(request.getParameter("organizationId"))) {
+ String orgId = request.getParameter("organizationId");
+ filter =
+ "SELECT FROM org.ecocean.Encounter WHERE user.username == this.submitterID && org.members.contains(user) && org.id == '"
+ + orgId + "'";
+ String variables_statement =
+ " VARIABLES org.ecocean.User user; org.ecocean.Organization org";
+ jdoqlVariableDeclaration = addOrgVars(variables_statement, filter);
+ } else {}
+ // end filter for organization------------------
+ // filter for projectName-------------------
+ if (Util.isUUID(request.getParameter("projectId"))) {
+ filter = SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE +
+ " proj.encounters.contains(this) && ";
+ String[] projectIds = request.getParameterValues("projectId");
+ if ((projectIds != null) && (!projectIds[0].equals("None"))) {
+ prettyPrint.append("Assigned to one of the following projects: ");
+ int numProjIds = projectIds.length;
+ String projIdFilter = "(";
+ for (int i = 0; i < numProjIds; i++) {
+ String currentProjId = projectIds[i].toLowerCase().replaceAll("%20",
+ " ").trim();
+ if (!currentProjId.equals("")) {
+ if (projIdFilter.equals("(")) {
+ projIdFilter += " proj.id == \"" + currentProjId + "\"";
+ } else {
+ projIdFilter += " || proj.id == \"" + currentProjId + "\"";
+ }
+ }
}
- prettyPrint.append(kwParam + " ");
- }
- }
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end username filters-----------------------------------------------
- // filter for resighted encounter------------------------------------------
- if (request.getParameter("resightOnly") != null) {
- // String locString=request.getParameter("locationField").toLowerCase().replaceAll("%20", " ").trim();
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "(individual != null)";
- } else { filter += " && (individual != null)"; }
- prettyPrint.append("Identified and resighted.
");
- }
- // end resighted filter--------------------------------------------------------------------------------------
- // filter for unassigned encounters------------------------------------------
- if (request.getParameter("unassigned") != null) {
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "(individual == null)";
- } else { filter += " && (individual == null)"; }
- prettyPrint.append("Unidentified.
");
- }
- // end unassigned filter--------------------------------------------------------------------------------------
- // locationID filters-------------------------------------------------
- String[] locCodes = request.getParameterValues("locationCodeField");
- if ((locCodes != null) && (!locCodes[0].equals(""))) {
- prettyPrint.append("locationCodeField is one of the following: ");
- int kwLength = locCodes.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = locCodes[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " locationID == \"" + kwParam + "\"";
+ projIdFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE +
+ " proj.encounters.contains(this) && ")) {
+ filter += projIdFilter;
} else {
- locIDFilter += " || locationID == \"" + kwParam + "\"";
+ filter += (" && " + projIdFilter);
}
- prettyPrint.append(kwParam + " ");
+ prettyPrint.append(filter);
+ prettyPrint.append("
");
}
- }
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end locationID filters-----------------------------------------------
- // annotation viewpoint and class filters-------------------------------------------------
- String[] hasViewpoint = request.getParameterValues("hasViewpoint");
- String[] hasIAClass = request.getParameterValues("hasIAClass");
- if (((hasViewpoint != null) && (!hasViewpoint[0].equals(""))) ||
- ((hasIAClass != null) && (!hasIAClass[0].equals("")))) {
- if ((hasViewpoint != null) && (!hasViewpoint[0].equals(""))) {
- prettyPrint.append("Viewpoint is one of the following: ");
- int kwLength = hasViewpoint.length;
+ String variables_statement = " VARIABLES org.ecocean.Project proj";
+ jdoqlVariableDeclaration = addOrgVars(variables_statement, filter);
+ } else {}
+ // end filter for projectName------------------
+ // username filters-------------------------------------------------
+ String[] usernames = request.getParameterValues("username");
+ if ((usernames != null) && (!usernames[0].equals("None"))) {
+ prettyPrint.append("Assigned to one of the following usernames: ");
+ int kwLength = usernames.length;
String locIDFilter = "(";
for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = hasViewpoint[kwIter].trim();
+ String kwParam = usernames[kwIter].replaceAll("%20", " ").trim();
if (!kwParam.equals("")) {
if (locIDFilter.equals("(")) {
- locIDFilter += " annot46.viewpoint == \"" + kwParam + "\"";
+ locIDFilter += " submitterID == \"" + kwParam + "\"";
} else {
- locIDFilter += " || annot46.viewpoint == \"" + kwParam + "\"";
+ locIDFilter += " || submitterID == \"" + kwParam + "\"";
}
prettyPrint.append(kwParam + " ");
}
@@ -268,19 +203,39 @@ public static String queryStringBuilder(HttpServletRequest request, StringBuffer
if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
filter += locIDFilter;
} else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
+ prettyPrint.append("
");
}
- if ((hasIAClass != null) && (!hasIAClass[0].equals(""))) {
- prettyPrint.append("IA class is one of the following: ");
- int kwLength = hasIAClass.length;
+ // end username filters-----------------------------------------------
+ // filter for resighted encounter------------------------------------------
+ if (request.getParameter("resightOnly") != null) {
+ // String locString=request.getParameter("locationField").toLowerCase().replaceAll("%20", " ").trim();
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "(individual != null)";
+ } else { filter += " && (individual != null)"; }
+ prettyPrint.append("Identified and resighted.
");
+ }
+ // end resighted filter--------------------------------------------------------------------------------------
+ // filter for unassigned encounters------------------------------------------
+ if (request.getParameter("unassigned") != null) {
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "(individual == null)";
+ } else { filter += " && (individual == null)"; }
+ prettyPrint.append("Unidentified.
");
+ }
+ // end unassigned filter--------------------------------------------------------------------------------------
+ // locationID filters-------------------------------------------------
+ String[] locCodes = request.getParameterValues("locationCodeField");
+ if ((locCodes != null) && (!locCodes[0].equals(""))) {
+ prettyPrint.append("locationCodeField is one of the following: ");
+ int kwLength = locCodes.length;
String locIDFilter = "(";
for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = hasIAClass[kwIter].trim();
+ String kwParam = locCodes[kwIter].replaceAll("%20", " ").trim();
if (!kwParam.equals("")) {
if (locIDFilter.equals("(")) {
- locIDFilter += " annot46.iaClass == \"" + kwParam + "\"";
+ locIDFilter += " locationID == \"" + kwParam + "\"";
} else {
- locIDFilter += " || annot46.iaClass == \"" + kwParam + "\"";
+ locIDFilter += " || locationID == \"" + kwParam + "\"";
}
prettyPrint.append(kwParam + " ");
}
@@ -291,1240 +246,1317 @@ public static String queryStringBuilder(HttpServletRequest request, StringBuffer
} else { filter += (" && " + locIDFilter); }
prettyPrint.append("
");
}
- // set the jdoql variable used by both
- filter += (" && annotations.contains(annot46)");
- if (jdoqlVariableDeclaration.length() > 0) {
- jdoqlVariableDeclaration += ";org.ecocean.Annotation annot46;";
- } else {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.Annotation annot46";
- }
- }
- // end viewpoint and class filters-----------------------------------------------
- // state filters-------------------------------------------------
- String[] states = request.getParameterValues("state");
- if ((states != null) && (!states[0].equals("None"))) {
- prettyPrint.append("State is one of the following: ");
- int kwLength = states.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = states[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " state == \"" + kwParam + "\"";
- } else {
- locIDFilter += " || state == \"" + kwParam + "\"";
+ // end locationID filters-----------------------------------------------
+ // annotation viewpoint and class filters-------------------------------------------------
+ String[] hasViewpoint = request.getParameterValues("hasViewpoint");
+ String[] hasIAClass = request.getParameterValues("hasIAClass");
+ if (((hasViewpoint != null) && (!hasViewpoint[0].equals(""))) ||
+ ((hasIAClass != null) && (!hasIAClass[0].equals("")))) {
+ if ((hasViewpoint != null) && (!hasViewpoint[0].equals(""))) {
+ prettyPrint.append("Viewpoint is one of the following: ");
+ int kwLength = hasViewpoint.length;
+ String locIDFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = hasViewpoint[kwIter].trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " annot46.viewpoint == \"" + kwParam + "\"";
+ } else {
+ locIDFilter += " || annot46.viewpoint == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
+ }
}
- prettyPrint.append(kwParam + " ");
+ locIDFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
}
- }
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end state filters-----------------------------------------------
- // individualID filters-------------------------------------------------
- // supports multiple individualID parameters as well as comma-separated lists of individualIDs within them
- String individualID = request.getParameter("individualID");
- if ((individualID != null) && (!individualID.equals("None")) &&
- (!individualID.trim().equals(""))) {
- prettyPrint.append("Individual ID contains the following: ");
-
- String locIDFilter = " (individual.individualID == \"" + individualID +
- "\" || individual.names.valuesAsString.toLowerCase().indexOf(\"" +
- individualID.toLowerCase() + "\") != -1) ";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end individualID filters-----------------------------------------------
- // occurrenceID filters-------------------------------------------------
- String occurrenceID = request.getParameter("occurrenceID");
- if ((occurrenceID != null) && (!occurrenceID.equals("None")) &&
- (!occurrenceID.trim().equals(""))) {
- prettyPrint.append("occurrence ID contains the following: ");
-
- String locIDFilter = " occurrenceID == \"" + occurrenceID + "\"";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end occurrenceID filters-----------------------------------------------
- // individualIDExact filters-------------------------------------------------
- // supports one individualID parameter as well as comma-separated lists of individualIDs within them
- String individualIDExact = request.getParameter("individualIDExact");
- if ((individualIDExact != null) && (!individualIDExact.trim().equals(""))) {
- prettyPrint.append("Individual ID is exactly the following: ");
-
- String locIDFilter = " individual.individualID == \"" + individualIDExact.trim() +
- "\" ";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end individualID filters-----------------------------------------------
- // socialunit filters------------------------------------------------------------------
- // community search
- /*
- * to filter Encounnter based on community firstly we need to get the social units associated with the communities and get the individualIDs
- * from the social units and then use these individualIDs to filter the Encounters
- */
- if (request.getParameterValues("community") != null) {
- String[] communities = request.getParameterValues("community");
- int numCommunities = communities.length;
- prettyPrint.append("Social unit is one of the following: ");
-
- Set individualsIdsSet = new HashSet();
- for (int i = 0; i < numCommunities; i++) {
- prettyPrint.append(communities[i] + " ");
-
- SocialUnit su = myShepherd.getSocialUnit(communities[i]);
- if (su == null) continue;
- for (Membership member : su.getAllMembers()) {
- if (member.getMarkedIndividual() != null) {
- individualsIdsSet.add(member.getMarkedIndividual().getId());
+ if ((hasIAClass != null) && (!hasIAClass[0].equals(""))) {
+ prettyPrint.append("IA class is one of the following: ");
+ int kwLength = hasIAClass.length;
+ String locIDFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = hasIAClass[kwIter].trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " annot46.iaClass == \"" + kwParam + "\"";
+ } else {
+ locIDFilter += " || annot46.iaClass == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
+ }
}
+ locIDFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
+ }
+ // set the jdoql variable used by both
+ filter += (" && annotations.contains(annot46)");
+ if (jdoqlVariableDeclaration.length() > 0) {
+ jdoqlVariableDeclaration += ";org.ecocean.Annotation annot46;";
+ } else {
+ jdoqlVariableDeclaration = " VARIABLES org.ecocean.Annotation annot46";
}
}
- List individualsIds = new ArrayList(individualsIdsSet);
- if (individualsIds.size() > 0) {
- String locIDFilter = " ( individual.individualID == \"" + individualsIds.get(0) +
- "\" ";
- for (int j = 1; j < individualsIds.size(); j++) {
- locIDFilter += " || individual.individualID == \"" + individualsIds.get(j) +
- "\" ";
+ // end viewpoint and class filters-----------------------------------------------
+ // state filters-------------------------------------------------
+ String[] states = request.getParameterValues("state");
+ if ((states != null) && (!states[0].equals("None"))) {
+ prettyPrint.append("State is one of the following: ");
+ int kwLength = states.length;
+ String locIDFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = states[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " state == \"" + kwParam + "\"";
+ } else {
+ locIDFilter += " || state == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
+ }
}
- locIDFilter = locIDFilter + " ) ";
+ locIDFilter += " )";
if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
filter += locIDFilter;
} else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
}
- prettyPrint.append("
");
- }
- // role search
- /*
- * to filter Encounnter based on role fetch all the MarkedIndividuals for each MarkedIndividuals gets all roles then check if requested role
- * is not present remove that MarkedIndividuals finally use these individualIDs to filter the Encounters
- */
- if (request.getParameterValues("role") != null) {
- boolean orRoles = true;
- Iterator allSharks = myShepherd.getAllMarkedIndividuals();
- Vector rIndividuals = new Vector();
- if (allSharks != null) {
- while (allSharks.hasNext()) {
- MarkedIndividual temp_shark = allSharks.next();
- rIndividuals.add(temp_shark);
- }
- }
- if (request.getParameter("andRoles") != null) { orRoles = false; }
- String[] roles = request.getParameterValues("role");
- int numRoles = roles.length;
- if (!orRoles) {
- prettyPrint.append("Social roles include all of the following: ");
- } else {
- prettyPrint.append("Social roles is one of the following: ");
- }
- for (int h = 0; h < numRoles; h++) {
- prettyPrint.append(roles[h] + " ");
+ // end state filters-----------------------------------------------
+ // individualID filters-------------------------------------------------
+ // supports multiple individualID parameters as well as comma-separated lists of individualIDs within them
+ String individualID = request.getParameter("individualID");
+ if ((individualID != null) && (!individualID.equals("None")) &&
+ (!individualID.trim().equals(""))) {
+ prettyPrint.append("Individual ID contains the following: ");
+
+ String locIDFilter = " (individual.individualID == \"" + individualID +
+ "\" || individual.names.valuesAsString.toLowerCase().indexOf(\"" +
+ individualID.toLowerCase() + "\") != -1) ";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
}
- // logical OR the roles
- for (int q = 0; q < rIndividuals.size(); q++) {
- MarkedIndividual tShark = (MarkedIndividual)rIndividuals.get(q);
- List myRoles = myShepherd.getAllRoleNamesForMarkedIndividual(
- tShark.getIndividualID());
- if (orRoles) {
- // logical OR the role
- boolean hasRole = false;
- int f = 0;
- while (!hasRole && (f < numRoles)) {
- if (myRoles.contains(roles[f])) { hasRole = true; }
- f++;
- }
- if (!hasRole) {
- rIndividuals.remove(q);
- q--;
- }
- } else {
- // logical AND the roles
- boolean hasRole = true;
- int f = 0;
- while (hasRole && (f < numRoles)) {
- if (!myRoles.contains(roles[f])) { hasRole = false; }
- f++;
- }
- if (!hasRole) {
- rIndividuals.remove(q);
- q--;
- }
- }
+ // end individualID filters-----------------------------------------------
+ // occurrenceID filters-------------------------------------------------
+ String occurrenceID = request.getParameter("occurrenceID");
+ if ((occurrenceID != null) && (!occurrenceID.equals("None")) &&
+ (!occurrenceID.trim().equals(""))) {
+ prettyPrint.append("occurrence ID contains the following: ");
+
+ String locIDFilter = " occurrenceID == \"" + occurrenceID + "\"";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
}
- if (rIndividuals.size() > 0) {
- String locIDFilter = " ( individual.individualID == \"" +
- rIndividuals.get(0).getId() + "\" ";
- for (int j = 1; j < rIndividuals.size(); j++) {
- locIDFilter += " || individual.individualID == \"" +
- rIndividuals.get(j).getId() + "\" ";
- }
- locIDFilter = locIDFilter + " ) ";
+ // end occurrenceID filters-----------------------------------------------
+ // individualIDExact filters-------------------------------------------------
+ // supports one individualID parameter as well as comma-separated lists of individualIDs within them
+ String individualIDExact = request.getParameter("individualIDExact");
+ if ((individualIDExact != null) && (!individualIDExact.trim().equals(""))) {
+ prettyPrint.append("Individual ID is exactly the following: ");
+
+ String locIDFilter = " individual.individualID == \"" + individualIDExact.trim() +
+ "\" ";
if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
filter += locIDFilter;
} else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
}
- prettyPrint.append("
");
- }
- // patterningCode filters-------------------------------------------------
- String[] patterningCodes = request.getParameterValues("patterningCodeField");
- if ((patterningCodes != null) && (!patterningCodes[0].equals("None"))) {
- prettyPrint.append("Patterning code is one of the following: ");
- int kwLength = patterningCodes.length;
- String patterningCodeFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = patterningCodes[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (patterningCodeFilter.equals("(")) {
- patterningCodeFilter += " patterningCode == \"" + kwParam + "\"";
- } else {
- patterningCodeFilter += " || patterningCode == \"" + kwParam + "\"";
+ // end individualID filters-----------------------------------------------
+ // socialunit filters------------------------------------------------------------------
+ // community search
+ /*
+ * to filter Encounnter based on community firstly we need to get the social units associated with the communities and get the individualIDs
+ * from the social units and then use these individualIDs to filter the Encounters
+ */
+ if (request.getParameterValues("community") != null) {
+ String[] communities = request.getParameterValues("community");
+ int numCommunities = communities.length;
+ prettyPrint.append("Social unit is one of the following: ");
+
+ Set individualsIdsSet = new HashSet();
+ for (int i = 0; i < numCommunities; i++) {
+ prettyPrint.append(communities[i] + " ");
+
+ SocialUnit su = myShepherd.getSocialUnit(communities[i]);
+ if (su == null) continue;
+ for (Membership member : su.getAllMembers()) {
+ if (member.getMarkedIndividual() != null) {
+ individualsIdsSet.add(member.getMarkedIndividual().getId());
+ }
}
- prettyPrint.append(kwParam + " ");
}
- }
- patterningCodeFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += patterningCodeFilter;
- } else { filter += (" && " + patterningCodeFilter); }
- prettyPrint.append("
");
- }
- // end patterningCode filters-----------------------------------------------
- // behavior filters-------------------------------------------------
- String[] behaviors = request.getParameterValues("behaviorField");
- if ((behaviors != null) && (!behaviors[0].equals("None"))) {
- prettyPrint.append("behaviorField is one of the following: ");
- int kwLength = behaviors.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = behaviors[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " behavior == \"" + kwParam + "\"";
- } else {
- locIDFilter += " || behavior == \"" + kwParam + "\"";
+ List individualsIds = new ArrayList(individualsIdsSet);
+ if (individualsIds.size() > 0) {
+ String locIDFilter = " ( individual.individualID == \"" +
+ individualsIds.get(0) + "\" ";
+ for (int j = 1; j < individualsIds.size(); j++) {
+ locIDFilter += " || individual.individualID == \"" + individualsIds.get(j) +
+ "\" ";
}
- prettyPrint.append(kwParam + " ");
+ locIDFilter = locIDFilter + " ) ";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
}
+ prettyPrint.append("
");
}
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end behavior filters-----------------------------------------------
- // begin observation filters -----------------------------------------
- boolean hasValue = false;
- if (request.getParameter("numSearchedObs") != null) {
- if (request.getParameter("observationKey1") != null &&
- !request.getParameter("observationKey1").equals("")) {
- hasValue = true;
- }
- }
- Enumeration allParams = request.getParameterNames();
- if (allParams != null && hasValue) {
- String keyID = "observationKey";
- String valID = "observationValue";
- HashMap obKeys = new HashMap<>();
- HashMap obVals = new HashMap<>();
- StringBuilder obQuery = new StringBuilder();
- int numObsSearched = 0;
- while (allParams.hasMoreElements()) {
- String thisParam = allParams.nextElement();
- if (thisParam != null && thisParam.startsWith(keyID)) {
- numObsSearched++;
- System.out.println("Num Obs Searched? " + numObsSearched);
- String keyParam = request.getParameter(thisParam);
- String keyNum = thisParam.replace(keyID, "");
- if (keyParam != null && !keyParam.equals("")) {
- obKeys.put(keyNum, keyParam);
+ // role search
+ /*
+ * to filter Encounnter based on role fetch all the MarkedIndividuals for each MarkedIndividuals gets all roles then check if requested role
+ * is not present remove that MarkedIndividuals finally use these individualIDs to filter the Encounters
+ */
+ if (request.getParameterValues("role") != null) {
+ boolean orRoles = true;
+ Iterator allSharks = myShepherd.getAllMarkedIndividuals();
+ Vector rIndividuals = new Vector();
+ if (allSharks != null) {
+ while (allSharks.hasNext()) {
+ MarkedIndividual temp_shark = allSharks.next();
+ rIndividuals.add(temp_shark);
}
}
- if (thisParam != null && thisParam.startsWith(valID)) {
- String valParam = request.getParameter(thisParam);
- String valNum = thisParam.replace(valID, "");
- if (valParam != null && !valParam.equals("")) {
- obVals.put(valNum, valParam);
- }
+ if (request.getParameter("andRoles") != null) { orRoles = false; }
+ String[] roles = request.getParameterValues("role");
+ int numRoles = roles.length;
+ if (!orRoles) {
+ prettyPrint.append("Social roles include all of the following: ");
+ } else {
+ prettyPrint.append("Social roles is one of the following: ");
}
- }
- for (int i = 1; i <= numObsSearched; i++) {
- String num = String.valueOf(i);
- if (Util.basicSanitize(obKeys.get(num)) != null) {
- String thisKey = Util.basicSanitize(obKeys.get(num));
- prettyPrint.append("observation ");
- prettyPrint.append(thisKey);
- prettyPrint.append("
");
- String qAsString = obQuery.toString().trim();
- System.out.println("Query As String" + qAsString);
- if (qAsString.length() >= 2 &&
- !qAsString.substring(qAsString.length() - 2).equals("&&")) {
- obQuery.append("&&");
- }
- obQuery.append("(observations.contains(observation" + num + ") && ");
- obQuery.append("observation" + num + ".name == " + Util.quote(thisKey.trim()));
- if (obVals.get(num) != null && !obVals.get(num).trim().equals("")) {
- String thisVal = Util.basicSanitize(obVals.get(num));
- prettyPrint.append(" is ");
- prettyPrint.append(thisVal);
- obQuery.append(" && observation" + num + ".value == " +
- Util.quote(thisVal.trim()));
- }
- obQuery.append(")");
+ for (int h = 0; h < numRoles; h++) {
+ prettyPrint.append(roles[h] + " ");
}
- if (obQuery.length() > 0) {
- if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += " && ";
+ // logical OR the roles
+ for (int q = 0; q < rIndividuals.size(); q++) {
+ MarkedIndividual tShark = (MarkedIndividual)rIndividuals.get(q);
+ List myRoles = myShepherd.getAllRoleNamesForMarkedIndividual(
+ tShark.getIndividualID());
+ if (orRoles) {
+ // logical OR the role
+ boolean hasRole = false;
+ int f = 0;
+ while (!hasRole && (f < numRoles)) {
+ if (myRoles.contains(roles[f])) { hasRole = true; }
+ f++;
+ }
+ if (!hasRole) {
+ rIndividuals.remove(q);
+ q--;
+ }
+ } else {
+ // logical AND the roles
+ boolean hasRole = true;
+ int f = 0;
+ while (hasRole && (f < numRoles)) {
+ if (!myRoles.contains(roles[f])) { hasRole = false; }
+ f++;
+ }
+ if (!hasRole) {
+ rIndividuals.remove(q);
+ q--;
+ }
}
- filter += obQuery.toString();
- for (int j = 0; j < numObsSearched; j++) {
- QueryProcessor.updateJdoqlVariableDeclaration(jdoqlVariableDeclaration,
- "org.ecocean.Observation observation" + j);
+ }
+ if (rIndividuals.size() > 0) {
+ String locIDFilter = " ( individual.individualID == \"" +
+ rIndividuals.get(0).getId() + "\" ";
+ for (int j = 1; j < rIndividuals.size(); j++) {
+ locIDFilter += " || individual.individualID == \"" +
+ rIndividuals.get(j).getId() + "\" ";
}
- System.out.println("ObQuery: " + obQuery);
- System.out.println("Filter? " + filter);
+ locIDFilter = locIDFilter + " ) ";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
}
+ prettyPrint.append("
");
}
- }
- // Tag Filters--------------------------------------------------------
-
- StringBuilder metalTagFilter = new StringBuilder();
- Enumeration parameterNames = request.getParameterNames();
- int metalTagsInQuery = 0;
- while (parameterNames.hasMoreElements()) {
- String parameterName = parameterNames.nextElement();
- final String metalTagPrefix = "metalTag(";
- if (parameterName.startsWith(metalTagPrefix)) {
- String metalTagLocation = parameterName.substring(metalTagPrefix.length(),
- parameterName.lastIndexOf(')'));
- String value = request.getParameter(parameterName);
- if (value != null && value.trim().length() > 0) {
- prettyPrint.append("metal tag ");
- prettyPrint.append(metalTagLocation);
- prettyPrint.append(" is ");
- prettyPrint.append(value);
- prettyPrint.append("
");
- String metalTagVar = "metalTag" + metalTagsInQuery++;
- metalTagFilter.append("(metalTags.contains(" + metalTagVar + ") && ");
- metalTagFilter.append(metalTagVar + ".location == " +
- Util.quote(metalTagLocation));
- String jdoParam = "tagNumber" + metalTagsInQuery;
- metalTagFilter.append(" && " + metalTagVar + ".tagNumber == " + jdoParam + ")");
- paramMap.put(jdoParam, value);
- parameterDeclaration = updateParametersDeclaration(parameterDeclaration,
- "String " + jdoParam);
+ // patterningCode filters-------------------------------------------------
+ String[] patterningCodes = request.getParameterValues("patterningCodeField");
+ if ((patterningCodes != null) && (!patterningCodes[0].equals("None"))) {
+ prettyPrint.append("Patterning code is one of the following: ");
+ int kwLength = patterningCodes.length;
+ String patterningCodeFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = patterningCodes[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (patterningCodeFilter.equals("(")) {
+ patterningCodeFilter += " patterningCode == \"" + kwParam + "\"";
+ } else {
+ patterningCodeFilter += " || patterningCode == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
+ }
}
+ patterningCodeFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += patterningCodeFilter;
+ } else { filter += (" && " + patterningCodeFilter); }
+ prettyPrint.append("
");
}
- }
- if (metalTagFilter.length() > 0) {
- if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += " && ";
- }
- filter += metalTagFilter.toString();
- for (int i = 0; i < metalTagsInQuery; i++) {
- QueryProcessor.updateJdoqlVariableDeclaration(jdoqlVariableDeclaration,
- "org.ecocean.tag.MetalTag metalTag" + i);
- }
- }
- // We don't do metal tags (above) in processTagFilters because of the dependency on jdoqlVariableDeclaration
- String tagFilters = processTagFilters(request, prettyPrint);
- if (tagFilters.length() > 0) {
- if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += " && ";
- }
- filter += tagFilters.toString();
- }
- // end tag filters----------------------------------------------------
- // lifeStage filters-------------------------------------------------
- String[] stages = request.getParameterValues("lifeStageField");
- if ((stages != null) && (!stages[0].equals("None")) && (!stages[0].equals(""))) {
- prettyPrint.append("lifeStage is one of the following: ");
- int kwLength = stages.length;
- String stageFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = stages[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (stageFilter.equals("(")) {
- stageFilter += " lifeStage == \"" + kwParam + "\"";
- } else {
- stageFilter += " || lifeStage == \"" + kwParam + "\"";
+ // end patterningCode filters-----------------------------------------------
+ // behavior filters-------------------------------------------------
+ String[] behaviors = request.getParameterValues("behaviorField");
+ if ((behaviors != null) && (!behaviors[0].equals("None"))) {
+ prettyPrint.append("behaviorField is one of the following: ");
+ int kwLength = behaviors.length;
+ String locIDFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = behaviors[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " behavior == \"" + kwParam + "\"";
+ } else {
+ locIDFilter += " || behavior == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
}
- prettyPrint.append(kwParam + " ");
}
+ locIDFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
}
- stageFilter += " ) ";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += stageFilter;
- } else { filter += (" && " + stageFilter); }
- prettyPrint.append("
");
- }
- // end lifeStage filters
- // country filters-------------------------------------------------
- String[] countries = request.getParameterValues("country");
- if ((countries != null) && (!countries[0].equals("None")) && (!countries[0].equals(""))) {
- prettyPrint.append("Country is one of the following: ");
- int kwLength = countries.length;
- String stageFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = countries[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (stageFilter.equals("(")) {
- stageFilter += " country == \"" + kwParam + "\"";
- } else {
- stageFilter += " || country == \"" + kwParam + "\"";
- }
- prettyPrint.append(kwParam + " ");
+ // end behavior filters-----------------------------------------------
+ // begin observation filters -----------------------------------------
+ boolean hasValue = false;
+ if (request.getParameter("numSearchedObs") != null) {
+ if (request.getParameter("observationKey1") != null &&
+ !request.getParameter("observationKey1").equals("")) {
+ hasValue = true;
}
}
- stageFilter += " ) ";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += stageFilter;
- } else { filter += (" && " + stageFilter); }
- prettyPrint.append("
");
- }
- // end country filters
- // Measurement filters-----------------------------------------------
- List measurementDescs = Util.findMeasurementDescs("en", context);
- String measurementPrefix = "measurement";
- StringBuilder measurementFilter = new StringBuilder(); // "( collectedData.contains(measurement) && (");
- boolean atLeastOneMeasurement = false;
- int measurementsInQuery = 0;
- for (MeasurementDesc measurementDesc : measurementDescs) {
- String valueParamName = measurementPrefix + measurementDesc.getType() + "(value)";
- String value = request.getParameter(valueParamName);
- if (value != null) {
- value = value.trim();
- if (value.length() > 0) {
- String operatorParamName = measurementPrefix + measurementDesc.getType() +
- "(operator)";
- String operatorParamValue = request.getParameter(operatorParamName);
- if (operatorParamValue == null) {
- operatorParamValue = "";
+ Enumeration allParams = request.getParameterNames();
+ if (allParams != null && hasValue) {
+ String keyID = "observationKey";
+ String valID = "observationValue";
+ HashMap obKeys = new HashMap<>();
+ HashMap obVals = new HashMap<>();
+ StringBuilder obQuery = new StringBuilder();
+ int numObsSearched = 0;
+ while (allParams.hasMoreElements()) {
+ String thisParam = allParams.nextElement();
+ if (thisParam != null && thisParam.startsWith(keyID)) {
+ numObsSearched++;
+ System.out.println("Num Obs Searched? " + numObsSearched);
+ String keyParam = request.getParameter(thisParam);
+ String keyNum = thisParam.replace(keyID, "");
+ if (keyParam != null && !keyParam.equals("")) {
+ obKeys.put(keyNum, keyParam);
+ }
}
- String operator = null;
- if ("gt".equals(operatorParamValue)) {
- operator = ">";
- } else if ("lt".equals(operatorParamValue)) {
- operator = "<";
- } else if ("eq".equals(operatorParamValue)) {
- operator = "==";
- } else if ("gteq".equals(operatorParamValue)) {
- operator = ">=";
- } else if ("lteq".equals(operatorParamValue)) {
- operator = "<=";
+ if (thisParam != null && thisParam.startsWith(valID)) {
+ String valParam = request.getParameter(thisParam);
+ String valNum = thisParam.replace(valID, "");
+ if (valParam != null && !valParam.equals("")) {
+ obVals.put(valNum, valParam);
+ }
}
- if (operator != null) {
- prettyPrint.append(measurementDesc.getUnitsLabel());
- prettyPrint.append(" is ");
- prettyPrint.append(operator);
- prettyPrint.append(value);
+ }
+ for (int i = 1; i <= numObsSearched; i++) {
+ String num = String.valueOf(i);
+ if (Util.basicSanitize(obKeys.get(num)) != null) {
+ String thisKey = Util.basicSanitize(obKeys.get(num));
+ prettyPrint.append("observation ");
+ prettyPrint.append(thisKey);
prettyPrint.append("
");
- if (atLeastOneMeasurement) {
- measurementFilter.append("&&");
+ String qAsString = obQuery.toString().trim();
+ System.out.println("Query As String" + qAsString);
+ if (qAsString.length() >= 2 &&
+ !qAsString.substring(qAsString.length() - 2).equals("&&")) {
+ obQuery.append("&&");
}
- String measurementVar = "measurement" + measurementsInQuery++;
- measurementFilter.append("measurements.contains(" + measurementVar +
- ") && ");
- measurementFilter.append("(" + measurementVar + ".value " + operator + " " +
- value + ")");
- measurementFilter.append(" && (" + measurementVar + ".type == ");
- measurementFilter.append("\"" + measurementDesc.getType() + "\")");
- atLeastOneMeasurement = true;
+ obQuery.append("(observations.contains(observation" + num + ") && ");
+ obQuery.append("observation" + num + ".name == " +
+ Util.quote(thisKey.trim()));
+ if (obVals.get(num) != null && !obVals.get(num).trim().equals("")) {
+ String thisVal = Util.basicSanitize(obVals.get(num));
+ prettyPrint.append(" is ");
+ prettyPrint.append(thisVal);
+ obQuery.append(" && observation" + num + ".value == " +
+ Util.quote(thisVal.trim()));
+ }
+ obQuery.append(")");
+ }
+ if (obQuery.length() > 0) {
+ if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += " && ";
+ }
+ filter += obQuery.toString();
+ for (int j = 0; j < numObsSearched; j++) {
+ QueryProcessor.updateJdoqlVariableDeclaration(jdoqlVariableDeclaration,
+ "org.ecocean.Observation observation" + j);
+ }
+ System.out.println("ObQuery: " + obQuery);
+ System.out.println("Filter? " + filter);
}
}
}
- }
- if (atLeastOneMeasurement) {
- if (jdoqlVariableDeclaration.length() > 0) {
- jdoqlVariableDeclaration += ";";
- } else {
- jdoqlVariableDeclaration = " VARIABLES ";
- }
- for (int i = 0; i < measurementsInQuery; i++) {
- if (i > 0) {
- jdoqlVariableDeclaration += "; ";
- }
- jdoqlVariableDeclaration += " org.ecocean.Measurement measurement" + i;
- }
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += measurementFilter.toString();
- } else {
- filter += (" && " + measurementFilter.toString());
- }
- }
- // end measurement filters
- // BiologicalMeasurement filters-----------------------------------------------
- List bioMeasurementDescs = Util.findBiologicalMeasurementDescs("en",
- context);
- String bioMeasurementPrefix = "biomeasurement";
- StringBuilder bioMeasurementFilter = new StringBuilder();
- bioMeasurementFilter.append("tissueSamples.contains(dce322) ");
- boolean bioAtLeastOneMeasurement = false;
- int bioMeasurementsInQuery = 0;
- for (MeasurementDesc measurementDesc : bioMeasurementDescs) {
- String valueParamName = bioMeasurementPrefix + measurementDesc.getType() + "(value)";
- String value = request.getParameter(valueParamName);
- if (value != null) {
- value = value.trim();
- if (value.length() > 0) {
- String operatorParamName = bioMeasurementPrefix + measurementDesc.getType() +
- "(operator)";
- String operatorParamValue = request.getParameter(operatorParamName);
- if (operatorParamValue == null) {
- operatorParamValue = "";
- }
- String operator = null;
- if ("gt".equals(operatorParamValue)) {
- operator = ">";
- } else if ("lt".equals(operatorParamValue)) {
- operator = "<";
- } else if ("eq".equals(operatorParamValue)) {
- operator = "==";
- } else if ("gteq".equals(operatorParamValue)) {
- operator = ">=";
- } else if ("lteq".equals(operatorParamValue)) {
- operator = "<=";
- }
- if (operator != null) {
- prettyPrint.append("Biological/chemical measurement " +
- measurementDesc.getType());
+ // Tag Filters--------------------------------------------------------
+
+ StringBuilder metalTagFilter = new StringBuilder();
+ Enumeration parameterNames = request.getParameterNames();
+ int metalTagsInQuery = 0;
+ while (parameterNames.hasMoreElements()) {
+ String parameterName = parameterNames.nextElement();
+ final String metalTagPrefix = "metalTag(";
+ if (parameterName.startsWith(metalTagPrefix)) {
+ String metalTagLocation = parameterName.substring(metalTagPrefix.length(),
+ parameterName.lastIndexOf(')'));
+ String value = request.getParameter(parameterName);
+ if (value != null && value.trim().length() > 0) {
+ prettyPrint.append("metal tag ");
+ prettyPrint.append(metalTagLocation);
prettyPrint.append(" is ");
- prettyPrint.append(operator);
prettyPrint.append(value);
prettyPrint.append("
");
- if (bioAtLeastOneMeasurement) {
- bioMeasurementFilter.append("&&");
- }
- String measurementVar = "biomeasurement" + bioMeasurementsInQuery++;
- bioMeasurementFilter.append(" & dce322.analyses.contains(" +
- measurementVar + ") ");
- bioMeasurementFilter.append(" && ( " + measurementVar + ".value " +
- operator + " " + value + " )");
- bioMeasurementFilter.append(" && ( " + measurementVar +
- ".measurementType == ");
- bioMeasurementFilter.append("\"" + measurementDesc.getType() + "\" )");
- bioAtLeastOneMeasurement = true;
+ String metalTagVar = "metalTag" + metalTagsInQuery++;
+ metalTagFilter.append("(metalTags.contains(" + metalTagVar + ") && ");
+ metalTagFilter.append(metalTagVar + ".location == " +
+ Util.quote(metalTagLocation));
+ String jdoParam = "tagNumber" + metalTagsInQuery;
+ metalTagFilter.append(" && " + metalTagVar + ".tagNumber == " + jdoParam +
+ ")");
+ paramMap.put(jdoParam, value);
+ parameterDeclaration = updateParametersDeclaration(parameterDeclaration,
+ "String " + jdoParam);
}
}
}
- }
- if (bioAtLeastOneMeasurement) {
- if (jdoqlVariableDeclaration.length() > 0) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce322;";
- } else {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.genetics.TissueSample dce322;";
- }
- for (int i = 0; i < bioMeasurementsInQuery; i++) {
- if (i > 0) {
- jdoqlVariableDeclaration += "; ";
+ if (metalTagFilter.length() > 0) {
+ if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += " && ";
+ }
+ filter += metalTagFilter.toString();
+ for (int i = 0; i < metalTagsInQuery; i++) {
+ QueryProcessor.updateJdoqlVariableDeclaration(jdoqlVariableDeclaration,
+ "org.ecocean.tag.MetalTag metalTag" + i);
}
- jdoqlVariableDeclaration +=
- "org.ecocean.genetics.BiologicalMeasurement biomeasurement" + i;
}
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += bioMeasurementFilter.toString();
- } else {
- filter += (" && " + bioMeasurementFilter.toString());
+ // We don't do metal tags (above) in processTagFilters because of the dependency on jdoqlVariableDeclaration
+ String tagFilters = processTagFilters(request, prettyPrint);
+ if (tagFilters.length() > 0) {
+ if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += " && ";
+ }
+ filter += tagFilters.toString();
+ }
+ // end tag filters----------------------------------------------------
+ // lifeStage filters-------------------------------------------------
+ String[] stages = request.getParameterValues("lifeStageField");
+ if ((stages != null) && (!stages[0].equals("None")) && (!stages[0].equals(""))) {
+ prettyPrint.append("lifeStage is one of the following: ");
+ int kwLength = stages.length;
+ String stageFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = stages[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (stageFilter.equals("(")) {
+ stageFilter += " lifeStage == \"" + kwParam + "\"";
+ } else {
+ stageFilter += " || lifeStage == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
+ }
+ }
+ stageFilter += " ) ";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += stageFilter;
+ } else { filter += (" && " + stageFilter); }
+ prettyPrint.append("
");
}
- }
- // end BiologicalMeasurement filters
- // verbatimEventDate filters-------------------------------------------------
- String[] verbatimEventDates = request.getParameterValues("verbatimEventDateField");
- if ((verbatimEventDates != null) && (!verbatimEventDates[0].equals("None"))) {
- prettyPrint.append("verbatimEventDateField is one of the following: ");
- int kwLength = verbatimEventDates.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = verbatimEventDates[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " verbatimEventDate == \"" + kwParam + "\"";
- } else {
- locIDFilter += " || verbatimEventDate == \"" + kwParam + "\"";
+ // end lifeStage filters
+ // country filters-------------------------------------------------
+ String[] countries = request.getParameterValues("country");
+ if ((countries != null) && (!countries[0].equals("None")) &&
+ (!countries[0].equals(""))) {
+ prettyPrint.append("Country is one of the following: ");
+ int kwLength = countries.length;
+ String stageFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = countries[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (stageFilter.equals("(")) {
+ stageFilter += " country == \"" + kwParam + "\"";
+ } else {
+ stageFilter += " || country == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
}
- prettyPrint.append(kwParam + " ");
}
+ stageFilter += " ) ";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += stageFilter;
+ } else { filter += (" && " + stageFilter); }
+ prettyPrint.append("
");
}
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += locIDFilter;
- } else { filter += (" && " + locIDFilter); }
- prettyPrint.append("
");
- }
- // end verbatimEventDate filters-----------------------------------------------
- // hasTissueSample filters-------------------------------------------------
- if (request.getParameter("hasTissueSample") != null) {
- prettyPrint.append("Has tissue sample.");
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "tissueSamples.contains(dce)";
- } else if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
- filter += (" && tissueSamples.contains(dce) ");
+ // end country filters
+ // Measurement filters-----------------------------------------------
+ List measurementDescs = Util.findMeasurementDescs("en", context);
+ String measurementPrefix = "measurement";
+ StringBuilder measurementFilter = new StringBuilder(); // "( collectedData.contains(measurement) && (");
+ boolean atLeastOneMeasurement = false;
+ int measurementsInQuery = 0;
+ for (MeasurementDesc measurementDesc : measurementDescs) {
+ String valueParamName = measurementPrefix + measurementDesc.getType() + "(value)";
+ String value = request.getParameter(valueParamName);
+ if (value != null) {
+ value = value.trim();
+ if (value.length() > 0) {
+ String operatorParamName = measurementPrefix + measurementDesc.getType() +
+ "(operator)";
+ String operatorParamValue = request.getParameter(operatorParamName);
+ if (operatorParamValue == null) {
+ operatorParamValue = "";
+ }
+ String operator = null;
+ if ("gt".equals(operatorParamValue)) {
+ operator = ">";
+ } else if ("lt".equals(operatorParamValue)) {
+ operator = "<";
+ } else if ("eq".equals(operatorParamValue)) {
+ operator = "==";
+ } else if ("gteq".equals(operatorParamValue)) {
+ operator = ">=";
+ } else if ("lteq".equals(operatorParamValue)) {
+ operator = "<=";
+ }
+ if (operator != null) {
+ prettyPrint.append(measurementDesc.getUnitsLabel());
+ prettyPrint.append(" is ");
+ prettyPrint.append(operator);
+ prettyPrint.append(value);
+ prettyPrint.append("
");
+ if (atLeastOneMeasurement) {
+ measurementFilter.append("&&");
+ }
+ String measurementVar = "measurement" + measurementsInQuery++;
+ measurementFilter.append("measurements.contains(" + measurementVar +
+ ") && ");
+ measurementFilter.append("(" + measurementVar + ".value " + operator +
+ " " + value + ")");
+ measurementFilter.append(" && (" + measurementVar + ".type == ");
+ measurementFilter.append("\"" + measurementDesc.getType() + "\")");
+ atLeastOneMeasurement = true;
+ }
+ }
+ }
}
- prettyPrint.append("
");
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.genetics.TissueSample dce";
- } else if (!jdoqlVariableDeclaration.contains(
- "org.ecocean.genetics.TissueSample dce")) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce";
- }
- }
- // end hasTissueSample filters-----------------------------------------------
- // TissueSample sampleID filters-------------------------------------------------
- if ((request.getParameter("tissueSampleID") != null) &&
- (!request.getParameter("tissueSampleID").trim().equals(""))) {
- prettyPrint.append("Has biological sample with ID: " +
- request.getParameter("tissueSampleID"));
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter +=
- "tissueSamples.contains(dce123) && (dce123.sampleID.toLowerCase().indexOf('" +
- request.getParameter("tissueSampleID").trim().toLowerCase() + "') != -1)";
- } else if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
- filter +=
- (
- " && tissueSamples.contains(dce123) && (dce123.sampleID.toLowerCase().indexOf('"
- + request.getParameter("tissueSampleID").trim().toLowerCase() + "') != -1) ");
- }
- prettyPrint.append("
");
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.genetics.TissueSample dce123";
- } else if (!jdoqlVariableDeclaration.contains(
- "org.ecocean.genetics.TissueSample dce123")) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce123";
- }
- }
- // end hasTissueSample filters-----------------------------------------------
- // hasPhoto filters-------------------------------------------------
- if (request.getParameter("hasPhoto") != null) {
- prettyPrint.append("Has at least one MediaAsset.");
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter +=
- "annotations.contains(dce15) && dce15.features.contains(feat15) && feat15.asset != null";
- } else if (filter.indexOf("annotations.contains(dce15)") == -1) {
- filter +=
- (
- " && annotations.contains(dce15) && dce15.features.contains(feat15) && feat15.asset != null");
- }
- prettyPrint.append("
");
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.Annotation dce15";
- } else if (!jdoqlVariableDeclaration.contains("org.ecocean.Annotation dce15")) {
- jdoqlVariableDeclaration += ";org.ecocean.Annotation dce15";
- }
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.media.Feature feat15";
- } else if (!jdoqlVariableDeclaration.contains("org.ecocean.media.Feature feat15")) {
- jdoqlVariableDeclaration += ";org.ecocean.media.Feature feat15";
+ if (atLeastOneMeasurement) {
+ if (jdoqlVariableDeclaration.length() > 0) {
+ jdoqlVariableDeclaration += ";";
+ } else {
+ jdoqlVariableDeclaration = " VARIABLES ";
+ }
+ for (int i = 0; i < measurementsInQuery; i++) {
+ if (i > 0) {
+ jdoqlVariableDeclaration += "; ";
+ }
+ jdoqlVariableDeclaration += " org.ecocean.Measurement measurement" + i;
+ }
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += measurementFilter.toString();
+ } else {
+ filter += (" && " + measurementFilter.toString());
+ }
}
- }
- // end hasPhoto filters-----------------------------------------------
- // hasSpots filters-------------------------------------------------
- if (request.getParameter("hasSpots") != null) {
- prettyPrint.append("Has patterning points.");
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "spots != null ";
- } else if (filter.indexOf("spots != null") == -1) { filter += (" && spots !=null "); }
- prettyPrint.append("
");
- }
- // end hasSpots filters-----------------------------------------------
- // has no Spots filters-------------------------------------------------
- if (request.getParameter("hasNoSpots") != null) {
- prettyPrint.append("Has no patterning points.");
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "spots == null ";
- } else if (filter.indexOf("spots == null") == -1) { filter += (" && spots == null "); }
- prettyPrint.append("
");
- }
- // end has no Spots filters-----------------------------------------------
- // filter for encounters of MarkedIndividuals that have been resighted------------------------------------------
- if ((request.getParameter("resightOnly") != null) &&
- (request.getParameter("numResights") != null)) {
- int numResights = 1;
-
- try {
- numResights = (new Integer(request.getParameter("numResights"))).intValue();
- prettyPrint.append("numResights for related Marked Individual is >= " +
- numResights + ".
");
- } catch (NumberFormatException nfe) { nfe.printStackTrace(); }
- String localFilter =
- "markedindy.encounters.contains(this) && markedindy.encounters.size() >= " +
- numResights + " ";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += localFilter;
- } else { filter += (" && " + localFilter); }
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration = " VARIABLES org.ecocean.MarkedIndividual markedindy";
- } else { jdoqlVariableDeclaration += ";org.ecocean.MarkedIndividual markedindy"; }
- }
- // end if resightOnly--------------------------------------------------------------------------------------
- // keyword filters-------------------------------------------------
-
- // shared var between keywords and labeledKeywords
- int nUnlabeledKeywords = 0;
-
- myShepherd.beginDBTransaction();
- String[] keywords = request.getParameterValues("keyword");
- String photoKeywordOperator = "&&";
- if ((request.getParameter("photoKeywordOperator") != null) &&
- (request.getParameter("photoKeywordOperator").equals("_OR_"))) {
- photoKeywordOperator = "||";
- }
- if ((keywords != null) && (!keywords[0].equals("None"))) {
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) { filter += "("; } else {
- filter += " && (";
+ // end measurement filters
+ // BiologicalMeasurement filters-----------------------------------------------
+ List bioMeasurementDescs = Util.findBiologicalMeasurementDescs("en",
+ context);
+ String bioMeasurementPrefix = "biomeasurement";
+ StringBuilder bioMeasurementFilter = new StringBuilder();
+ bioMeasurementFilter.append("tissueSamples.contains(dce322) ");
+ boolean bioAtLeastOneMeasurement = false;
+ int bioMeasurementsInQuery = 0;
+ for (MeasurementDesc measurementDesc : bioMeasurementDescs) {
+ String valueParamName = bioMeasurementPrefix + measurementDesc.getType() +
+ "(value)";
+ String value = request.getParameter(valueParamName);
+ if (value != null) {
+ value = value.trim();
+ if (value.length() > 0) {
+ String operatorParamName = bioMeasurementPrefix +
+ measurementDesc.getType() + "(operator)";
+ String operatorParamValue = request.getParameter(operatorParamName);
+ if (operatorParamValue == null) {
+ operatorParamValue = "";
+ }
+ String operator = null;
+ if ("gt".equals(operatorParamValue)) {
+ operator = ">";
+ } else if ("lt".equals(operatorParamValue)) {
+ operator = "<";
+ } else if ("eq".equals(operatorParamValue)) {
+ operator = "==";
+ } else if ("gteq".equals(operatorParamValue)) {
+ operator = ">=";
+ } else if ("lteq".equals(operatorParamValue)) {
+ operator = "<=";
+ }
+ if (operator != null) {
+ prettyPrint.append("Biological/chemical measurement " +
+ measurementDesc.getType());
+ prettyPrint.append(" is ");
+ prettyPrint.append(operator);
+ prettyPrint.append(value);
+ prettyPrint.append("
");
+ if (bioAtLeastOneMeasurement) {
+ bioMeasurementFilter.append("&&");
+ }
+ String measurementVar = "biomeasurement" + bioMeasurementsInQuery++;
+ bioMeasurementFilter.append(" & dce322.analyses.contains(" +
+ measurementVar + ") ");
+ bioMeasurementFilter.append(" && ( " + measurementVar + ".value " +
+ operator + " " + value + " )");
+ bioMeasurementFilter.append(" && ( " + measurementVar +
+ ".measurementType == ");
+ bioMeasurementFilter.append("\"" + measurementDesc.getType() + "\" )");
+ bioAtLeastOneMeasurement = true;
+ }
+ }
+ }
}
- if ((request.getParameter("photoKeywordOperator") != null) &&
- (request.getParameter("photoKeywordOperator").equals("_OR_"))) {
- prettyPrint.append("MediaAsset keyword is any one of the following: ");
- } else {
- prettyPrint.append("All of these MediaAsset keywords are applied: ");
+ if (bioAtLeastOneMeasurement) {
+ if (jdoqlVariableDeclaration.length() > 0) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce322;";
+ } else {
+ jdoqlVariableDeclaration =
+ " VARIABLES org.ecocean.genetics.TissueSample dce322;";
+ }
+ for (int i = 0; i < bioMeasurementsInQuery; i++) {
+ if (i > 0) {
+ jdoqlVariableDeclaration += "; ";
+ }
+ jdoqlVariableDeclaration +=
+ "org.ecocean.genetics.BiologicalMeasurement biomeasurement" + i;
+ }
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += bioMeasurementFilter.toString();
+ } else {
+ filter += (" && " + bioMeasurementFilter.toString());
+ }
}
- int kwLength = keywords.length;
- nUnlabeledKeywords += kwLength;
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ // end BiologicalMeasurement filters
+ // verbatimEventDate filters-------------------------------------------------
+ String[] verbatimEventDates = request.getParameterValues("verbatimEventDateField");
+ if ((verbatimEventDates != null) && (!verbatimEventDates[0].equals("None"))) {
+ prettyPrint.append("verbatimEventDateField is one of the following: ");
+ int kwLength = verbatimEventDates.length;
String locIDFilter = "(";
- String kwParam = keywords[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " word" + kwIter + ".indexname == \"" + kwParam + "\" ";
- } else {
- locIDFilter += " " + photoKeywordOperator + " word" + kwIter +
- ".indexname == \"" + kwParam + "\" ";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = verbatimEventDates[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " verbatimEventDate == \"" + kwParam + "\"";
+ } else {
+ locIDFilter += " || verbatimEventDate == \"" + kwParam + "\"";
+ }
+ prettyPrint.append(kwParam + " ");
}
- Keyword kw = myShepherd.getKeyword(kwParam.trim());
- prettyPrint.append("\"" + kw.getReadableName() + "\" ");
}
locIDFilter += " )";
- if (filter.indexOf("annotations.contains(photo" + kwIter + ")") == -1) {
- if (kwIter > 0) { filter += " " + photoKeywordOperator + " "; }
- filter += " ( annotations.contains(photo" + kwIter + ")";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += locIDFilter;
+ } else { filter += (" && " + locIDFilter); }
+ prettyPrint.append("
");
+ }
+ // end verbatimEventDate filters-----------------------------------------------
+ // hasTissueSample filters-------------------------------------------------
+ if (request.getParameter("hasTissueSample") != null) {
+ prettyPrint.append("Has tissue sample.");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "tissueSamples.contains(dce)";
+ } else if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
+ filter += (" && tissueSamples.contains(dce) ");
}
- if (filter.indexOf("photo" + kwIter + ".features.contains(feat" + kwIter + ")") ==
- -1) {
- filter += " && photo" + kwIter + ".features.contains(feat" + kwIter + ")";
+ prettyPrint.append("
");
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration = " VARIABLES org.ecocean.genetics.TissueSample dce";
+ } else if (!jdoqlVariableDeclaration.contains(
+ "org.ecocean.genetics.TissueSample dce")) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce";
}
- if (filter.indexOf("feat" + kwIter + ".asset.keywords.contains(word" + kwIter +
- ")") == -1) {
- filter += " && feat" + kwIter + ".asset.keywords.contains(word" + kwIter + ")";
+ }
+ // end hasTissueSample filters-----------------------------------------------
+ // TissueSample sampleID filters-------------------------------------------------
+ if ((request.getParameter("tissueSampleID") != null) &&
+ (!request.getParameter("tissueSampleID").trim().equals(""))) {
+ prettyPrint.append("Has biological sample with ID: " +
+ request.getParameter("tissueSampleID"));
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter +=
+ "tissueSamples.contains(dce123) && (dce123.sampleID.toLowerCase().indexOf('"
+ + request.getParameter("tissueSampleID").trim().toLowerCase() + "') != -1)";
+ } else if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
+ filter +=
+ (
+ " && tissueSamples.contains(dce123) && (dce123.sampleID.toLowerCase().indexOf('"
+ + request.getParameter("tissueSampleID").trim().toLowerCase() +
+ "') != -1) ");
}
- filter += (" && " + locIDFilter + ")");
- if ((kwIter == 0) && (jdoqlVariableDeclaration.equals(""))) {
- jdoqlVariableDeclaration = " VARIABLES ";
+ prettyPrint.append("
");
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration =
+ " VARIABLES org.ecocean.genetics.TissueSample dce123";
+ } else if (!jdoqlVariableDeclaration.contains(
+ "org.ecocean.genetics.TissueSample dce123")) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce123";
}
- if (kwIter > 0) { jdoqlVariableDeclaration += ";"; }
- if (!jdoqlVariableDeclaration.contains("org.ecocean.Annotation photo" + kwIter)) {
- jdoqlVariableDeclaration += "org.ecocean.Annotation photo" + kwIter;
+ }
+ // end hasTissueSample filters-----------------------------------------------
+ // hasPhoto filters-------------------------------------------------
+ if (request.getParameter("hasPhoto") != null) {
+ prettyPrint.append("Has at least one MediaAsset.");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter +=
+ "annotations.contains(dce15) && dce15.features.contains(feat15) && feat15.asset != null";
+ } else if (filter.indexOf("annotations.contains(dce15)") == -1) {
+ filter +=
+ (
+ " && annotations.contains(dce15) && dce15.features.contains(feat15) && feat15.asset != null");
}
- if (!jdoqlVariableDeclaration.contains("org.ecocean.Keyword word" + kwIter)) {
- jdoqlVariableDeclaration += ";org.ecocean.Keyword word" + kwIter;
+ prettyPrint.append("
");
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration = " VARIABLES org.ecocean.Annotation dce15";
+ } else if (!jdoqlVariableDeclaration.contains("org.ecocean.Annotation dce15")) {
+ jdoqlVariableDeclaration += ";org.ecocean.Annotation dce15";
}
- if (!jdoqlVariableDeclaration.contains("org.ecocean.media.Feature feat" + kwIter)) {
- jdoqlVariableDeclaration += ";org.ecocean.media.Feature feat" + kwIter;
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration = " VARIABLES org.ecocean.media.Feature feat15";
+ } else if (!jdoqlVariableDeclaration.contains("org.ecocean.media.Feature feat15")) {
+ jdoqlVariableDeclaration += ";org.ecocean.media.Feature feat15";
+ }
+ }
+ // end hasPhoto filters-----------------------------------------------
+ // hasSpots filters-------------------------------------------------
+ if (request.getParameter("hasSpots") != null) {
+ prettyPrint.append("Has patterning points.");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "spots != null ";
+ } else if (filter.indexOf("spots != null") == -1) {
+ filter += (" && spots !=null ");
+ }
+ prettyPrint.append("
");
+ }
+ // end hasSpots filters-----------------------------------------------
+ // has no Spots filters-------------------------------------------------
+ if (request.getParameter("hasNoSpots") != null) {
+ prettyPrint.append("Has no patterning points.");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "spots == null ";
+ } else if (filter.indexOf("spots == null") == -1) {
+ filter += (" && spots == null ");
}
+ prettyPrint.append("
");
}
- filter += " ) ";
+ // end has no Spots filters-----------------------------------------------
+ // filter for encounters of MarkedIndividuals that have been resighted------------------------------------------
+ if ((request.getParameter("resightOnly") != null) &&
+ (request.getParameter("numResights") != null)) {
+ int numResights = 1;
- prettyPrint.append("
");
- }
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
+ try {
+ numResights = (new Integer(request.getParameter("numResights"))).intValue();
+ prettyPrint.append("numResights for related Marked Individual is >= " +
+ numResights + ".
");
+ } catch (NumberFormatException nfe) { nfe.printStackTrace(); }
+ String localFilter =
+ "markedindy.encounters.contains(this) && markedindy.encounters.size() >= " +
+ numResights + " ";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += localFilter;
+ } else { filter += (" && " + localFilter); }
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration = " VARIABLES org.ecocean.MarkedIndividual markedindy";
+ } else { jdoqlVariableDeclaration += ";org.ecocean.MarkedIndividual markedindy"; }
+ }
+ // end if resightOnly--------------------------------------------------------------------------------------
+ // keyword filters-------------------------------------------------
- // end photo keyword filters-----------------------------------------------
- // labeled keyword filters-------------------------------------------------
- List labels = ServletUtilities.getIndexedParameters("label", request);
- System.out.println("LKW filter got labels " + labels);
- int index = 0;
- boolean multipleLabels = labels.size() > 1;
- String lkwFilter = "(";
- for (int labelN = 0; labelN < labels.size(); labelN++) {
- int kwNum = labelN + nUnlabeledKeywords;
- int annotNum = nUnlabeledKeywords; // this way all labeledKeyword queries apply to the same annotation
- String label = labels.get(labelN);
- if (labelN == 0) {
- prettyPrint.append("Encounter has a photo with the LabeledKeyword label \"" +
- label + "\"");
- } else {
- prettyPrint.append(",
\t AND that photo has LabeledKeyword label \"" + label +
- "\"");
- lkwFilter += " && ";
+ // shared var between keywords and labeledKeywords
+ int nUnlabeledKeywords = 0;
+ String[] keywords = request.getParameterValues("keyword");
+ String photoKeywordOperator = "&&";
+ if ((request.getParameter("photoKeywordOperator") != null) &&
+ (request.getParameter("photoKeywordOperator").equals("_OR_"))) {
+ photoKeywordOperator = "||";
}
- // ------ start variables and declarations for this LKW
- String annotVar = "photo" + annotNum;
- // we only add the annotation the first time, so all subsequent keywords still apply to that first annotation
- // bc if we search for "fluke photo, of quality 3-5" we are talking about one photo with two keywords, not two photos
- if (labelN == 0) {
- lkwFilter += "annotations.contains(" + annotVar + ")";
- jdoqlVariableDeclaration = QueryProcessor.updateJdoqlVariableDeclaration(
- jdoqlVariableDeclaration, "org.ecocean.Annotation " + annotVar);
+ if ((keywords != null) && (!keywords[0].equals("None"))) {
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "(";
+ } else {
+ filter += " && (";
+ }
+ if ((request.getParameter("photoKeywordOperator") != null) &&
+ (request.getParameter("photoKeywordOperator").equals("_OR_"))) {
+ prettyPrint.append("MediaAsset keyword is any one of the following: ");
+ } else {
+ prettyPrint.append("All of these MediaAsset keywords are applied: ");
+ }
+ int kwLength = keywords.length;
+ nUnlabeledKeywords += kwLength;
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String locIDFilter = "(";
+ String kwParam = keywords[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " word" + kwIter + ".indexname == \"" + kwParam + "\" ";
+ } else {
+ locIDFilter += " " + photoKeywordOperator + " word" + kwIter +
+ ".indexname == \"" + kwParam + "\" ";
+ }
+ Keyword kw = myShepherd.getKeyword(kwParam.trim());
+ prettyPrint.append("\"" + kw.getReadableName() + "\" ");
+ }
+ locIDFilter += " )";
+ if (filter.indexOf("annotations.contains(photo" + kwIter + ")") == -1) {
+ if (kwIter > 0) { filter += " " + photoKeywordOperator + " "; }
+ filter += " ( annotations.contains(photo" + kwIter + ")";
+ }
+ if (filter.indexOf("photo" + kwIter + ".features.contains(feat" + kwIter +
+ ")") == -1) {
+ filter += " && photo" + kwIter + ".features.contains(feat" + kwIter + ")";
+ }
+ if (filter.indexOf("feat" + kwIter + ".asset.keywords.contains(word" + kwIter +
+ ")") == -1) {
+ filter += " && feat" + kwIter + ".asset.keywords.contains(word" + kwIter +
+ ")";
+ }
+ filter += (" && " + locIDFilter + ")");
+ if ((kwIter == 0) && (jdoqlVariableDeclaration.equals(""))) {
+ jdoqlVariableDeclaration = " VARIABLES ";
+ }
+ if (kwIter > 0) { jdoqlVariableDeclaration += ";"; }
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.Annotation photo" +
+ kwIter)) {
+ jdoqlVariableDeclaration += "org.ecocean.Annotation photo" + kwIter;
+ }
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.Keyword word" + kwIter)) {
+ jdoqlVariableDeclaration += ";org.ecocean.Keyword word" + kwIter;
+ }
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.media.Feature feat" +
+ kwIter)) {
+ jdoqlVariableDeclaration += ";org.ecocean.media.Feature feat" + kwIter;
+ }
+ }
+ filter += " ) ";
+
+ prettyPrint.append("
");
}
- // only one feature per annotation, so only one feature for all keywords
- String featVar = "feat" + annotNum;
- if (labelN == 0) {
- lkwFilter += " && ";
- lkwFilter += annotVar + ".features.contains(" + featVar + ")";
+ // myShepherd.rollbackDBTransaction();
+ // myShepherd.closeDBTransaction();
+
+ // end photo keyword filters-----------------------------------------------
+ // labeled keyword filters-------------------------------------------------
+ List labels = ServletUtilities.getIndexedParameters("label", request);
+ System.out.println("LKW filter got labels " + labels);
+ int index = 0;
+ boolean multipleLabels = labels.size() > 1;
+ String lkwFilter = "(";
+ for (int labelN = 0; labelN < labels.size(); labelN++) {
+ int kwNum = labelN + nUnlabeledKeywords;
+ int annotNum = nUnlabeledKeywords; // this way all labeledKeyword queries apply to the same annotation
+ String label = labels.get(labelN);
+ if (labelN == 0) {
+ prettyPrint.append("Encounter has a photo with the LabeledKeyword label \"" +
+ label + "\"");
+ } else {
+ prettyPrint.append(",
\t AND that photo has LabeledKeyword label \"" +
+ label + "\"");
+ lkwFilter += " && ";
+ }
+ // ------ start variables and declarations for this LKW
+ String annotVar = "photo" + annotNum;
+ // we only add the annotation the first time, so all subsequent keywords still apply to that first annotation
+ // bc if we search for "fluke photo, of quality 3-5" we are talking about one photo with two keywords, not two photos
+ if (labelN == 0) {
+ lkwFilter += "annotations.contains(" + annotVar + ")";
+ jdoqlVariableDeclaration = QueryProcessor.updateJdoqlVariableDeclaration(
+ jdoqlVariableDeclaration, "org.ecocean.Annotation " + annotVar);
+ }
+ // only one feature per annotation, so only one feature for all keywords
+ String featVar = "feat" + annotNum;
+ if (labelN == 0) {
+ lkwFilter += " && ";
+ lkwFilter += annotVar + ".features.contains(" + featVar + ")";
+ jdoqlVariableDeclaration = QueryProcessor.updateJdoqlVariableDeclaration(
+ jdoqlVariableDeclaration, "org.ecocean.media.Feature " + featVar);
+ }
+ String wordVar = "word" + kwNum;
+ if (labelN == 0) lkwFilter += " && ";
+ lkwFilter += featVar + ".asset.keywords.contains(" + wordVar + ")";
jdoqlVariableDeclaration = QueryProcessor.updateJdoqlVariableDeclaration(
- jdoqlVariableDeclaration, "org.ecocean.media.Feature " + featVar);
- }
- String wordVar = "word" + kwNum;
- if (labelN == 0) lkwFilter += " && ";
- lkwFilter += featVar + ".asset.keywords.contains(" + wordVar + ")";
- jdoqlVariableDeclaration = QueryProcessor.updateJdoqlVariableDeclaration(
- jdoqlVariableDeclaration, "org.ecocean.LabeledKeyword " + wordVar);
- // ------ done with variables and declarations for this LKW
+ jdoqlVariableDeclaration, "org.ecocean.LabeledKeyword " + wordVar);
+ // ------ done with variables and declarations for this LKW
- lkwFilter += " && " + wordVar + ".label == " + Util.quote(label);
- // the filter is now done if we don't have any values defined --- so we're querying for an enc with this label on a keyword.
+ lkwFilter += " && " + wordVar + ".label == " + Util.quote(label);
+ // the filter is now done if we don't have any values defined --- so we're querying for an enc with this label on a keyword.
- String valueKey = "label" + labelN + ".values";
- String[] values = request.getParameterValues(valueKey);
- if (values != null) {
- System.out.println("EQP got valueKey " + valueKey + " and values " +
- String.join(", ", values));
- String valueFilter = "(";
- for (int valueN = 0; valueN < values.length; valueN++) {
- if (valueN > 0) valueFilter += " || ";
- valueFilter += wordVar + ".readableName == " + Util.quote(values[valueN]);
- }
- valueFilter += ")";
- if (!valueFilter.equals("()")) lkwFilter += " && " + valueFilter;
- if (values.length == 1) {
- prettyPrint.append(" with value \"" + values[0] + "\"");
- } else if (values.length > 1) {
- String allVals = String.join("\", OR \"", values);
- allVals = "\"" + allVals + "\"";
- prettyPrint.append(" with value (" + allVals + ")");
- }
- } else {
- System.out.println("EQP got null values for valueKey " + valueKey);
+ String valueKey = "label" + labelN + ".values";
+ String[] values = request.getParameterValues(valueKey);
+ if (values != null) {
+ System.out.println("EQP got valueKey " + valueKey + " and values " +
+ String.join(", ", values));
+ String valueFilter = "(";
+ for (int valueN = 0; valueN < values.length; valueN++) {
+ if (valueN > 0) valueFilter += " || ";
+ valueFilter += wordVar + ".readableName == " + Util.quote(values[valueN]);
+ }
+ valueFilter += ")";
+ if (!valueFilter.equals("()")) lkwFilter += " && " + valueFilter;
+ if (values.length == 1) {
+ prettyPrint.append(" with value \"" + values[0] + "\"");
+ } else if (values.length > 1) {
+ String allVals = String.join("\", OR \"", values);
+ allVals = "\"" + allVals + "\"";
+ prettyPrint.append(" with value (" + allVals + ")");
+ }
+ } else {
+ System.out.println("EQP got null values for valueKey " + valueKey);
+ }
}
- }
- lkwFilter += ")";
+ lkwFilter += ")";
- System.out.println("EQP got lkwFilter " + lkwFilter);
- if (!lkwFilter.equals("()")) {
- filter = filterWithCondition(filter, lkwFilter);
- prettyPrint.append("
");
- }
- // end labeled keyword filters
- // ms markers filters-------------------------------------------------
- myShepherd.beginDBTransaction();
- List markers = myShepherd.getAllLoci();
- int numMarkers = markers.size();
- String theseMarkers = "";
- boolean hasMarkers = false;
- for (int h = 0; h < numMarkers; h++) {
- String marker = markers.get(h);
- if (request.getParameter(marker) != null) {
- hasMarkers = true;
- String locIDFilter = "(";
- locIDFilter += " " + marker.replaceAll("-", "") + ".name == \"" + marker + "\" ";
- locIDFilter += " )";
+ System.out.println("EQP got lkwFilter " + lkwFilter);
+ if (!lkwFilter.equals("()")) {
+ filter = filterWithCondition(filter, lkwFilter);
+ prettyPrint.append("
");
+ }
+ // end labeled keyword filters
+ // ms markers filters-------------------------------------------------
+ // myShepherd.beginDBTransaction();
+ List markers = myShepherd.getAllLoci();
+ int numMarkers = markers.size();
+ String theseMarkers = "";
+ boolean hasMarkers = false;
+ for (int h = 0; h < numMarkers; h++) {
+ String marker = markers.get(h);
+ if (request.getParameter(marker) != null) {
+ hasMarkers = true;
+ String locIDFilter = "(";
+ locIDFilter += " " + marker.replaceAll("-",
+ "") + ".name == \"" + marker + "\" ";
+ locIDFilter += " )";
- int alleleNum = 0;
- boolean hasMoreAlleles = true;
- while (hasMoreAlleles) {
- if (request.getParameter((marker + "_alleleValue" + alleleNum)) != null) {
- try {
- Integer thisInt = new Integer(request.getParameter((marker +
- "_alleleValue" + alleleNum)));
- Integer relaxValue = new Integer(request.getParameter(
- "alleleRelaxValue"));
- Integer upperValue = thisInt + relaxValue;
- Integer lowerValue = thisInt - relaxValue;
- locIDFilter += (" && (" + marker.replaceAll("-",
- "") + ".allele" + alleleNum + " >= " + lowerValue + ")" + " && (" +
- marker.replaceAll("-",
- "") + ".allele" + alleleNum + " <= " + upperValue + ")");
- } catch (Exception e) {
+ int alleleNum = 0;
+ boolean hasMoreAlleles = true;
+ while (hasMoreAlleles) {
+ if (request.getParameter((marker + "_alleleValue" + alleleNum)) != null) {
+ try {
+ Integer thisInt = new Integer(request.getParameter((marker +
+ "_alleleValue" + alleleNum)));
+ Integer relaxValue = new Integer(request.getParameter(
+ "alleleRelaxValue"));
+ Integer upperValue = thisInt + relaxValue;
+ Integer lowerValue = thisInt - relaxValue;
+ locIDFilter += (" && (" + marker.replaceAll("-",
+ "") + ".allele" + alleleNum + " >= " + lowerValue + ")" +
+ " && (" + marker.replaceAll("-",
+ "") + ".allele" + alleleNum + " <= " + upperValue + ")");
+ } catch (Exception e) {
+ hasMoreAlleles = false;
+ }
+ } else {
hasMoreAlleles = false;
}
+ alleleNum++;
+ }
+ theseMarkers += (marker + " ");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter +=
+ "tissueSamples.contains(dce) && dce.analyses.contains(msanalysis) && msanalysis.loci.contains("
+ + marker.replaceAll("-", "") + ") && " + locIDFilter;
} else {
- hasMoreAlleles = false;
+ if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
+ filter += " && tissueSamples.contains(dce)";
+ }
+ if (filter.indexOf("dce.analyses.contains(msanalysis)") == -1) {
+ filter += " && dce.analyses.contains(msanalysis)";
+ }
+ if (filter.indexOf("msanalysis.loci.contains(" + marker.replaceAll("-",
+ "") + ")") == -1) {
+ filter += " && msanalysis.loci.contains(" + marker.replaceAll("-",
+ "") + ")";
+ }
+ filter += (" && " + locIDFilter);
+ }
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration =
+ " VARIABLES org.ecocean.genetics.TissueSample dce;org.ecocean.genetics.MicrosatelliteMarkersAnalysis msanalysis;org.ecocean.genetics.Locus "
+ + marker.replaceAll("-", "");
+ } else {
+ if (!jdoqlVariableDeclaration.contains(
+ "org.ecocean.genetics.TissueSample dce")) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce";
+ }
+ if (!jdoqlVariableDeclaration.contains(
+ "org.ecocean.genetics.MicrosatelliteMarkersAnalysis msanalysis")) {
+ jdoqlVariableDeclaration +=
+ ";org.ecocean.genetics.MicrosatelliteMarkersAnalysis msanalysis";
+ }
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.genetics.Locus " +
+ marker.replaceAll("-", ""))) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.Locus " +
+ marker.replaceAll("-", "");
+ }
}
- alleleNum++;
}
- theseMarkers += (marker + " ");
+ }
+ if (hasMarkers) {
+ prettyPrint.append("Microsatellite marker is one of the following: ");
+ theseMarkers += "
";
+ prettyPrint.append(theseMarkers);
+ }
+ // myShepherd.rollbackDBTransaction();
+ // myShepherd.closeDBTransaction();
+ // end ms markers filters-----------------------------------------------
+ // filter for alternate ID------------------------------------------
+ if ((request.getParameter("alternateIDField") != null) &&
+ (!request.getParameter("alternateIDField").equals(""))) {
+ String altID = request.getParameter("alternateIDField").replaceAll("%20",
+ " ").trim().toLowerCase();
if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter +=
- "tissueSamples.contains(dce) && dce.analyses.contains(msanalysis) && msanalysis.loci.contains("
- + marker.replaceAll("-", "") + ") && " + locIDFilter;
+ filter += "otherCatalogNumbers.toLowerCase().indexOf('" + altID + "') != -1";
+ } else {
+ filter += " && otherCatalogNumbers.toLowerCase().indexOf('" + altID +
+ "') != -1";
+ }
+ prettyPrint.append("alternateID field contains \"" + altID + "\".
");
+ }
+ // haplotype filters-------------------------------------------------
+ String[] haplotypes = request.getParameterValues("haplotypeField");
+ if ((haplotypes != null) && (!haplotypes[0].equals("None"))) {
+ prettyPrint.append("Haplotype is one of the following: ");
+ int kwLength = haplotypes.length;
+ String locIDFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = haplotypes[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " analysis.haplotype == \"" + kwParam + "\" ";
+ } else {
+ locIDFilter += " || analysis.haplotype == \"" + kwParam + "\" ";
+ }
+ prettyPrint.append(kwParam + " ");
+ }
+ }
+ locIDFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "tissueSamples.contains(dce) && dce.analyses.contains(analysis) && " +
+ locIDFilter;
} else {
if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
filter += " && tissueSamples.contains(dce)";
}
- if (filter.indexOf("dce.analyses.contains(msanalysis)") == -1) {
- filter += " && dce.analyses.contains(msanalysis)";
- }
- if (filter.indexOf("msanalysis.loci.contains(" + marker.replaceAll("-",
- "") + ")") == -1) {
- filter += " && msanalysis.loci.contains(" + marker.replaceAll("-",
- "") + ")";
+ if (filter.indexOf("dce.analyses.contains(analysis)") == -1) {
+ filter += " && dce.analyses.contains(analysis)";
}
filter += (" && " + locIDFilter);
}
+ prettyPrint.append("
");
if (jdoqlVariableDeclaration.equals("")) {
jdoqlVariableDeclaration =
- " VARIABLES org.ecocean.genetics.TissueSample dce;org.ecocean.genetics.MicrosatelliteMarkersAnalysis msanalysis;org.ecocean.genetics.Locus "
- + marker.replaceAll("-", "");
+ " VARIABLES org.ecocean.genetics.TissueSample dce;org.ecocean.genetics.MitochondrialDNAAnalysis analysis";
} else {
if (!jdoqlVariableDeclaration.contains(
"org.ecocean.genetics.TissueSample dce")) {
jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce";
}
if (!jdoqlVariableDeclaration.contains(
- "org.ecocean.genetics.MicrosatelliteMarkersAnalysis msanalysis")) {
+ "org.ecocean.genetics.MitochondrialDNAAnalysis analysis")) {
jdoqlVariableDeclaration +=
- ";org.ecocean.genetics.MicrosatelliteMarkersAnalysis msanalysis";
- }
- if (!jdoqlVariableDeclaration.contains("org.ecocean.genetics.Locus " +
- marker.replaceAll("-", ""))) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.Locus " +
- marker.replaceAll("-", "");
+ ";org.ecocean.genetics.MitochondrialDNAAnalysis analysis";
}
}
}
- }
- if (hasMarkers) {
- prettyPrint.append("Microsatellite marker is one of the following: ");
- theseMarkers += "
";
- prettyPrint.append(theseMarkers);
- }
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
- // end ms markers filters-----------------------------------------------
- // filter for alternate ID------------------------------------------
- if ((request.getParameter("alternateIDField") != null) &&
- (!request.getParameter("alternateIDField").equals(""))) {
- String altID = request.getParameter("alternateIDField").replaceAll("%20",
- " ").trim().toLowerCase();
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "otherCatalogNumbers.toLowerCase().indexOf('" + altID + "') != -1";
- } else {
- filter += " && otherCatalogNumbers.toLowerCase().indexOf('" + altID + "') != -1";
- }
- prettyPrint.append("alternateID field contains \"" + altID + "\".
");
- }
- // haplotype filters-------------------------------------------------
- String[] haplotypes = request.getParameterValues("haplotypeField");
- if ((haplotypes != null) && (!haplotypes[0].equals("None"))) {
- prettyPrint.append("Haplotype is one of the following: ");
- int kwLength = haplotypes.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = haplotypes[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " analysis.haplotype == \"" + kwParam + "\" ";
- } else {
- locIDFilter += " || analysis.haplotype == \"" + kwParam + "\" ";
+ // end haplotype filters-----------------------------------------------
+ // genetic sex filters-------------------------------------------------
+ String[] genSexes = request.getParameterValues("geneticSexField");
+ if ((genSexes != null) && (!genSexes[0].equals("None"))) {
+ prettyPrint.append("Genetic determination of sex is one of the following: ");
+ int kwLength = genSexes.length;
+ String locIDFilter = "(";
+ for (int kwIter = 0; kwIter < kwLength; kwIter++) {
+ String kwParam = genSexes[kwIter].replaceAll("%20", " ").trim();
+ if (!kwParam.equals("")) {
+ if (locIDFilter.equals("(")) {
+ locIDFilter += " sexanalysis.sex == \"" + kwParam + "\" ";
+ } else {
+ locIDFilter += " || sexanalysis.sex == \"" + kwParam + "\" ";
+ }
+ prettyPrint.append(kwParam + " ");
}
- prettyPrint.append(kwParam + " ");
- }
- }
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "tissueSamples.contains(dce) && dce.analyses.contains(analysis) && " +
- locIDFilter;
- } else {
- if (filter.indexOf("tissueSamples.contains(dce)") == -1) {
- filter += " && tissueSamples.contains(dce)";
- }
- if (filter.indexOf("dce.analyses.contains(analysis)") == -1) {
- filter += " && dce.analyses.contains(analysis)";
- }
- filter += (" && " + locIDFilter);
- }
- prettyPrint.append("
");
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration =
- " VARIABLES org.ecocean.genetics.TissueSample dce;org.ecocean.genetics.MitochondrialDNAAnalysis analysis";
- } else {
- if (!jdoqlVariableDeclaration.contains("org.ecocean.genetics.TissueSample dce")) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce";
}
- if (!jdoqlVariableDeclaration.contains(
- "org.ecocean.genetics.MitochondrialDNAAnalysis analysis")) {
- jdoqlVariableDeclaration +=
- ";org.ecocean.genetics.MitochondrialDNAAnalysis analysis";
- }
- }
- }
- // end haplotype filters-----------------------------------------------
- // genetic sex filters-------------------------------------------------
- String[] genSexes = request.getParameterValues("geneticSexField");
- if ((genSexes != null) && (!genSexes[0].equals("None"))) {
- prettyPrint.append("Genetic determination of sex is one of the following: ");
- int kwLength = genSexes.length;
- String locIDFilter = "(";
- for (int kwIter = 0; kwIter < kwLength; kwIter++) {
- String kwParam = genSexes[kwIter].replaceAll("%20", " ").trim();
- if (!kwParam.equals("")) {
- if (locIDFilter.equals("(")) {
- locIDFilter += " sexanalysis.sex == \"" + kwParam + "\" ";
- } else {
- locIDFilter += " || sexanalysis.sex == \"" + kwParam + "\" ";
+ locIDFilter += " )";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter +=
+ "tissueSamples.contains(dce9) && dce9.analyses.contains(sexanalysis) && " +
+ locIDFilter;
+ } else {
+ if (filter.indexOf("tissueSamples.contains(dce9)") == -1) {
+ filter += " && tissueSamples.contains(dce9)";
}
- prettyPrint.append(kwParam + " ");
- }
- }
- locIDFilter += " )";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter +=
- "tissueSamples.contains(dce9) && dce9.analyses.contains(sexanalysis) && " +
- locIDFilter;
- } else {
- if (filter.indexOf("tissueSamples.contains(dce9)") == -1) {
- filter += " && tissueSamples.contains(dce9)";
- }
- if (filter.indexOf("dce9.analyses.contains(sexanalysis)") == -1) {
- filter += " && dce9.analyses.contains(sexanalysis)";
+ if (filter.indexOf("dce9.analyses.contains(sexanalysis)") == -1) {
+ filter += " && dce9.analyses.contains(sexanalysis)";
+ }
+ filter += (" && " + locIDFilter);
}
- filter += (" && " + locIDFilter);
- }
- prettyPrint.append("
");
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration =
- " VARIABLES org.ecocean.genetics.TissueSample dce9;org.ecocean.genetics.SexAnalysis sexanalysis";
- } else {
- if (!jdoqlVariableDeclaration.contains("org.ecocean.genetics.TissueSample dce9")) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce9";
- }
- if (!jdoqlVariableDeclaration.contains(
- "org.ecocean.genetics.SexAnalysis sexanalysis")) {
- jdoqlVariableDeclaration += ";org.ecocean.genetics.SexAnalysis sexanalysis";
+ prettyPrint.append("
");
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration =
+ " VARIABLES org.ecocean.genetics.TissueSample dce9;org.ecocean.genetics.SexAnalysis sexanalysis";
+ } else {
+ if (!jdoqlVariableDeclaration.contains(
+ "org.ecocean.genetics.TissueSample dce9")) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.TissueSample dce9";
+ }
+ if (!jdoqlVariableDeclaration.contains(
+ "org.ecocean.genetics.SexAnalysis sexanalysis")) {
+ jdoqlVariableDeclaration += ";org.ecocean.genetics.SexAnalysis sexanalysis";
+ }
}
}
- }
- // end genetic sex filters-----------------------------------------------
+ // end genetic sex filters-----------------------------------------------
// end photo filename filtering
- // filter for genus------------------------------------------
- if ((request.getParameter("genusField") != null) &&
- (!request.getParameter("genusField").equals(""))) {
- String genusSpecies = request.getParameter("genusField").replaceAll("%20", " ").trim();
- String genus = "";
- String specificEpithet = "";
+ // filter for genus------------------------------------------
+ if ((request.getParameter("genusField") != null) &&
+ (!request.getParameter("genusField").equals(""))) {
+ String genusSpecies = request.getParameter("genusField").replaceAll("%20",
+ " ").trim();
+ String genus = "";
+ String specificEpithet = "";
- // now we have to break apart genus species
- StringTokenizer tokenizer = new StringTokenizer(genusSpecies, " ");
- if (tokenizer.countTokens() == 2) {
- genus = tokenizer.nextToken();
- specificEpithet = tokenizer.nextToken();
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "genus == '" + genus + "' ";
- } else { filter += " && genus == '" + genus + "' "; }
- filter += " && specificEpithet == '" + specificEpithet + "' ";
+ // now we have to break apart genus species
+ StringTokenizer tokenizer = new StringTokenizer(genusSpecies, " ");
+ if (tokenizer.countTokens() == 2) {
+ genus = tokenizer.nextToken();
+ specificEpithet = tokenizer.nextToken();
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "genus == '" + genus + "' ";
+ } else { filter += " && genus == '" + genus + "' "; }
+ filter += " && specificEpithet == '" + specificEpithet + "' ";
- prettyPrint.append("genus and species are \"" + genusSpecies + "\".
");
- }
- }
- // filter for identificationRemarks------------------------------------------
- if ((request.getParameter("identificationRemarksField") != null) &&
- (!request.getParameter("identificationRemarksField").equals(""))) {
- String idRemarks = request.getParameter("identificationRemarksField").trim();
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "identificationRemarks.startsWith('" + idRemarks + "')";
- } else { filter += " && identificationRemarks.startsWith('" + idRemarks + "')"; }
- prettyPrint.append("identificationRemarks starts with \"" + idRemarks + "\".
");
- }
- // end identification remarks filter
- // filter gpsOnly - return only Encounters with a defined location. This is mostly used for mapping JSP pages
- if (request.getAttribute("gpsOnly") != null) {
- filter = filterWithGpsBox("decimalLatitude", "decimalLongitude", filter, request);
- }
- // end filter gpsOnly
- // filter by alive/dead status------------------------------------------
- if ((request.getParameter("alive") != null) || (request.getParameter("dead") != null)) {
- if (request.getParameter("alive") == null) {
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "!livingStatus.startsWith('alive')";
- } else { filter += " && !livingStatus.startsWith('alive')"; }
- prettyPrint.append("Not alive.
");
+ prettyPrint.append("genus and species are \"" + genusSpecies + "\".
");
+ }
}
- if (request.getParameter("dead") == null) {
+ // filter for identificationRemarks------------------------------------------
+ if ((request.getParameter("identificationRemarksField") != null) &&
+ (!request.getParameter("identificationRemarksField").equals(""))) {
+ String idRemarks = request.getParameter("identificationRemarksField").trim();
if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "!livingStatus.startsWith('dead')";
- } else { filter += " && !livingStatus.startsWith('dead')"; }
- prettyPrint.append("Not dead.
");
- }
- }
- // filter by alive/dead status--------------------------------------------------------------------------------------
- // submitter or photographer name filter------------------------------------------
- if ((request.getParameter("nameField") != null) &&
- (!request.getParameter("nameField").equals(""))) {
- String nameString = request.getParameter("nameField").replaceAll("%20",
- " ").toLowerCase().trim();
- String filterString = "" + "(" +
- "(submitters.contains(submitter) && ((submitter.fullName.toLowerCase().indexOf('" +
- nameString + "') != -1)||(submitter.emailAddress.toLowerCase().indexOf('" +
- nameString + "') != -1))) || " +
- "(photographers.contains(photographer) && ((photographer.fullName.toLowerCase().indexOf('"
- + nameString + "') != -1)||(photographer.emailAddress.toLowerCase().indexOf('" +
- nameString + "') != -1))) " +
- "||(informOthers.contains(other) && ((other.fullName.toLowerCase().indexOf('" +
- nameString + "') != -1)||(other.emailAddress.toLowerCase().indexOf('" + nameString +
- "') != -1)))" + ")";
- if (jdoqlVariableDeclaration.equals("")) {
- jdoqlVariableDeclaration =
- " VARIABLES org.ecocean.User submitter;org.ecocean.User photographer;org.ecocean.User other";
- } else {
- if (!jdoqlVariableDeclaration.contains("org.ecocean.User submitter")) {
- jdoqlVariableDeclaration += ";org.ecocean.User submitter";
- }
- if (!jdoqlVariableDeclaration.contains("org.ecocean.User photographer")) {
- jdoqlVariableDeclaration += ";org.ecocean.User photographer";
- }
- if (!jdoqlVariableDeclaration.contains("org.ecocean.User other")) {
- jdoqlVariableDeclaration += ";org.ecocean.User other";
+ filter += "identificationRemarks.startsWith('" + idRemarks + "')";
+ } else { filter += " && identificationRemarks.startsWith('" + idRemarks + "')"; }
+ prettyPrint.append("identificationRemarks starts with \"" + idRemarks +
+ "\".
");
+ }
+ // end identification remarks filter
+ // filter gpsOnly - return only Encounters with a defined location. This is mostly used for mapping JSP pages
+ if (request.getAttribute("gpsOnly") != null) {
+ filter = filterWithGpsBox("decimalLatitude", "decimalLongitude", filter, request);
+ }
+ // end filter gpsOnly
+ // filter by alive/dead status------------------------------------------
+ if ((request.getParameter("alive") != null) || (request.getParameter("dead") != null)) {
+ if (request.getParameter("alive") == null) {
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "!livingStatus.startsWith('alive')";
+ } else { filter += " && !livingStatus.startsWith('alive')"; }
+ prettyPrint.append("Not alive.
");
+ }
+ if (request.getParameter("dead") == null) {
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "!livingStatus.startsWith('dead')";
+ } else { filter += " && !livingStatus.startsWith('dead')"; }
+ prettyPrint.append("Not dead.
");
}
}
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += filterString;
- } else { filter += (" && " + filterString); }
- prettyPrint.append("Related fullName or emailAddress contains: \"" + nameString +
- "\"
");
- }
- // end name and email filter--------------------------------------------------------------------------------------
- // additional comments filter------------------------------------------
- if ((request.getParameter("additionalCommentsField") != null) &&
- (!request.getParameter("additionalCommentsField").equals(""))) {
- String nameString = request.getParameter("additionalCommentsField").replaceAll("%20",
- " ").toLowerCase().trim();
- String filterString = "(occurrenceRemarks.toLowerCase().indexOf('" + nameString +
- "') != -1)";
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += filterString;
- } else { filter += (" && " + filterString); }
- prettyPrint.append("Remarks contains: \"" + nameString + "\"
");
- }
- // end additional comments filter--------------------------------------------------------------------------------------
- // start date filter----------------------------
- if ((request.getParameter("datepicker1") != null) &&
- (!request.getParameter("datepicker1").trim().equals("")) &&
- (request.getParameter("datepicker2") != null) &&
- (!request.getParameter("datepicker2").trim().equals(""))) {
- try {
- DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
- DateTime date1 = parser.parseDateTime(request.getParameter("datepicker1"));
- DateTime date2 = parser.parseDateTime(request.getParameter("datepicker2"));
- long date1Millis = date1.getMillis();
- long date2Millis = date2.getMillis();
- // if same dateTime is set by both pickers, then add a full day of milliseconds to picker2 to cover the entire day
- date2Millis += (24 * 60 * 60 * 1000 - 1);
-
- prettyPrint.append("Dates between: " + date1.toString(ISODateTimeFormat.date()) +
- " and " + date2.toString(ISODateTimeFormat.date()) + "
");
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "((dateInMilliseconds >= " + date1Millis +
- ") && (dateInMilliseconds <= " + date2Millis + "))";
+ // filter by alive/dead status--------------------------------------------------------------------------------------
+ // submitter or photographer name filter------------------------------------------
+ if ((request.getParameter("nameField") != null) &&
+ (!request.getParameter("nameField").equals(""))) {
+ String nameString = request.getParameter("nameField").replaceAll("%20",
+ " ").toLowerCase().trim();
+ String filterString = "" + "(" +
+ "(submitters.contains(submitter) && ((submitter.fullName.toLowerCase().indexOf('"
+ + nameString + "') != -1)||(submitter.emailAddress.toLowerCase().indexOf('" +
+ nameString + "') != -1))) || " +
+ "(photographers.contains(photographer) && ((photographer.fullName.toLowerCase().indexOf('"
+ + nameString + "') != -1)||(photographer.emailAddress.toLowerCase().indexOf('" +
+ nameString + "') != -1))) " +
+ "||(informOthers.contains(other) && ((other.fullName.toLowerCase().indexOf('" +
+ nameString + "') != -1)||(other.emailAddress.toLowerCase().indexOf('" +
+ nameString + "') != -1)))" + ")";
+ if (jdoqlVariableDeclaration.equals("")) {
+ jdoqlVariableDeclaration =
+ " VARIABLES org.ecocean.User submitter;org.ecocean.User photographer;org.ecocean.User other";
} else {
- filter += " && ((dateInMilliseconds >= " + date1Millis +
- ") && (dateInMilliseconds <= " + date2Millis + "))";
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.User submitter")) {
+ jdoqlVariableDeclaration += ";org.ecocean.User submitter";
+ }
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.User photographer")) {
+ jdoqlVariableDeclaration += ";org.ecocean.User photographer";
+ }
+ if (!jdoqlVariableDeclaration.contains("org.ecocean.User other")) {
+ jdoqlVariableDeclaration += ";org.ecocean.User other";
+ }
}
- } catch (Exception e) { e.printStackTrace(); }
- }
- // end date filter------------------------------------------
- // start date added filter----------------------------
- if ((request.getParameter("dateaddedpicker1") != null) &&
- (!request.getParameter("dateaddedpicker1").trim().equals("")) &&
- (request.getParameter("dateaddedpicker2") != null) &&
- (!request.getParameter("dateaddedpicker2").trim().equals(""))) {
- try {
- DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
- DateTime date1 = parser.parseDateTime(request.getParameter("dateaddedpicker1"));
- DateTime date2 = parser.parseDateTime(request.getParameter("dateaddedpicker2"));
-
- prettyPrint.append("Encounter creation dates between: " +
- date1.toString(ISODateTimeFormat.date()) + " and " +
- date2.toString(ISODateTimeFormat.date()) + "
");
if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += "((dwcDateAddedLong >= " + date1.getMillis() +
- ") && (dwcDateAddedLong <= " + date2.getMillis() + "))";
- } else {
- filter += " && ((dwcDateAddedLong >= " + date1.getMillis() +
- ") && (dwcDateAddedLong <= " + date2.getMillis() + "))";
+ filter += filterString;
+ } else { filter += (" && " + filterString); }
+ prettyPrint.append("Related fullName or emailAddress contains: \"" + nameString +
+ "\"
");
+ }
+ // end name and email filter--------------------------------------------------------------------------------------
+ // additional comments filter------------------------------------------
+ if ((request.getParameter("additionalCommentsField") != null) &&
+ (!request.getParameter("additionalCommentsField").equals(""))) {
+ String nameString = request.getParameter("additionalCommentsField").replaceAll(
+ "%20", " ").toLowerCase().trim();
+ String filterString = "(occurrenceRemarks.toLowerCase().indexOf('" + nameString +
+ "') != -1)";
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += filterString;
+ } else { filter += (" && " + filterString); }
+ prettyPrint.append("Remarks contains: \"" + nameString + "\"
");
+ }
+ // end additional comments filter--------------------------------------------------------------------------------------
+ // start date filter----------------------------
+ if ((request.getParameter("datepicker1") != null) &&
+ (!request.getParameter("datepicker1").trim().equals("")) &&
+ (request.getParameter("datepicker2") != null) &&
+ (!request.getParameter("datepicker2").trim().equals(""))) {
+ try {
+ DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
+ DateTime date1 = parser.parseDateTime(request.getParameter("datepicker1"));
+ DateTime date2 = parser.parseDateTime(request.getParameter("datepicker2"));
+ long date1Millis = date1.getMillis();
+ long date2Millis = date2.getMillis();
+ // if same dateTime is set by both pickers, then add a full day of milliseconds to picker2 to cover the entire day
+ date2Millis += (24 * 60 * 60 * 1000 - 1);
+
+ prettyPrint.append("Dates between: " +
+ date1.toString(ISODateTimeFormat.date()) + " and " +
+ date2.toString(ISODateTimeFormat.date()) + "
");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "((dateInMilliseconds >= " + date1Millis +
+ ") && (dateInMilliseconds <= " + date2Millis + "))";
+ } else {
+ filter += " && ((dateInMilliseconds >= " + date1Millis +
+ ") && (dateInMilliseconds <= " + date2Millis + "))";
+ }
+ } catch (Exception e) { e.printStackTrace(); }
+ }
+ // end date filter------------------------------------------
+ // start date added filter----------------------------
+ if ((request.getParameter("dateaddedpicker1") != null) &&
+ (!request.getParameter("dateaddedpicker1").trim().equals("")) &&
+ (request.getParameter("dateaddedpicker2") != null) &&
+ (!request.getParameter("dateaddedpicker2").trim().equals(""))) {
+ try {
+ DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
+ DateTime date1 = parser.parseDateTime(request.getParameter("dateaddedpicker1"));
+ DateTime date2 = parser.parseDateTime(request.getParameter("dateaddedpicker2"));
+
+ prettyPrint.append("Encounter creation dates between: " +
+ date1.toString(ISODateTimeFormat.date()) + " and " +
+ date2.toString(ISODateTimeFormat.date()) + "
");
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += "((dwcDateAddedLong >= " + date1.getMillis() +
+ ") && (dwcDateAddedLong <= " + date2.getMillis() + "))";
+ } else {
+ filter += " && ((dwcDateAddedLong >= " + date1.getMillis() +
+ ") && (dwcDateAddedLong <= " + date2.getMillis() + "))";
+ }
+ } catch (NumberFormatException nfe) {
+ // do nothing, just skip on
+ nfe.printStackTrace();
}
- } catch (NumberFormatException nfe) {
- // do nothing, just skip on
- nfe.printStackTrace();
- }
- }
- // end date added filter------------------------------------------
- // filter for sex------------------------------------------
- if ((request.getParameter("male") != null) || (request.getParameter("female") != null) ||
- (request.getParameter("unknown") != null)) {
- System.out.println("Filter at beginning of sex filtering: " + filter);
- if (request.getParameter("male") == null) {
- filter = filterWithCondition(filter, "!sex.startsWith('male')");
- prettyPrint.append("Sex is not male.
");
}
- if (request.getParameter("female") == null) {
- filter = filterWithCondition(filter, "!sex.startsWith('female')");
- prettyPrint.append("Sex is not female.
");
- }
- if (request.getParameter("unknown") == null) {
- filter = filterWithCondition(filter, "!sex.startsWith('unknown') && sex != null");
- prettyPrint.append("Sex is not unknown.
");
- }
- System.out.println("Filter at end of sex filtering: " + filter);
- }
- // filter by sex--------------------------------------------------------------------------------------
- String releaseDateFromStr = request.getParameter("releaseDateFrom");
- String releaseDateToStr = request.getParameter("releaseDateTo");
- String pattern = CommonConfiguration.getProperty("releaseDateFormat", context);
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
- if (releaseDateFromStr != null && releaseDateFromStr.trim().length() > 0) {
- try {
- Date releaseDateFrom = simpleDateFormat.parse(releaseDateFromStr);
- if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += " && ";
+ // end date added filter------------------------------------------
+ // filter for sex------------------------------------------
+ if ((request.getParameter("male") != null) ||
+ (request.getParameter("female") != null) ||
+ (request.getParameter("unknown") != null)) {
+ System.out.println("Filter at beginning of sex filtering: " + filter);
+ if (request.getParameter("male") == null) {
+ filter = filterWithCondition(filter, "!sex.startsWith('male')");
+ prettyPrint.append("Sex is not male.
");
+ }
+ if (request.getParameter("female") == null) {
+ filter = filterWithCondition(filter, "!sex.startsWith('female')");
+ prettyPrint.append("Sex is not female.
");
+ }
+ if (request.getParameter("unknown") == null) {
+ filter = filterWithCondition(filter,
+ "!sex.startsWith('unknown') && sex != null");
+ prettyPrint.append("Sex is not unknown.
");
+ }
+ System.out.println("Filter at end of sex filtering: " + filter);
+ }
+ // filter by sex--------------------------------------------------------------------------------------
+ String releaseDateFromStr = request.getParameter("releaseDateFrom");
+ String releaseDateToStr = request.getParameter("releaseDateTo");
+ String pattern = CommonConfiguration.getProperty("releaseDateFormat", context);
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ if (releaseDateFromStr != null && releaseDateFromStr.trim().length() > 0) {
+ try {
+ Date releaseDateFrom = simpleDateFormat.parse(releaseDateFromStr);
+ if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += " && ";
+ }
+ filter += "(releaseDate >= releaseDateFrom)";
+ parameterDeclaration = updateParametersDeclaration(parameterDeclaration,
+ "java.util.Date releaseDateFrom");
+ paramMap.put("releaseDateFrom", releaseDateFrom);
+ prettyPrint.append("release date >= " +
+ simpleDateFormat.format(releaseDateFrom));
+ } catch (Exception e) {
+ e.printStackTrace();
}
- filter += "(releaseDate >= releaseDateFrom)";
- parameterDeclaration = updateParametersDeclaration(parameterDeclaration,
- "java.util.Date releaseDateFrom");
- paramMap.put("releaseDateFrom", releaseDateFrom);
- prettyPrint.append("release date >= " + simpleDateFormat.format(releaseDateFrom));
- } catch (Exception e) {
- e.printStackTrace();
}
- }
- if (releaseDateToStr != null && releaseDateToStr.trim().length() > 0) {
- try {
- Date releaseDateTo = simpleDateFormat.parse(releaseDateToStr);
- if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter += " && ";
+ if (releaseDateToStr != null && releaseDateToStr.trim().length() > 0) {
+ try {
+ Date releaseDateTo = simpleDateFormat.parse(releaseDateToStr);
+ if (!filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter += " && ";
+ }
+ filter += "(releaseDate <= releaseDateTo)";
+ parameterDeclaration = updateParametersDeclaration(parameterDeclaration,
+ "java.util.Date releaseDateTo");
+ paramMap.put("releaseDateTo", releaseDateTo);
+ prettyPrint.append("releaseDate <= " + simpleDateFormat.format(releaseDateTo));
+ } catch (Exception e) {
+ e.printStackTrace();
}
- filter += "(releaseDate <= releaseDateTo)";
- parameterDeclaration = updateParametersDeclaration(parameterDeclaration,
- "java.util.Date releaseDateTo");
- paramMap.put("releaseDateTo", releaseDateTo);
- prettyPrint.append("releaseDate <= " + simpleDateFormat.format(releaseDateTo));
- } catch (Exception e) {
- e.printStackTrace();
}
- }
- for (String fieldName : SIMPLE_STRING_FIELDS)
- filter = QueryProcessor.filterWithBasicStringField(filter, fieldName, request,
- prettyPrint);
- filter = filterWithGpsBox("decimalLatitude", "decimalLongitude", filter, request);
- // end GPS filters-----------------------------------------------
- if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
- filter = "SELECT FROM org.ecocean.Encounter WHERE catalogNumber != null";
- }
- filter += jdoqlVariableDeclaration;
-
- filter += parameterDeclaration;
- System.out.println("EncounterQueryProcessor filter: " + filter);
+ for (String fieldName : SIMPLE_STRING_FIELDS)
+ filter = QueryProcessor.filterWithBasicStringField(filter, fieldName, request,
+ prettyPrint);
+ filter = filterWithGpsBox("decimalLatitude", "decimalLongitude", filter, request);
+ // end GPS filters-----------------------------------------------
+ if (filter.equals(SELECT_FROM_ORG_ECOCEAN_ENCOUNTER_WHERE)) {
+ filter = "SELECT FROM org.ecocean.Encounter WHERE catalogNumber != null";
+ }
+ filter += jdoqlVariableDeclaration;
+ filter += parameterDeclaration;
+ System.out.println("EncounterQueryProcessor filter: " + filter);
+ } catch (Exception ex) {
+ System.out.println("Shepherd usage caught: " + ex);
+ ex.printStackTrace();
+ } finally {
+ myShepherd.rollbackAndClose();
+ }
return filter;
}
diff --git a/src/main/java/org/ecocean/Occurrence.java b/src/main/java/org/ecocean/Occurrence.java
index 1f4cce4a65..f267d6cb54 100644
--- a/src/main/java/org/ecocean/Occurrence.java
+++ b/src/main/java/org/ecocean/Occurrence.java
@@ -1370,7 +1370,7 @@ public void run() {
try {
Occurrence occur = bgShepherd.getOccurrence(occurId);
if ((occur == null) || (occur.getEncounters() == null)) {
- bgShepherd.rollbackAndClose();
+ // rollbackAndClose handled by finally
executor.shutdown();
return;
}
diff --git a/src/main/java/org/ecocean/api/SiteSettings.java b/src/main/java/org/ecocean/api/SiteSettings.java
index 898e612eb5..696208dac2 100644
--- a/src/main/java/org/ecocean/api/SiteSettings.java
+++ b/src/main/java/org/ecocean/api/SiteSettings.java
@@ -47,6 +47,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
// note: there is a CommonConfiguration property: htmlShortcutIcon=images/favicon.ico?v=2
settings.put("siteFavicon", "/images/favicon.ico");
settings.put("siteName", CommonConfiguration.getHTMLTitle(context));
+ settings.put("siteDescription", CommonConfiguration.getHTMLDescription(context));
+ settings.put("siteKeywords", CommonConfiguration.getHTMLKeywords(context));
+ settings.put("siteAuthor", CommonConfiguration.getHTMLAuthor(context));
settings.put("locationData", LocationID.getLocationIDStructure());
settings.put("mapCenterLat", CommonConfiguration.getCenterLat(context));
diff --git a/src/main/java/org/ecocean/servlet/IndividualRemoveEncounter.java b/src/main/java/org/ecocean/servlet/IndividualRemoveEncounter.java
index d3a1cd8167..b9a8630b1a 100644
--- a/src/main/java/org/ecocean/servlet/IndividualRemoveEncounter.java
+++ b/src/main/java/org/ecocean/servlet/IndividualRemoveEncounter.java
@@ -107,7 +107,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}
if (!locked) {
myShepherd.commitDBTransaction();
- if (enc2remove != null) enc2remove.opensearchIndexDeep();
+ //if (enc2remove != null) enc2remove.opensearchIndexDeep();
out.println(ServletUtilities.getHeader(request));
response.setStatus(HttpServletResponse.SC_OK);
out.println("Success: Encounter #" +
diff --git a/src/main/java/org/ecocean/servlet/OccurrenceRemoveEncounter.java b/src/main/java/org/ecocean/servlet/OccurrenceRemoveEncounter.java
index b6dc7c135e..97d8c18853 100644
--- a/src/main/java/org/ecocean/servlet/OccurrenceRemoveEncounter.java
+++ b/src/main/java/org/ecocean/servlet/OccurrenceRemoveEncounter.java
@@ -83,7 +83,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
if (!locked) {
myShepherd.commitDBTransaction();
// out.println(ServletUtilities.getHeader(request));
- if (enc2remove != null) enc2remove.opensearchIndexDeep();
+ //if (enc2remove != null) enc2remove.opensearchIndexDeep();
out.println("Success: Encounter " +
request.getParameter("number") +
" was successfully removed from occurrence " + old_name + ".");
diff --git a/src/main/java/org/ecocean/servlet/SubmitSpotsAndImage.java b/src/main/java/org/ecocean/servlet/SubmitSpotsAndImage.java
index 2965eafea8..c83dc2d505 100644
--- a/src/main/java/org/ecocean/servlet/SubmitSpotsAndImage.java
+++ b/src/main/java/org/ecocean/servlet/SubmitSpotsAndImage.java
@@ -50,132 +50,133 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
myShepherd.setAction("SubmitSpotsAndImage.class");
myShepherd.beginDBTransaction();
- JSONObject json = ServletUtilities.jsonFromHttpServletRequest(request);
- int maId = json.optInt("mediaAssetId", -1);
- if (maId < 0) {
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
- throw new IOException("invalid mediaAssetId");
- }
- String encId = json.optString("encId", null);
- if (encId == null) {
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
- throw new IOException("invalid encId");
- }
- Encounter enc = myShepherd.getEncounter(encId);
- if (enc == null) {
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
- throw new IOException("invalid encId");
- }
- boolean rightSide = json.optBoolean("rightSide", false);
- ArrayList spots = parseSpots(json.optJSONArray("spots"));
- if (spots == null) {
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
- throw new IOException("invalid spots");
- }
- ArrayList refSpots = parseSpots(json.optJSONArray("refSpots"));
- if (refSpots == null) {
- myShepherd.rollbackDBTransaction();
- myShepherd.closeDBTransaction();
- throw new IOException("invalid refSpots");
- }
- AssetStore store = AssetStore.getDefault(myShepherd);
- // this should put it in the same old (pre-MediaAsset) location to maintain url pattern
-
- // setup data dir
- String rootWebappPath = getServletContext().getRealPath("/");
- File webappsDir = new File(rootWebappPath).getParentFile();
- File shepherdDataDir = new File(webappsDir,
- CommonConfiguration.getDataDirectoryName(context));
- // if(!shepherdDataDir.exists()){shepherdDataDir.mkdirs();}
- // File encountersDir=new File(shepherdDataDir.getAbsolutePath()+"/encounters");
- // if(!encountersDir.exists()){encountersDir.mkdirs();}
- String thisEncDirString = Encounter.dir(shepherdDataDir, encId);
- File thisEncounterDir = new File(thisEncDirString);
- if (!thisEncounterDir.exists()) {
- thisEncounterDir.mkdirs();
- System.out.println("I am making the encDir: " + thisEncDirString);
- }
- // now persist
- JSONObject params = store.createParameters(new File("encounters/" +
- Encounter.subdir(encId) + "/extract" + (rightSide ? "Right" : "") + encId + ".jpg"));
- System.out.println("====> params = " + params);
- MediaAsset crMa = store.create(params);
- crMa.copyInBase64(json.optString("imageData", null));
- crMa.addLabel("_spot" + (rightSide ? "Right" : "")); // we are sticking with "legacy" '_spot' for left
- // crMa.setParentId(maId);
- crMa.addDerivationMethod("spotTool", json.optJSONObject("imageToolValues"));
- // ma.updateMinimalMetadata();
+
+ try{
+ JSONObject json = ServletUtilities.jsonFromHttpServletRequest(request);
+ int maId = json.optInt("mediaAssetId", -1);
+ if (maId < 0) {
+ throw new IOException("invalid mediaAssetId");
+ }
+ String encId = json.optString("encId", null);
+ if (encId == null) {
+ throw new IOException("invalid encId");
+ }
+ Encounter enc = myShepherd.getEncounter(encId);
+ if (enc == null) {
+ throw new IOException("invalid encId");
+ }
+ boolean rightSide = json.optBoolean("rightSide", false);
+ ArrayList spots = parseSpots(json.optJSONArray("spots"));
+ if (spots == null) {
+ throw new IOException("invalid spots");
+ }
+ ArrayList refSpots = parseSpots(json.optJSONArray("refSpots"));
+ if (refSpots == null) {
+ throw new IOException("invalid refSpots");
+ }
+ AssetStore store = AssetStore.getDefault(myShepherd);
+ // this should put it in the same old (pre-MediaAsset) location to maintain url pattern
+
+ // setup data dir
+ String rootWebappPath = getServletContext().getRealPath("/");
+ File webappsDir = new File(rootWebappPath).getParentFile();
+ File shepherdDataDir = new File(webappsDir,
+ CommonConfiguration.getDataDirectoryName(context));
+ // if(!shepherdDataDir.exists()){shepherdDataDir.mkdirs();}
+ // File encountersDir=new File(shepherdDataDir.getAbsolutePath()+"/encounters");
+ // if(!encountersDir.exists()){encountersDir.mkdirs();}
+ String thisEncDirString = Encounter.dir(shepherdDataDir, encId);
+ File thisEncounterDir = new File(thisEncDirString);
+ if (!thisEncounterDir.exists()) {
+ thisEncounterDir.mkdirs();
+ System.out.println("I am making the encDir: " + thisEncDirString);
+ }
+ // now persist
+ JSONObject params = store.createParameters(new File("encounters/" +
+ Encounter.subdir(encId) + "/extract" + (rightSide ? "Right" : "") + encId + ".jpg"));
+ System.out.println("====> params = " + params);
+ MediaAsset crMa = store.create(params);
+ crMa.copyInBase64(json.optString("imageData", null));
+ crMa.addLabel("_spot" + (rightSide ? "Right" : "")); // we are sticking with "legacy" '_spot' for left
+ // crMa.setParentId(maId);
+ crMa.addDerivationMethod("spotTool", json.optJSONObject("imageToolValues"));
+ // ma.updateMinimalMetadata();
+
+ Keyword crKeyword = myShepherd.getOrCreateKeyword("CR Image");
+ String crParentId = request.getParameter("dataCollectionEventID");
+ // crMa.addDerivationMethod("crParentId", crParentId);
+ // crMa.addLabel("CR");
+ crMa.addKeyword(crKeyword);
+ crMa.updateMinimalMetadata();
+ crMa.setDetectionStatus("complete");
+ System.out.println(" + updated made media asset");
+ MediaAssetFactory.save(crMa, myShepherd);
+ System.out.println(" + saved media asset " + crMa.toString());
+ myShepherd.updateDBTransaction();
+ System.out.println(" + updated transaction, about to make children");
+ crMa.updateStandardChildren(myShepherd);
+ crMa.updateMetadata();
+ System.out.println(" + updated children for asset " + crMa.toString() +
+ "; hasFamily = " + crMa.hasFamily(myShepherd));
+ String speciesString = enc.getTaxonomyString();
+ Annotation ann = new Annotation(speciesString, crMa);
+ ann.setMatchAgainst(true);
+ String iaClass = "whalesharkCR"; // should we change this?
+ ann.setIAClass(iaClass);
+ if (rightSide) { ann.setViewpoint("right"); } else { ann.setViewpoint("left"); }
+ enc.addAnnotation(ann);
+ System.out.println(" + made annotation " + ann.toString());
- Keyword crKeyword = myShepherd.getOrCreateKeyword("CR Image");
- String crParentId = request.getParameter("dataCollectionEventID");
- // crMa.addDerivationMethod("crParentId", crParentId);
- // crMa.addLabel("CR");
- crMa.addKeyword(crKeyword);
- crMa.updateMinimalMetadata();
- crMa.setDetectionStatus("complete");
- System.out.println(" + updated made media asset");
- MediaAssetFactory.save(crMa, myShepherd);
- System.out.println(" + saved media asset " + crMa.toString());
- myShepherd.updateDBTransaction();
- System.out.println(" + updated transaction, about to make children");
- crMa.updateStandardChildren(myShepherd);
- crMa.updateMetadata();
- System.out.println(" + updated children for asset " + crMa.toString() +
- "; hasFamily = " + crMa.hasFamily(myShepherd));
- String speciesString = enc.getTaxonomyString();
- Annotation ann = new Annotation(speciesString, crMa);
- ann.setMatchAgainst(true);
- String iaClass = "whalesharkCR"; // should we change this?
- ann.setIAClass(iaClass);
- if (rightSide) { ann.setViewpoint("right"); } else { ann.setViewpoint("left"); }
- enc.addAnnotation(ann);
- System.out.println(" + made annotation " + ann.toString());
- myShepherd.getPM().makePersistent(ann);
- System.out.println(" + saved annotation");
- // we need to intake mediaassets so they get acmIds and are matchable
- ArrayList maList = new ArrayList();
- maList.add(crMa);
- ArrayList annList = new ArrayList();
- annList.add(ann);
- try {
- System.out.println(" + sending asset to IA");
- IBEISIA.sendMediaAssetsNew(maList, context);
- myShepherd.updateDBTransaction();
- System.out.println(" + asset sent, sending annot");
- IBEISIA.sendAnnotationsNew(annList, context, myShepherd);
- myShepherd.updateDBTransaction();
- System.out.println(" + annot sent.");
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("hit above exception while trying to send CR ma & annot to IA");
+ myShepherd.getPM().makePersistent(ann);
+ System.out.println(" + saved annotation");
+
+ // we need to intake mediaassets so they get acmIds and are matchable
+ ArrayList maList = new ArrayList();
+ maList.add(crMa);
+ ArrayList annList = new ArrayList();
+ annList.add(ann);
+ try {
+ System.out.println(" + sending asset to IA");
+ IBEISIA.sendMediaAssetsNew(maList, context);
+ myShepherd.updateDBTransaction();
+ System.out.println(" + asset sent, sending annot");
+ IBEISIA.sendAnnotationsNew(annList, context, myShepherd);
+ myShepherd.updateDBTransaction();
+ System.out.println(" + annot sent.");
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("hit above exception while trying to send CR ma & annot to IA");
+ }
+ System.out.println(" + done processing new CR annot");
+ if (rightSide) {
+ enc.setRightSpots(spots);
+ enc.setRightReferenceSpots(refSpots);
+ } else {
+ enc.setSpots(spots);
+ enc.setLeftReferenceSpots(refSpots);
+ }
+ // reset the entry in the GridManager graph
+ GridManager gm = GridManagerFactory.getGridManager();
+ gm.addMatchGraphEntry(encId, new EncounterLite(enc));
+
+ myShepherd.commitDBTransaction();
+ myShepherd.closeDBTransaction();
+
+ JSONObject rtn = new JSONObject("{\"success\": true}");
+ rtn.put("spotAssetId", crMa.getId());
+ rtn.put("spotAssetUrl", crMa.webURL());
+ response.setContentType("text/plain");
+ PrintWriter out = response.getWriter();
+ out.println(rtn.toString());
+ out.close();
}
- System.out.println(" + done processing new CR annot");
- if (rightSide) {
- enc.setRightSpots(spots);
- enc.setRightReferenceSpots(refSpots);
- } else {
- enc.setSpots(spots);
- enc.setLeftReferenceSpots(refSpots);
+ catch(Exception e) {
+ e.printStackTrace();
+ }
+ finally {
+ myShepherd.rollbackAndClose();
}
- // reset the entry in the GridManager graph
- GridManager gm = GridManagerFactory.getGridManager();
- gm.addMatchGraphEntry(encId, new EncounterLite(enc));
-
- myShepherd.commitDBTransaction();
- myShepherd.closeDBTransaction();
-
- JSONObject rtn = new JSONObject("{\"success\": true}");
- rtn.put("spotAssetId", crMa.getId());
- rtn.put("spotAssetUrl", crMa.webURL());
- response.setContentType("text/plain");
- PrintWriter out = response.getWriter();
- out.println(rtn.toString());
- out.close();
}
private ArrayList parseSpots(JSONArray arr) {