diff --git a/.env.unix.example b/.env.unix.example index 764de90948149fb5ce76cda9bc28dd3ebf00f33e..5a9779d9ae762e517d44e52d969aadab9c485f93 100644 --- a/.env.unix.example +++ b/.env.unix.example @@ -9,13 +9,13 @@ SEARCH_PASSWORD=admin METADATA_DB=fda METADATA_USERNAME=root METADATA_PASSWORD=dbrepo +BROKER_ENDPOINT=http://broker-service:15672 BROKER_USERNAME=fda BROKER_PASSWORD=fda KEYCLOAK_ADMIN=fda KEYCLOAK_ADMIN_PASSWORD=fda BROKER_CONSUMERS=2 WEBSITE=http://localhost -GATEWAY_ENDPOINT=http://gateway-service LOG_LEVEL=trace # error, warning, info, debug, trace DOI_URL="https://doi.org" DATACITE_URL="https://api.datacite.org" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bc209a24b40cd9d360e575add7681dfc3d2778ba..8978694f11ceb1d20db159ea4952e02168f4ce24 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,72 +33,11 @@ stages: - scan-docker - release-docker -build-metadata-db: - stage: build-backend - script: - - "make build-metadata-db" - -build-identifier-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-identifier-service" - -build-container-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-container-service" - -build-database-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-database-service" - -build-data-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-data-service" - -build-query-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-query-service" - -build-table-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-table-service" - -build-user-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-user-service" - build-metadata-service: stage: build-backend - needs: - - build-metadata-db script: - "make build-metadata-service" -build-semantics-service: - stage: build-backend - script: - - "make build-semantics-service" - build-analyse-service: stage: build-backend script: @@ -106,113 +45,10 @@ build-analyse-service: build-search-sync-agent: stage: build-backend - script: - - "make build-search-sync-agent" - -test-identifier-service: - stage: test-backend - needs: - - build-identifier-service - script: - - "make test-identifier-service" - - "cat ./dbrepo-identifier-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-identifier-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-identifier-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-identifier-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - -test-user-service: - stage: test-backend - needs: - - build-user-service - script: - - "make test-user-service" - - "cat ./dbrepo-user-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-user-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-user-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-user-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - -test-container-service: - stage: test-backend needs: - - build-container-service - script: - - "make test-container-service" - - "cat ./dbrepo-container-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-container-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-container-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-container-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - -test-database-service: - stage: test-backend - needs: - - build-database-service - script: - - "docker pull elasticsearch:7.13.4" - - "make test-database-service" - - "cat ./dbrepo-database-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-database-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-database-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-database-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - timeout: 2 hour - -test-query-service: - stage: test-backend - needs: - - build-query-service - script: - - "make test-query-service" - - "cat ./dbrepo-query-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-query-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-query-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-query-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - timeout: 2 hour - -test-table-service: - stage: test-backend - needs: - - build-table-service + - build-metadata-service script: - - "make test-table-service" - - "cat ./dbrepo-table-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-table-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-table-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-table-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' + - "make build-search-sync-agent" test-metadata-service: stage: test-backend @@ -231,40 +67,6 @@ test-metadata-service: junit: ./dbrepo-metadata-service/rest-service/target/surefire-reports/TEST-*.xml coverage: '/Total.*?([0-9]{1,3})%/' -test-data-service: - stage: test-backend - needs: - - build-data-service - script: - - "make test-data-service" - - "cat ./dbrepo-data-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-data-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-data-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-data-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - -test-semantics-service: - stage: test-backend - needs: - - build-semantics-service - script: - - "make test-semantics-service" - - "cat ./dbrepo-semantics-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-semantics-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-semantics-service/rest-service/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-semantics-service/rest-service/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - test-search-sync-agent: stage: test-backend needs: @@ -319,16 +121,8 @@ test-frontend: build-docker: stage: build-docker needs: - - build-metadata-db - - build-identifier-service - - build-container-service - - build-database-service - - build-query-service - - build-table-service - build-metadata-service - - build-semantics-service - build-analyse-service - - build-user-service script: - bash .scripts/docker-prune.sh - cp .env.unix.example .env @@ -399,46 +193,6 @@ scan-broker-service: reports: container_scanning: ./.trivy/trivy-broker-service-report.json -scan-container-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-container-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-container-service-report.json - -scan-database-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-database-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-database-service-report.json - scan-gateway-service: stage: scan-docker needs: @@ -459,46 +213,6 @@ scan-gateway-service: reports: container_scanning: ./.trivy/trivy-gateway-service-report.json -scan-identifier-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-identifier-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-identifier-service-report.json - -scan-metadata-db: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-metadata-db - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-metadata-db-report.json - scan-metadata-service: stage: scan-docker needs: @@ -519,26 +233,6 @@ scan-metadata-service: reports: container_scanning: ./.trivy/trivy-metadata-service-report.json -scan-data-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-data-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-data-service-report.json - scan-proxy: stage: scan-docker needs: @@ -559,26 +253,6 @@ scan-proxy: reports: container_scanning: ./.trivy/trivy-proxy-report.json -scan-query-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-query-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-query-service-report.json - scan-search-db: stage: scan-docker needs: @@ -599,46 +273,6 @@ scan-search-db: reports: container_scanning: ./.trivy/trivy-search-db-report.json -scan-semantics-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-semantics-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-semantics-service-report.json - -scan-table-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-table-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-table-service-report.json - scan-ui: stage: scan-docker needs: @@ -659,45 +293,17 @@ scan-ui: reports: container_scanning: ./.trivy/trivy-ui-report.json -scan-user-service: - stage: scan-docker - needs: - - build-docker - only: - refs: - - dev - - master - allow_failure: true - script: - - make scan-user-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-user-service-report.json - release-latest: stage: release-docker needs: - scan-analyse-service - scan-authentication-service - scan-broker-service - - scan-container-service - - scan-database-service - scan-gateway-service - - scan-identifier-service - - scan-metadata-db - scan-metadata-service - scan-proxy - - scan-query-service - scan-search-db - - scan-semantics-service - - scan-table-service - scan-ui - - scan-user-service only: refs: - dev @@ -713,19 +319,11 @@ release-version: - scan-analyse-service - scan-authentication-service - scan-broker-service - - scan-container-service - - scan-database-service - scan-gateway-service - - scan-identifier-service - - scan-metadata-db - scan-metadata-service - scan-proxy - - scan-query-service - scan-search-db - - scan-semantics-service - - scan-table-service - scan-ui - - scan-user-service only: refs: - master diff --git a/Makefile b/Makefile index 92c439c1eb00f8dd4b95091f688ed00eb0ff9aab..9f71834df48fcb840e5c1632b43ae10d7eb6a43d 100644 --- a/Makefile +++ b/Makefile @@ -10,46 +10,19 @@ all: build build: build-backend build-docker -build-backend: build-metadata-db build-database-service build-query-service build-table-service build-identifier-service build-container-service build-metadata-service build-analyse-service build-user-service build-semantics-service build-search-sync-agent build-data-service +build-backend: build-metadata-service build-analyse-service build-search-sync-agent -build-metadata-db: - mvn -f ./dbrepo-metadata-db/pom.xml clean install - -build-identifier-service: build-metadata-db - mvn -f ./dbrepo-identifier-service/pom.xml clean package -DskipTests - -build-table-service: build-metadata-db - mvn -f ./dbrepo-table-service/pom.xml clean package -DskipTests - -build-container-service: build-metadata-db - mvn -f ./dbrepo-container-service/pom.xml clean package -DskipTests - -build-search-sync-agent: build-metadata-db +build-search-sync-agent: build-metadata-service mvn -f ./dbrepo-search-sync-agent/pom.xml clean package -DskipTests -build-database-service: build-metadata-db - mvn -f ./dbrepo-database-service/pom.xml clean package -DskipTests - -build-query-service: build-metadata-db - mvn -f ./dbrepo-query-service/pom.xml clean package -DskipTests - -build-metadata-service: build-metadata-db - mvn -f ./dbrepo-metadata-service/pom.xml clean package -DskipTests - -build-user-service: build-metadata-db - mvn -f ./dbrepo-user-service/pom.xml clean package -DskipTests - -build-data-service: build-metadata-db - mvn -f ./dbrepo-data-service/pom.xml clean package -DskipTests - -build-semantics-service: build-metadata-db - mvn -f ./dbrepo-semantics-service/pom.xml clean package -DskipTests +build-metadata-service: + mvn -f ./dbrepo-metadata-service/pom.xml clean install -DskipTests build-analyse-service: bash ./dbrepo-analyse-service/build.sh build-docker: - docker compose build dbrepo-metadata-db + docker build -t dbrepo-metadata-service:build --target build dbrepo-metadata-service docker compose build --parallel build-frontend: @@ -59,7 +32,7 @@ build-frontend: build-clients: bash ./.gitlab/swagger/generate.sh -tag: tag-identifier-service tag-container-service tag-database-service tag-query-service tag-table-service tag-analyse-service tag-authentication-service tag-metadata-db tag-ui tag-semantics-service tag-broker-service tag-metadata-service tag-user-service tag-search-sync-agent tag-data-service +tag: tag-analyse-service tag-authentication-service tag-metadata-db tag-ui tag-broker-service tag-metadata-service tag-search-sync-agent tag-analyse-service: docker tag dbrepo-analyse-service:latest "dbrepo/analyse-service:${TAG}" @@ -77,10 +50,6 @@ tag-ui: docker tag dbrepo-ui:latest "dbrepo/ui:${TAG}" docker tag dbrepo-ui:latest "${AZURE_REPO}/dbrepo/ui:${TAG}" -tag-identifier-service: - docker tag dbrepo-identifier-service:latest "dbrepo/identifier-service:${TAG}" - docker tag dbrepo-identifier-service:latest "${AZURE_REPO}/dbrepo/identifier-service:${TAG}" - tag-search-sync-agent: docker tag dbrepo-search-sync-agent:latest "dbrepo/search-sync-agent:${TAG}" docker tag dbrepo-search-sync-agent:latest "${AZURE_REPO}/dbrepo/search-sync-agent:${TAG}" @@ -89,34 +58,6 @@ tag-metadata-service: docker tag dbrepo-metadata-service:latest "dbrepo/metadata-service:${TAG}" docker tag dbrepo-metadata-service:latest "${AZURE_REPO}/dbrepo/metadata-service:${TAG}" -tag-data-service: - docker tag dbrepo-data-service:latest "dbrepo/data-service:${TAG}" - docker tag dbrepo-data-service:latest "${AZURE_REPO}/dbrepo/data-service:${TAG}" - -tag-container-service: - docker tag dbrepo-container-service:latest "dbrepo/container-service:${TAG}" - docker tag dbrepo-container-service:latest "${AZURE_REPO}/dbrepo/container-service:${TAG}" - -tag-database-service: - docker tag dbrepo-database-service:latest "dbrepo/database-service:${TAG}" - docker tag dbrepo-database-service:latest "${AZURE_REPO}/dbrepo/database-service:${TAG}" - -tag-query-service: - docker tag dbrepo-query-service:latest "dbrepo/query-service:${TAG}" - docker tag dbrepo-query-service:latest "${AZURE_REPO}/dbrepo/query-service:${TAG}" - -tag-user-service: - docker tag dbrepo-user-service:latest "dbrepo/user-service:${TAG}" - docker tag dbrepo-user-service:latest "${AZURE_REPO}/dbrepo/user-service:${TAG}" - -tag-table-service: - docker tag dbrepo-table-service:latest "dbrepo/table-service:${TAG}" - docker tag dbrepo-table-service:latest "${AZURE_REPO}/dbrepo/table-service:${TAG}" - -tag-semantics-service: - docker tag dbrepo-semantics-service:latest "dbrepo/semantics-service:${TAG}" - docker tag dbrepo-semantics-service:latest "${AZURE_REPO}/dbrepo/semantics-service:${TAG}" - tag-broker-service: docker tag dbrepo-broker-service:latest "dbrepo/broker-service:${TAG}" docker tag dbrepo-broker-service:latest "${AZURE_REPO}/dbrepo/broker-service:${TAG}" @@ -125,7 +66,7 @@ tag-search-db: docker tag dbrepo-search-db:latest "dbrepo/search-db:${TAG}" docker tag dbrepo-search-db:latest "${AZURE_REPO}/dbrepo/search-db:${TAG}" -release: build-docker tag release-identifier-service release-container-service release-database-service release-query-service release-table-service release-analyse-service release-authentication-service release-metadata-db release-ui release-semantics-service release-broker-service release-metadata-service release-user-service release-search-sync-agent release-data-service +release: build-docker tag release-analyse-service release-authentication-service release-metadata-db release-ui release-broker-service release-metadata-service release-search-sync-agent release-analyse-service: tag-analyse-service docker push "dbrepo/analyse-service:${TAG}" @@ -143,38 +84,10 @@ release-ui: tag-ui docker push "dbrepo/ui:${TAG}" docker push "${AZURE_REPO}/dbrepo/ui:${TAG}" -release-identifier-service: tag-identifier-service - docker push "dbrepo/identifier-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/identifier-service:${TAG}" - release-search-sync-agent: tag-search-sync-agent docker push "dbrepo/search-sync-agent:${TAG}" docker push "${AZURE_REPO}/dbrepo/search-sync-agent:${TAG}" -release-container-service: tag-container-service - docker push "dbrepo/container-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/container-service:${TAG}" - -release-database-service: tag-database-service - docker push "dbrepo/database-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/database-service:${TAG}" - -release-query-service: tag-query-service - docker push "dbrepo/query-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/query-service:${TAG}" - -release-user-service: tag-user-service - docker push "dbrepo/user-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/user-service:${TAG}" - -release-table-service: tag-table-service - docker push "dbrepo/table-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/table-service:${TAG}" - -release-semantics-service: tag-semantics-service - docker push "dbrepo/semantics-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/semantics-service:${TAG}" - release-broker-service: tag-broker-service docker push "dbrepo/broker-service:${TAG}" docker push "${AZURE_REPO}/dbrepo/broker-service:${TAG}" @@ -183,48 +96,18 @@ release-metadata-service: tag-metadata-service docker push "dbrepo/metadata-service:${TAG}" docker push "${AZURE_REPO}/dbrepo/metadata-service:${TAG}" -release-data-service: tag-data-service - docker push "dbrepo/data-service:${TAG}" - docker push "${AZURE_REPO}/dbrepo/data-service:${TAG}" - -test-backend: test-container-service test-database-service test-query-service test-table-service test-identifier-service test-metadata-service test-semantics-service test-analyse-service test-user-service test-search-sync-agent test-data-service - -test-identifier-service: build-metadata-db build-identifier-service - mvn -f ./dbrepo-identifier-service/pom.xml clean test verify +test-backend: test-metadata-service test-analyse-service test-search-sync-agent -test-container-service: build-metadata-db build-container-service - mvn -f ./dbrepo-container-service/pom.xml clean test verify - -test-database-service: build-metadata-db build-database-service - docker pull rabbitmq:3-management-alpine - docker pull elasticsearch:8.7.1 - mvn -f ./dbrepo-database-service/pom.xml clean test verify - -test-query-service: build-metadata-db build-query-service - mvn -f ./dbrepo-query-service/pom.xml clean test verify - -test-table-service: build-metadata-db build-table-service - mvn -f ./dbrepo-table-service/pom.xml clean test verify - -test-search-sync-agent: build-metadata-db build-search-sync-agent +test-search-sync-agent: build-search-sync-agent mvn -f ./dbrepo-search-sync-agent/pom.xml clean test verify -test-metadata-service: build-metadata-db build-metadata-service +test-metadata-service: build-metadata-service mvn -f ./dbrepo-metadata-service/pom.xml clean test verify -test-data-service: build-metadata-db build-data-service - mvn -f ./dbrepo-data-service/pom.xml clean test verify - -test-user-service: build-metadata-db build-user-service - mvn -f ./dbrepo-user-service/pom.xml clean test verify - -test-semantics-service: build-metadata-db build-semantics-service - mvn -f ./dbrepo-semantics-service/pom.xml clean test verify - test-analyse-service: build-analyse-service bash ./dbrepo-analyse-service/test.sh -scan: scan-analyse-service scan-authentication-service scan-broker-service scan-container-service scan-database-service scan-gateway-service scan-identifier-service scan-metadata-db scan-metadata-service scan-query-service scan-search-db scan-semantics-service scan-table-service scan-ui scan-user-service scan-search-sync-agent scan-data-service +scan: scan-analyse-service scan-authentication-service scan-broker-service scan-gateway-service scan-metadata-db scan-metadata-service scan-search-db scan-ui scan-search-sync-agent scan-data-service scan-analyse-service: trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-analyse-service-report.json dbrepo-analyse-service:latest @@ -241,27 +124,12 @@ scan-broker-service: trivy image --insecure --exit-code 0 dbrepo-broker-service:latest trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-broker-service:latest -scan-container-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-container-service-report.json dbrepo-container-service:latest - trivy image --insecure --exit-code 0 dbrepo-container-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-container-service:latest - -scan-database-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-database-service-report.json dbrepo-database-service:latest - trivy image --insecure --exit-code 0 dbrepo-database-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-database-service:latest - scan-gateway-service: docker pull "nginx:${NGINX_VERSION}" trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-gateway-service-report.json "nginx:${NGINX_VERSION}" trivy image --insecure --exit-code 0 "nginx:${NGINX_VERSION}" trivy image --insecure --exit-code 1 --severity CRITICAL "nginx:${NGINX_VERSION}" -scan-identifier-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-identifier-service-report.json dbrepo-identifier-service:latest - trivy image --insecure --exit-code 0 dbrepo-identifier-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-identifier-service:latest - scan-metadata-db: trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-metadata-db-report.json dbrepo-metadata-db:latest trivy image --insecure --exit-code 0 dbrepo-metadata-db:latest @@ -272,16 +140,6 @@ scan-metadata-service: trivy image --insecure --exit-code 0 dbrepo-metadata-service:latest trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-metadata-service:latest -scan-data-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-data-service-report.json dbrepo-data-service:latest - trivy image --insecure --exit-code 0 dbrepo-data-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-data-service:latest - -scan-query-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-query-service-report.json dbrepo-query-service:latest - trivy image --insecure --exit-code 0 dbrepo-query-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-query-service:latest - scan-search-sync-agent: trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-search-sync-agent-report.json dbrepo-search-sync-agent:latest trivy image --insecure --exit-code 0 dbrepo-search-sync-agent:latest @@ -293,26 +151,11 @@ scan-search-db: trivy image --insecure --exit-code 0 "elasticsearch:${ELASTIC_VERSION}" trivy image --insecure --exit-code 1 --severity CRITICAL "elasticsearch:${ELASTIC_VERSION}" -scan-semantics-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-semantics-service-report.json dbrepo-semantics-service:latest - trivy image --insecure --exit-code 0 dbrepo-semantics-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-semantics-service:latest - -scan-table-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-table-service-report.json dbrepo-table-service:latest - trivy image --insecure --exit-code 0 dbrepo-table-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-table-service:latest - scan-ui: trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-ui-report.json dbrepo-ui:latest trivy image --insecure --exit-code 0 dbrepo-ui:latest trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-ui:latest -scan-user-service: - trivy image --insecure --exit-code 0 --format template --template "@.trivy/gitlab.tpl" -o ./.trivy/trivy-user-service-report.json dbrepo-user-service:latest - trivy image --insecure --exit-code 0 dbrepo-user-service:latest - trivy image --insecure --exit-code 1 --severity CRITICAL dbrepo-user-service:latest - coverage-frontend: build-frontend yarn --cwd ./dbrepo-ui run coverage || true diff --git a/dbrepo-container-service/.gitignore b/dbrepo-container-service/.gitignore deleted file mode 100644 index 7731f1adf24dc32351fdde402faa04b19e2f389f..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### Generated ### -ready - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-container-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-container-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-container-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-container-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-container-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-container-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-container-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-container-service/Dockerfile b/dbrepo-container-service/Dockerfile deleted file mode 100644 index 81b681ae8fe2981ffb193efc654e48808e6a1f73..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV BROKER_USERNAME=fda -ENV BROKER_PASSWORD=fda -ENV SEARCH_USERNAME=admin -ENV SEARCH_PASSWORD=admin -ENV SHARED_FILESYSTEM=/tmp -ENV USER_NETWORK=userdb -ENV LOG_LEVEL=debug -ENV CLIENT_ID="dbrepo-client" -ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./container-service.jar - -EXPOSE 9091 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./container-service.jar"] diff --git a/dbrepo-container-service/README.md b/dbrepo-container-service/README.md deleted file mode 100644 index ab86845542517a662ed2ddc02c33c544a24128f9..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Container Service - -## Actuator Endpoints - -- Actuator Info: http://localhost:9091/actuator/info -- Actuator Health: http://localhost:9091/actuator/health -- Actuator Prometheus: http://localhost:9091/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9091/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9091/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-container-service/mvnw b/dbrepo-container-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-container-service/mvnw.cmd b/dbrepo-container-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-container-service/pom.xml b/dbrepo-container-service/pom.xml deleted file mode 100644 index d6424330a2e0462b163528c453e852f4c0db237d..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/pom.xml +++ /dev/null @@ -1,265 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-container-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-container-service</name> - <description>Service that manages the containers</description> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <swagger.version>2.2.9</swagger.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency><!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters --> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency><!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents</groupId> - <artifactId>httpclient</artifactId> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- Entity and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <!-- DataSource --> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.hsqldb</groupId> - <artifactId>hsqldb</artifactId> - <version>${hsqldb.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>**/DbrepoContainerManagingApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-container-service/report/pom.xml b/dbrepo-container-service/report/pom.xml deleted file mode 100644 index d65ecb0a3ffa4a65269a30d190b133c3a35c486d..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/report/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-container-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.3.0</version> - <name>dbrepo-container-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/pom.xml b/dbrepo-container-service/rest-service/pom.xml deleted file mode 100644 index f64c4da5dcff45774a247541d7e20570b5cf040c..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-container-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-container-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerApplication.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerApplication.java deleted file mode 100644 index 5411266ab66066be2eaed57034c81f3c56ce82c8..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoContainerApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoContainerApplication.class, args); - } - -} diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index 1e40147896b8dc0da0ec551c096e359c76356109..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.servers.Server; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository Container Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the containers") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Sourcecode Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services")) - .servers(List.of(new Server() - .description("Generated server url") - .url("http://localhost:9091"), - new Server() - .description("Sandbox") - .url("https://dbrepo2.tuwien.ac.at"))); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("container-service") - .pathsToMatch("/api/**") - .build(); - } - -} diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index c8b884f8cd7d72d1cfe6baa6e4da658b98db479f..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,174 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(ContainerAlreadyExistsException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.container.exists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.GONE) - @ExceptionHandler(ContainerAlreadyRemovedException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyRemovedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.GONE) - .message(e.getLocalizedMessage()) - .code("error.container.alreadyremoved") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(ContainerAlreadyRunningException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyRunningException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.container.alreadyrunning") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(ContainerAlreadyStoppedException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyStoppedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.container.alreadystopped") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(ContainerNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.container.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_GATEWAY) - @ExceptionHandler(ContainerNotRunningException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerNotRunningException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_GATEWAY) - .message(e.getLocalizedMessage()) - .code("error.container.notrunning") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(ContainerStillRunningException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerStillRunningException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.container.stillrunning") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(ImageAlreadyExistsException.class) - public ResponseEntity<ApiErrorDto> handle(ImageAlreadyExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.image.exists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(ImageInvalidException.class) - public ResponseEntity<ApiErrorDto> handle(ImageInvalidException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.image.invalid") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(ImageNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(ImageNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.image.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(NotAllowedException.class) - public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.container.notallowed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.FORBIDDEN) - @ExceptionHandler(PersistenceException.class) - public ResponseEntity<ApiErrorDto> handle(PersistenceException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.FORBIDDEN) - .message(e.getLocalizedMessage()) - .code("error.container.storage") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(UserNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.container.usernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 9690f4f1a777eb2f5cc7b7f5cdbf4be786349f71..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,54 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: container-service - cloud: - loadbalancer.ribbon.enabled: false - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http -management.endpoints.web.exposure.include: health,info,prometheus -springdoc.swagger-ui.enabled: true -server: - port: 9091 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - network: userdb - mount.path: /tmp - jwt: - issuer: http://localhost/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB - client_secret: client-secret - client_id: dbrepo-client - gateway.endpoint: http://localhost diff --git a/dbrepo-container-service/rest-service/src/main/resources/application.yml b/dbrepo-container-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index a208ebe8f69f72e5af611188d9865831a352310f..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,73 +0,0 @@ -app.version: '@project.version@' -spring: - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - main.banner-mode: off - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: container-service - cloud: - loadbalancer.ribbon.enabled: false - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -springdoc.swagger-ui.enabled: true -server: - port: 9091 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - network: "${USER_NETWORK}" - mount.path: "${SHARED_FILESYSTEM}" - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" - client_secret: "${DBREPO_CLIENT_SECRET}" - client_id: "${CLIENT_ID}" - gateway.endpoint: http://gateway-service \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/main/resources/config.properties b/dbrepo-container-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e993ed9c62272ab86ae23a64f6195f21e465216f..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/main/resources/config.properties +++ /dev/null @@ -1 +0,0 @@ -# https://github.com/Netflix/Hystrix/issues/275 \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index 6d7c6258e68f22dc3b05345e895f354031fd4775..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @Autowired - private MockMvc mockMvc; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorStatus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java deleted file mode 100644 index b5e83baa6375a6e1e209a20e3924e8ddf3f8f106..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@Log4j2 -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class UserServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserService userService; - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1_SIMPLE); - } - - @Test - public void findByUsername_succeeds() throws UserNotFoundException { - - /* test */ - final User response = userService.findByUsername(USER_1_USERNAME); - assertEquals(USER_1_ID, response.getId()); - assertEquals(USER_1_USERNAME, response.getUsername()); - } - - @Test - public void findByUsername_fails() { - - /* test */ - assertThrows(UserNotFoundException.class, () -> { - userService.findByUsername(USER_2_USERNAME); - }); - } - -} diff --git a/dbrepo-container-service/rest-service/src/test/resources/application.properties b/dbrepo-container-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 5c7ce656a49cadede00801f966bc83264e508000..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,28 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled = false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled = false -spring.cloud.config.enabled = false - -# disable datasource -spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver -spring.datasource.url=jdbc:hsqldb:mem:testdb;db_close_delay=-1;sql.syntax_mys=true -spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect -spring.datasource.username=root -spring.datasource.password=dbrepo -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -mariaDB4j.port=3308 -#mariaDB4j.baseDir=target/mariaDB4j -# mariaDB4j.dataDir= -mariaDB4j.userName=root -mariaDB4j.password=dbrepo - -# additional logging -logging.level.root=error \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-container-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index 4dd0068634978d7fff069203febb24d69d02f845..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.tuwien.config; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index faa094b1c41f426ff4b198b4716273f96ebe6d72..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,95 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import jakarta.servlet.http.HttpServletResponse; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/container/**", "GET"), - new AntPathRequestMatcher("/api/image/**", "GET") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java deleted file mode 100644 index ed637c4c6dea691cb4fd7a029bb4f7e312835ad5..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.server.ResponseStatusException; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Container not found") -public class ContainerNotFoundException extends Exception { - - public ContainerNotFoundException(String msg) { - super(msg); - } - - public ContainerNotFoundException(String msg, Throwable e) { - super(msg, e); - } - - public ContainerNotFoundException(Throwable e) { - super(e); - } - -} \ No newline at end of file diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-container-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java deleted file mode 100644 index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class NotAllowedException extends Exception { - - public NotAllowedException(String msg) { - super(msg); - } - - public NotAllowedException(String msg, Throwable thr) { - super(msg, thr); - } - - public NotAllowedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java deleted file mode 100644 index 1879065a2df2056603679e9d8a505633a702178a..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.entities.database.Database; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface DatabaseMapper { - - @Mappings({ - @Mapping(target = "container", ignore = true) - }) - DatabaseDto databaseToDatabaseDto(Database data); - - /* keep */ - @Mappings({ - @Mapping(target = "container", ignore = true) - }) - DatabaseBriefDto databaseToDatabaseBriefDto(Database data); - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index c11a773abc70ade28fdf7aa45845043fafcdd314..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java deleted file mode 100644 index 27706deae379000a1b7fbf4ca6ffcb2941094609..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Identifier; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierRepository extends JpaRepository<Identifier, Long> { -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 7b53e7245983c7ca848da7c1175e0158e2f2a930..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index 42d09c3e9eaecff5b277e10a724ebfb857a91c8b..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - Optional<User> findByUsername(String username); - -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java deleted file mode 100644 index 92efc91f2988d5ab64a0ec889ab98da74dbe8720..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseIdxRepository extends ElasticsearchRepository<Database, Long> { -} \ No newline at end of file diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index 89e0827ad14ccc65af7892800fc8c64936e7f850..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -public interface UserService { - - /** - * Finds a user by username. - * - * @param username The username. - * @return The user, if successfully. - * @throws UserNotFoundException The user with this username was not found in the metadata database. - */ - User findByUsername(String username) throws UserNotFoundException; -} diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 62b9995acbd5c66fa8e48fc8305db81559119795..0000000000000000000000000000000000000000 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to find user with username '{}'", username); - throw new UserNotFoundException("Failed to find user with username '" + username + "'"); - } - return optional.get(); - } - -} diff --git a/dbrepo-data-service/.gitignore b/dbrepo-data-service/.gitignore deleted file mode 100644 index 8bd31f78e3178d45169a8b02df4e04ac8d5b2bed..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -## Cache -ready - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-data-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-data-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-data-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-data-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-data-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-data-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-data-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile deleted file mode 100644 index 6cb15d713add80d5a770c9d616ecc2ec016c95aa..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/Dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV BROKER_USERNAME=fda -ENV BROKER_PASSWORD=fda -ENV SEARCH_USERNAME=admin -ENV SEARCH_PASSWORD=admin -ENV GATEWAY_ENDPOINT=http://gateway-service -ENV LOG_LEVEL=debug -ENV CLIENT_ID="dbrepo-client" -ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./data-service.jar - -EXPOSE 9050 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./data-service.jar"] diff --git a/dbrepo-data-service/README.md b/dbrepo-data-service/README.md deleted file mode 100644 index 459dff58ac32195052d7a97cc918628236656ebb..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Database Service - -## Actuator - -- Actuator Info: http://localhost:9092/actuator/info -- Actuator Health: http://localhost:9092/actuator/health -- Actuator Prometheus: http://localhost:9092/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9092/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9092/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-data-service/mvnw b/dbrepo-data-service/mvnw deleted file mode 100755 index dea2123dccdfdb51caebcfe8e5964494fdeb2a89..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-at.tuwien.gateway.config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-data-service/mvnw.cmd b/dbrepo-data-service/mvnw.cmd deleted file mode 100644 index 2b3a6ff3d00016a977e775944cfe52a58c85f90d..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.at.tuwien.at.tuwien.gateway.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.at.tuwien.at.tuwien.gateway.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml deleted file mode 100644 index fa7abf3041464f3eb2493695323dc11121324f9a..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/pom.xml +++ /dev/null @@ -1,290 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-data-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-data-service</name> - <description>Service that manages the databases</description> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <c3p0.version>0.9.5.5</c3p0.version> - <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <testcontainers.version>1.18.3</testcontainers.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency><!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters --> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Entities and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - </dependency> - <!-- AMQP --> - <dependency> - <groupId>org.springframework.amqp</groupId> - <artifactId>spring-rabbit</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>com.mchange</groupId> - <artifactId>c3p0</artifactId> - <version>${c3p0.version}</version> - </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${c3p0-hibernate.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- Entity, API, QueryStore --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-querystore</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>mariadb</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>rabbitmq</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - <!-- AMPQ --> - <dependency> - <groupId>com.rabbitmq</groupId> - <artifactId>amqp-client</artifactId> - <version>${rabbit-amqp-client.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - <include>**/init/querystore.sql</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>at/tuwien/seeder/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>**/HibernateConnector.class</exclude> - <exclude>**/DbrepoDatabaseManagingApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>default-report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-data-service/ready b/dbrepo-data-service/ready deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-data-service/report/pom.xml b/dbrepo-data-service/report/pom.xml deleted file mode 100644 index aadd87ae6ad8340da6d93fd7268158e3928ece2c..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/report/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-data-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <name>dbrepo-data-service-report</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/pom.xml b/dbrepo-data-service/rest-service/pom.xml deleted file mode 100644 index 2073a9cf799b24eabcdfc6169d3da657a5e62865..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-data-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-data-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#packaging --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/ready b/dbrepo-data-service/rest-service/ready deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DbrepoDataApplication.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DbrepoDataApplication.java deleted file mode 100644 index cf45737d38ac6bfaecb43651ccdb5f6501d5378d..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DbrepoDataApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoDataApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoDataApplication.class, args); - } - -} diff --git a/dbrepo-data-service/rest-service/src/main/resources/application-local.yml b/dbrepo-data-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 670fcb38fbb5a9dfccbc229ae3819882d10e4b39..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,43 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: data-service - cloud: - loadbalancer.ribbon.enabled: false - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9050 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: info - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug diff --git a/dbrepo-data-service/rest-service/src/main/resources/application.yml b/dbrepo-data-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 4f32121016bb599b31c382a9ec0aca54d2990e58..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,58 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: data-service - cloud: - loadbalancer.ribbon.enabled: false - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9050 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/src/main/resources/config.properties b/dbrepo-data-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e993ed9c62272ab86ae23a64f6195f21e465216f..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/main/resources/config.properties +++ /dev/null @@ -1 +0,0 @@ -# https://github.com/Netflix/Hystrix/issues/275 \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml b/dbrepo-data-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml deleted file mode 100644 index 5d1f8bd44e7e2f044e1effb24191f4262d83dd52..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> -<hibernate-configuration> - <session-factory> - <property name="current_session_context_class">thread</property> - <property name="transaction.coordinator_class">jdbc</property> - <property name="c3p0.min_size">5</property> - <property name="c3p0.max_size">30</property> - <property name="c3p0.acquire_increment">5</property> - <property name="c3p0.timeout">1800</property> - <property name="show_sql">true</property> - <property name="format_sql">true</property> - <property name="hbm2ddl.auto">update</property> - <mapping class="at.tuwien.querystore.Query" /> - <mapping class="at.tuwien.querystore.Table" /> - <mapping class="at.tuwien.querystore.Column" /> - </session-factory> -</hibernate-configuration> diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java deleted file mode 100644 index 587927a0703c0bc78a8dc41fb665ac5d02a1d3b4..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.test.BaseTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.images.PullPolicy; - -/** - * This class configures the MariaDB container for the integration tests. - */ -@Configuration -public class MariaDbContainerConfig { - - @Bean - public CustomMariaDBContainer mariaDB() { - return CustomMariaDBContainer.getInstance(); - } - - /** - * This class represents the customized MariaDB container. It is a singleton to avoid the recreation of containers - * which can be very time-consuming. - */ - public static class CustomMariaDBContainer extends MariaDBContainer<CustomMariaDBContainer> { - - private static CustomMariaDBContainer instance; - - public static CustomMariaDBContainer getInstance() { - if(instance == null) { - instance = new CustomMariaDBContainer(BaseTest.IMAGE_1_NAME + ":" + BaseTest.IMAGE_1_VERSION); - instance.withImagePullPolicy(PullPolicy.alwaysPull()); - instance.addFixedExposedPort(BaseTest.CONTAINER_1_PORT, BaseTest.IMAGE_1_PORT); - instance.withUsername(BaseTest.CONTAINER_1_PRIVILEGED_USERNAME); - instance.withPassword(BaseTest.CONTAINER_1_PRIVILEGED_PASSWORD); - instance.withInitScript("init/users.sql"); - } - return instance; - } - - private CustomMariaDBContainer(String dockerImageName) { - super(dockerImageName); - } - - @Override - protected void configure() { - super.configure(); - this.addEnv("MYSQL_USER", "test"); // MariaDB does not allow this to be root - } - - @Override - public void stop() { - // do nothing, JVM handles shut down - } - } -} diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java deleted file mode 100644 index dfb46e8867559a40425978aa6f3f1612cdd3dde2..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ /dev/null @@ -1,131 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.sql.SQLException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@Log4j2 -@Testcontainers -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class DatabaseServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private DatabaseService databaseService; - - @Container - @Autowired - private MariaDBContainer<?> mariaDBContainer; - - @BeforeEach - public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - /* metadata database */ - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - } - - @Test - public void findAll_succeeds() throws DatabaseNotFoundException { - - /* test */ - final List<DatabaseBriefDto> databases = databaseService.findAll(CONTAINER_1); - assertEquals(1, databases.size()); - final DatabaseBriefDto database0 = databases.get(0); - assertEquals(DATABASE_1_INTERNALNAME, database0.getInternalName()); - } - - @Test - public void findAll_multipleOutOfSync_succeeds() throws DatabaseNotFoundException, SQLException { - - /* mock */ - MariaDbConfig.execute(CONTAINER_1, "CREATE DATABASE junit1;"); - MariaDbConfig.execute(CONTAINER_1, "CREATE DATABASE junit2;"); - MariaDbConfig.execute(CONTAINER_1, "CREATE DATABASE junit3;"); - - /* test */ - final List<DatabaseBriefDto> databases = databaseService.findAll(CONTAINER_1); - assertEquals(4, databases.size()); - final DatabaseBriefDto database0 = databases.get(0); - assertEquals("junit1", database0.getInternalName()); - final DatabaseBriefDto database1 = databases.get(1); - assertEquals("junit2", database1.getInternalName()); - final DatabaseBriefDto database2 = databases.get(2); - assertEquals("junit3", database2.getInternalName()); - final DatabaseBriefDto database3 = databases.get(3); - assertEquals(DATABASE_1_INTERNALNAME, database3.getInternalName()); - } - - @Test - public void save_containerMissing_fails() { - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - databaseService.save(DATABASE_2_DTO_BRIEF); - }); - } - - @Test - public void save_succeeds() throws ContainerNotFoundException { - - /* mock */ - containerRepository.save(CONTAINER_2); - - /* test */ - final Database response = databaseService.save(DATABASE_2_DTO_BRIEF); - assertEquals(DATABASE_2_ID, response.getId()); - assertEquals(DATABASE_2_NAME, response.getName()); - assertEquals(DATABASE_2_INTERNALNAME, response.getInternalName()); - assertEquals(DATABASE_2_EXCHANGE, response.getExchangeName()); - } -} diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java deleted file mode 100644 index 7175152884d65c30cc15666ab39e84f84b3c2db3..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ /dev/null @@ -1,183 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.ColumnTypeMalformedException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.transaction.annotation.Transactional; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.sql.SQLException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@Log4j2 -@Testcontainers -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class TableServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private TableService tableService; - - @Container - @Autowired - private MariaDBContainer<?> mariaDBContainer; - - @BeforeEach - public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - /* metadata database */ - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - userRepository.save(USER_2); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - tableRepository.saveAll(List.of(TABLE_1, TABLE_2)); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - } - - @Test - public void findAll_succeeds() throws QueryMalformedException { - - /* test */ - final List<TableBriefDto> tables = tableService.findAll(DATABASE_1); - assertEquals(3, tables.size()); - final TableBriefDto table0 = tables.get(0); - assertEquals(TABLE_7_INTERNAL_NAME, table0.getName()); - assertEquals(TABLE_7_INTERNAL_NAME, table0.getInternalName()); - assertTrue(table0.getIsVersioned()); - final TableBriefDto table1 = tables.get(1); - assertEquals(TABLE_1_INTERNALNAME, table1.getName()); - assertEquals(TABLE_1_INTERNALNAME, table1.getInternalName()); - assertTrue(table1.getIsVersioned()); - final TableBriefDto table2 = tables.get(2); - assertEquals(TABLE_2_INTERNALNAME, table2.getName()); - assertEquals(TABLE_2_INTERNALNAME, table2.getInternalName()); - assertTrue(table2.getIsVersioned()); - } - - @Test - public void findAll_multipleDatabases_succeeds() throws QueryMalformedException, SQLException { - - /* mock */ - MariaDbConfig.execute(DATABASE_1, "CREATE DATABASE `" + DATABASE_2_INTERNALNAME + "`;"); - MariaDbConfig.execute(DATABASE_1, "CREATE TABLE `" + DATABASE_2_INTERNALNAME + "`.`debug` (`id` BIGINT PRIMARY KEY NOT NULL);"); - - /* test */ - final List<TableBriefDto> tables = tableService.findAll(DATABASE_1); - assertEquals(3, tables.size()); - final TableBriefDto table0 = tables.get(0); - assertEquals(TABLE_7_INTERNAL_NAME, table0.getName()); - assertEquals(TABLE_7_INTERNAL_NAME, table0.getInternalName()); - final TableBriefDto table1 = tables.get(1); - assertEquals(TABLE_1_INTERNALNAME, table1.getName()); - assertEquals(TABLE_1_INTERNALNAME, table1.getInternalName()); - final TableBriefDto table2 = tables.get(2); - assertEquals(TABLE_2_INTERNALNAME, table2.getName()); - assertEquals(TABLE_2_INTERNALNAME, table2.getInternalName()); - } - - @Test - @Transactional(readOnly = true) - public void find_succeeds() throws ColumnTypeMalformedException, TableNotFoundException { - - /* test */ - final TableDto response = tableService.find(DATABASE_1, TABLE_1_INTERNALNAME); - assertEquals(TABLE_1_INTERNALNAME, response.getName()); - assertEquals(TABLE_1_INTERNALNAME, response.getInternalName()); - assertEquals(TABLE_1_QUEUE_NAME, response.getQueueName()); - assertEquals(TABLE_1_ROUTING_KEY, response.getRoutingKey()); - assertEquals(TABLE_1_DATABASE_ID, response.getDatabase().getId()); - assertTrue(response.getIsVersioned()); - } - - @Test - @Transactional(readOnly = true) - public void find_full_succeeds() throws ColumnTypeMalformedException, SQLException, TableNotFoundException { - - /* mock */ - MariaDbConfig.execute(DATABASE_1, "CREATE TABLE `full_example` (col1 char(20), col2 varchar(20), col3 binary(20), col4 varbinary(20), col5 tinyblob, col6 tinytext, col7 text, col8 blob(2000), col9 mediumtext, col10 mediumblob, col11 longtext, col12 longblob, col13 enum('enum1','enum2'), col14 set('set1','set2'), col15 bit(20), col16 tinyint(20), col17 bool, col18 boolean, col19 smallint(20), col20 mediumint(20), col21 int(20), col22 integer(20), col23 bigint(20), col24 float(20), col25 float(40), col26 double(20,5), col27 double precision(20,5), col28 decimal(20,5), col29 dec(20,5), col30 date, col31 datetime, col32 timestamp, col33 time, col34 year) WITH SYSTEM VERSIONING;"); - - /* test */ - final TableDto response = tableService.find(DATABASE_1, TABLE_1_INTERNALNAME); - assertEquals(TABLE_1_INTERNALNAME, response.getName()); - assertEquals(TABLE_1_INTERNALNAME, response.getInternalName()); - assertEquals(TABLE_1_QUEUE_NAME, response.getQueueName()); - assertEquals(TABLE_1_ROUTING_KEY, response.getRoutingKey()); - assertEquals(TABLE_1_DATABASE_ID, response.getDatabase().getId()); - assertTrue(response.getIsVersioned()); - } - - @Test - public void find_notFound_fails() { - - /* test */ - assertThrows(TableNotFoundException.class, () -> { - tableService.find(DATABASE_1, "i_d0_n0t_3x1st"); - }); - } - - @Test - public void save_succeeds() { - - /* test */ - final Table response = tableService.save(TABLE_3_DTO); - assertEquals(TABLE_3_ID, response.getId()); - assertEquals(TABLE_3_NAME, response.getName()); - assertEquals(TABLE_3_INTERNALNAME, response.getInternalName()); - assertEquals(TABLE_3_QUEUE_NAME, response.getQueueName()); - assertEquals(TABLE_3_ROUTING_KEY, response.getRoutingKey()); - assertEquals(TABLE_3_DATABASE_ID, response.getTdbid()); - } -} diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java deleted file mode 100644 index b0d29c686b81ac06d969362ec73bd7f58ce62b94..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.sql.SQLException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@Log4j2 -@Testcontainers -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class UserServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private UserService userService; - - @Container - @Autowired - private MariaDBContainer<?> mariaDBContainer; - - @BeforeEach - public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - /* metadata database */ - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - tableRepository.save(TABLE_1); - tableRepository.save(TABLE_2); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - } - - @Test - public void findAll_succeeds() throws UserNotFoundException { - - /* test */ - final List<UserBriefDto> response = userService.findAll(DATABASE_1); - final List<String> expected = List.of("healthcheck", "junit1", "junit2", "junit3", "junit4", "root", "test"); - assertEquals(expected.size(), response.size()); - for (int i = 0; i < response.size(); i++) { - final UserBriefDto user = response.get(i); - assertEquals(expected.get(i), user.getUsername()); - assertNull(user.getEmailVerified()); - } - } - - @Test - public void save_succeeds() { - - /* test */ - final User response = userService.save(USER_1_BRIEF_DTO); - assertEquals(USER_1_USERNAME, response.getUsername()); - assertNull(response.getEmail()); - assertFalse(response.getEnabled()); - assertFalse(response.getEmailVerified()); - } -} diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java deleted file mode 100644 index 84598121612f78bfe64abb2f120b8d9ffc002151..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ /dev/null @@ -1,193 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.exception.*; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.sql.SQLException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@Log4j2 -@Testcontainers -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class ViewServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private ViewService viewService; - - @Container - @Autowired - private MariaDBContainer<?> mariaDBContainer; - - @BeforeEach - public void beforeEach() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - /* metadata database */ - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - tableRepository.save(TABLE_1); - tableRepository.save(TABLE_2); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - } - - @Test - public void findAll_succeeds() throws QueryMalformedException { - - /* test */ - final List<ViewBriefDto> views = viewService.findAll(DATABASE_1); - assertEquals(1, views.size()); - final ViewBriefDto view0 = views.get(0); - assertEquals("hs_weather_aus", view0.getName()); - assertEquals("hs_weather_aus", view0.getInternalName()); - } - - @Test - public void findAll_multipleDatabases_succeeds() throws QueryMalformedException, SQLException { - - /* mock */ - MariaDbConfig.execute(DATABASE_1, "CREATE DATABASE `" + DATABASE_2_INTERNALNAME + "`;"); - MariaDbConfig.execute(DATABASE_1, "CREATE VIEW `" + DATABASE_2_INTERNALNAME + "`.`debug` AS (SELECT 1);"); - - /* test */ - final List<ViewBriefDto> views = viewService.findAll(DATABASE_1); - assertEquals(1, views.size()); - final ViewBriefDto view0 = views.get(0); - assertEquals("hs_weather_aus", view0.getName()); - assertEquals("hs_weather_aus", view0.getInternalName()); - } - - @Test - public void find_succeeds() throws ViewNotFoundException, ColumnTypeMalformedException { - - /* test */ - final ViewDto view = viewService.find(DATABASE_1, "hs_weather_aus"); - assertEquals("hs_weather_aus", view.getInternalName()); - assertEquals(DATABASE_1_CREATOR.getId(), view.getCreatedBy()); - assertNotNull(view.getCreator()); - final List<ColumnDto> columns = view.getColumns(); - assertEquals(4, columns.size()); - final ColumnDto column0 = columns.get(0); - assertEquals("id", column0.getInternalName()); - assertEquals(ColumnTypeDto.BIGINT, column0.getColumnType()); - final ColumnDto column1 = columns.get(1); - assertEquals("inserted_at", column1.getInternalName()); - assertEquals(ColumnTypeDto.TIMESTAMP, column1.getColumnType()); - final ColumnDto column2 = columns.get(2); - assertEquals("deleted_at", column2.getInternalName()); - assertEquals(ColumnTypeDto.TIMESTAMP, column2.getColumnType()); - final ColumnDto column3 = columns.get(3); - assertEquals("total", column3.getInternalName()); - assertEquals(ColumnTypeDto.BIGINT, column3.getColumnType()); - } - - @Test - public void find_full_succeeds() throws ViewNotFoundException, ColumnTypeMalformedException, SQLException { - - /* mock */ - MariaDbConfig.execute(DATABASE_1, "CREATE TABLE `full_example` (col1 char(20), col2 varchar(20), col3 binary(20), col4 varbinary(20), col5 tinyblob, col6 tinytext, col7 text, col8 blob(2000), col9 mediumtext, col10 mediumblob, col11 longtext, col12 longblob, col13 enum('enum1','enum2'), col14 set('set1','set2'), col15 bit(20), col16 tinyint(20), col17 bool, col18 boolean, col19 smallint(20), col20 mediumint(20), col21 int(20), col22 integer(20), col23 bigint(20), col24 float(20), col25 float(40), col26 double(20,5), col27 double precision(20,5), col28 decimal(20,5), col29 dec(20,5), col30 date, col31 datetime, col32 timestamp, col33 time, col34 year);"); - MariaDbConfig.execute(DATABASE_1, "CREATE VIEW `full_view_example` AS (SELECT * FROM `full_example`);"); - - /* test */ - final ViewDto view = viewService.find(DATABASE_1, "full_view_example"); - assertEquals("full_view_example", view.getName()); - assertEquals("full_view_example", view.getInternalName()); - assertEquals(DATABASE_1_CREATOR.getId(), view.getCreatedBy()); - assertNotNull(view.getCreator()); - final List<ColumnDto> columns = view.getColumns(); - assertEquals(34, columns.size()); - final List<ColumnTypeDto> types = List.of(ColumnTypeDto.CHAR, ColumnTypeDto.VARCHAR, ColumnTypeDto.BINARY, ColumnTypeDto.VARBINARY, ColumnTypeDto.TINYBLOB, ColumnTypeDto.TINYTEXT, ColumnTypeDto.TEXT, ColumnTypeDto.BLOB, ColumnTypeDto.MEDIUMTEXT, ColumnTypeDto.MEDIUMBLOB, ColumnTypeDto.LONGTEXT, ColumnTypeDto.LONGBLOB, ColumnTypeDto.ENUM, ColumnTypeDto.SET, ColumnTypeDto.BIT, ColumnTypeDto.TINYINT, ColumnTypeDto.BOOL, ColumnTypeDto.BOOL, ColumnTypeDto.SMALLINT, ColumnTypeDto.MEDIUMINT, ColumnTypeDto.INT, ColumnTypeDto.INT, ColumnTypeDto.BIGINT, ColumnTypeDto.FLOAT, ColumnTypeDto.DOUBLE, ColumnTypeDto.DOUBLE, ColumnTypeDto.DOUBLE, ColumnTypeDto.DECIMAL, ColumnTypeDto.DECIMAL, ColumnTypeDto.DATE, ColumnTypeDto.DATETIME, ColumnTypeDto.TIMESTAMP, ColumnTypeDto.TIME, ColumnTypeDto.YEAR); - for (int i = 0; i < columns.size(); i++) { - final ColumnDto column = columns.get(i); - assertEquals("col" + (i + 1), column.getName()); - assertEquals("col" + (i + 1), column.getInternalName()); - log.trace("column {} has type {}", column.getInternalName(), column.getColumnType()); - assertEquals(types.get(i), column.getColumnType()); - } - } - - @Test - public void find_notFound_fails() { - - /* test */ - assertThrows(ViewNotFoundException.class, () -> { - viewService.find(DATABASE_1, "i_d0_n0t_3x1st"); - }); - } - - @Test - public void save_succeeds() { - - /* test */ - final View response = viewService.save(VIEW_1_DTO); - assertNotNull(response.getName()) /* this is the internal name in the real world outside junit */; - assertEquals(VIEW_1_INTERNAL_NAME, response.getInternalName()); - final List<TableColumn> columns = response.getColumns(); - assertEquals(3, columns.size()); - final TableColumn column0 = columns.get(0); - assertEquals(COLUMN_2_1_INTERNAL_NAME, column0.getInternalName()); - assertEquals(COLUMN_2_1_TYPE, column0.getColumnType()); - final TableColumn column1 = columns.get(1); - assertEquals(COLUMN_2_2_INTERNAL_NAME, column1.getInternalName()); - assertEquals(COLUMN_2_2_TYPE, column1.getColumnType()); - final TableColumn column2 = columns.get(2); - assertEquals(COLUMN_2_3_INTERNAL_NAME, column2.getInternalName()); - assertEquals(COLUMN_2_3_TYPE, column2.getColumnType()); - } -} diff --git a/dbrepo-data-service/rest-service/src/test/resources/application.properties b/dbrepo-data-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 8f66f6a4d8221dc7ed1a2a973ac816e17ccba500..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,33 +0,0 @@ -# enable local spring profile -spring.profiles.active=local,junit - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# logging -logging.level.root=error -logging.level.at.tuwien.=trace - -# rabbitmq -fda.gateway.endpoint=http://localhost:15672 -spring.rabbitmq.host=localhost -spring.rabbitmq.virtual-host=/ -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest - -# elastic -fda.elastic.endpoint=search-mock-service:9200 \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/querystore.sql b/dbrepo-data-service/rest-service/src/test/resources/init/querystore.sql deleted file mode 100644 index fe9c1feb1f6b48863164a4a74c3fa3c5c5c93a72..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/resources/init/querystore.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` ( `id` bigint not null primary key default nextval(`qs_queries_seq`), `created` datetime not null default now(), `executed` datetime not null default now(), `created_by` varchar(255) not null, `query` text not null, `query_normalized` text not null, `is_persisted` boolean not null, `query_hash` varchar(255) not null, `result_hash` varchar(255), `result_number` bigint ); -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255), OUT count BIGINT) BEGIN DECLARE _sql TEXT; SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), ') SEPARATOR \',\'), 256) AS hash, COUNT(*) AS count FROM `', name, '` INTO @hash, @count;') FROM `information_schema`.`columns` WHERE `table_schema` = DATABASE() AND `table_name` = name INTO _sql; PREPARE stmt FROM _sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET hash = @hash; SET count = @count; END; -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; -CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-data-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql b/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql deleted file mode 100644 index 238978ac00ac8d9bc710348790a4a7d00155de60..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql +++ /dev/null @@ -1,194 +0,0 @@ -CREATE DATABASE zoo; -USE zoo; - -create sequence seq_zoo_id; -create sequence seq_names_id; -create table zoo -( - id bigint not null default nextval(`seq_zoo_id`), - animal_name varchar(255) null, - hair tinyint(1) null, - feathers tinyint(1) null, - eggs tinyint(1) null, - milk tinyint(1) null, - airborne tinyint(1) null, - aquatic tinyint(1) null, - predator tinyint(1) null, - toothed tinyint(1) null, - backbone tinyint(1) null, - breathes tinyint(1) null, - venomous tinyint(1) null, - fins tinyint(1) null, - legs bigint null, - tail tinyint(1) null, - domestic tinyint(1) null, - catsize tinyint(1) null, - class_type bigint null, - primary key (id) -) with system versioning; - -create table names -( - id bigint not null default nextval(`seq_names_id`), - firstname varchar(255), - lastname varchar(255), - primary key (id), - unique key (firstname, lastname) -) with system versioning; - -create table likes -( - name_id bigint not null, - zoo_id bigint not null, - primary key (name_id, zoo_id), - foreign key (name_id) references names (id), - foreign key (zoo_id) references zoo (id) -) with system versioning; - -INSERT INTO zoo (id, animal_name, hair, feathers, eggs, milk, airborne, aquatic, predator, toothed, backbone, breathes, - venomous, fins, legs, tail, domestic, catsize, class_type) -VALUES (1, 'aardvark', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (2, 'antelope', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (3, 'bass', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (4, 'bear', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (5, 'boar', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (6, 'buffalo', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (7, 'calf', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (8, 'carp', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 4), - (9, 'catfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (10, 'cavy', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 0, 1, 0, 1), - (11, 'cheetah', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (12, 'chicken', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (13, 'chub', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (14, 'clam', 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7), - (15, 'crab', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7), - (16, 'crayfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (17, 'crow', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (18, 'deer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (19, 'dogfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (20, 'dolphin', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (21, 'dove', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (22, 'duck', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (23, 'elephant', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (24, 'flamingo', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (25, 'flea', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (26, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (27, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, 0, 5), - (28, 'fruitbat', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (29, 'giraffe', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (30, 'girl', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 2, 0, 1, 1, 1), - (31, 'gnat', 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (32, 'goat', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (33, 'gorilla', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 1), - (34, 'gull', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (35, 'haddock', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (36, 'hamster', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 0, 1), - (37, 'hare', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (38, 'hawk', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (39, 'herring', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (40, 'honeybee', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 1, 0, 6), - (41, 'housefly', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (42, 'kiwi', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (43, 'ladybird', 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (44, 'lark', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (45, 'leopard', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (46, 'lion', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (47, 'lobster', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (48, 'lynx', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (49, 'mink', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (50, 'mole', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (51, 'mongoose', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (52, 'moth', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (53, 'newt', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 5), - (54, 'octopus', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 8, 0, 0, 1, 7), - (55, 'opossum', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (56, 'oryx', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (57, 'ostrich', 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (58, 'parakeet', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (59, 'penguin', 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (60, 'pheasant', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (61, 'pike', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (62, 'piranha', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (63, 'pitviper', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 3), - (64, 'platypus', 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (65, 'polecat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (66, 'pony', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (67, 'porpoise', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (68, 'puma', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (69, 'pussycat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (70, 'raccoon', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (71, 'reindeer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (72, 'rhea', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (73, 'scorpion', 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 8, 1, 0, 0, 7), - (74, 'seahorse', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (75, 'seal', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1), - (76, 'sealion', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 2, 1, 0, 1, 1), - (77, 'seasnake', 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 3), - (78, 'seawasp', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 7), - (79, 'skimmer', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (80, 'skua', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (81, 'slowworm', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 3), - (82, 'slug', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (83, 'sole', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (84, 'sparrow', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (85, 'squirrel', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (86, 'starfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7), - (87, 'stingray', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 4), - (88, 'swan', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (89, 'termite', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (90, 'toad', 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (91, 'tortoise', 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 4, 1, 0, 1, 3), - (92, 'tuatara', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 3), - (93, 'tuna', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (94, 'vampire', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (95, 'vole', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (96, 'vulture', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (97, 'wallaby', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 1, 1), - (98, 'wasp', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 0, 0, 6), - (99, 'wolf', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (100, 'worm', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (101, 'wren', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2); - -INSERT INTO names (firstname, lastname) -VALUES ('Moritz', 'Staudinger'), - ('Martin', 'Weise'), - ('Eva', 'Gergely'), - ('Cornelia', 'Michlits'), - ('Kirill', 'Stytsenko'); - -INSERT INTO likes (name_id, zoo_id) -VALUES (1, 5), - (1, 10), - (2, 3), - (2, 80), - (3, 4), - (4, 4), - (5, 100); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW mock_view AS -( -SELECT `id`, - `animal_name`, - `hair`, - `feathers`, - `eggs`, - `milk`, - `airborne`, - `aquatic`, - `predator`, - `toothed`, - `backbone`, - `breathes`, - `venomous`, - `fins`, - `legs`, - `tail`, - `domestic`, - `catsize`, - `class_type` -FROM `zoo` -WHERE `class_type` = 1); diff --git a/dbrepo-data-service/services/pom.xml b/dbrepo-data-service/services/pom.xml deleted file mode 100644 index 02d00a498bab8cd80e0098d40c00832d5b497a0a..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-data-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>services</artifactId> - <version>1.3.0</version> - <name>dbrepo-data-service-services</name> - -</project> \ No newline at end of file diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index 4fd872fc8687f765fef77064e68fcc6816583c5c..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.config; - -import lombok.Getter; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.client.RestTemplate; - -@Getter -@Configuration -public class GatewayConfig { - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - return new RestTemplate(); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-data-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-data-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/AmqpException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/AmqpException.java deleted file mode 100644 index 6af0750d6f5089a8442a7159eac2076462df2825..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/AmqpException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE) -public class AmqpException extends Exception { - - public AmqpException(String msg) { - super(msg); - } - - public AmqpException(String msg, Throwable thr) { - super(msg, thr); - } - - public AmqpException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ColumnTypeMalformedException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ColumnTypeMalformedException.java deleted file mode 100644 index 119b92289c14cf20b69fbb3154d8adb94f33c8c2..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ColumnTypeMalformedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class ColumnTypeMalformedException extends IOException { - - public ColumnTypeMalformedException(String msg) { - super(msg); - } - - public ColumnTypeMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public ColumnTypeMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java deleted file mode 100644 index f0ba3be868978e3c72d3dcffefd4f662e0dccbd9..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Container not found") -public class ContainerNotFoundException extends Exception { - - public ContainerNotFoundException(String message) { - super(message); - } - - public ContainerNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public ContainerNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java deleted file mode 100644 index 2970fc77c3ffce6a1c511de858a82f8ecd492654..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) -public class DatabaseConnectionException extends IOException { - - public DatabaseConnectionException(String msg) { - super(msg); - } - - public DatabaseConnectionException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseConnectionException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java deleted file mode 100644 index 0c1644ac232a96d88971b4e2ee0f94918f0396ce..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Database not found") -public class DatabaseNotFoundException extends Exception { - - public DatabaseNotFoundException(String message) { - super(message); - } - - public DatabaseNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public DatabaseNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java deleted file mode 100644 index e381d847b0c459fae2b4d9d35229f842e1c4e346..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class IdentifierNotFoundException extends Exception { - - public IdentifierNotFoundException(String message) { - super(message); - } - - public IdentifierNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public IdentifierNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java deleted file mode 100644 index 26aaa828d3289c80bef86aab32d914e9d635c32f..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_IMPLEMENTED, reason = "image not supported") -public class ImageNotSupportedException extends Exception { - - public ImageNotSupportedException(String message) { - super(message); - } - - public ImageNotSupportedException(String message, Throwable thr) { - super(message, thr); - } - - public ImageNotSupportedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java deleted file mode 100644 index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class NotAllowedException extends Exception { - - public NotAllowedException(String msg) { - super(msg); - } - - public NotAllowedException(String msg, Throwable thr) { - super(msg, thr); - } - - public NotAllowedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java deleted file mode 100644 index 30eae62a9cfd8375b6de90538f1f117a2ad52d2f..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Table not found") -public class TableNotFoundException extends Exception { - - public TableNotFoundException(String message) { - super(message); - } - - public TableNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public TableNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index 0abb87f609f0a6706c8e499eabc23e3d46d3304d..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found") -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String message) { - super(message); - } - - public UserNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ViewNameExistsException.java b/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ViewNameExistsException.java deleted file mode 100644 index 2ce0f04b9bdc802de3e79edb9760abd9b60b7059..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ViewNameExistsException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.CONFLICT) -public class ViewNameExistsException extends IOException { - - public ViewNameExistsException(String msg) { - super(msg); - } - - public ViewNameExistsException(String msg, Throwable thr) { - super(msg, thr); - } - - public ViewNameExistsException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java deleted file mode 100644 index e186d7769476cbccf4a2238e8d34b5b19c23f8ba..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.entities.database.Database; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface DatabaseMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class); - - DatabaseDto databaseToDatabaseDto(Database data); - - @Mappings({ - @Mapping(target = "cid", source = "container.id"), - @Mapping(target = "exchangeName", expression = "java(\"dbrepo.\" + data.getInternalName())") - }) - Database databaseBriefDtoToDatabase(DatabaseBriefDto data); - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java deleted file mode 100644 index a61ef684f8ac231afbbb10f4b583977cdc4d6846..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java +++ /dev/null @@ -1,196 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.ColumnTypeMalformedException; -import org.mapstruct.Mapper; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.LinkedList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -@Mapper(componentModel = "spring") -public interface QueryMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(QueryMapper.class); - - default String findAllViewsQuery(Database database) { - return "SELECT TABLE_NAME as internal_name FROM information_schema.TABLES WHERE TABLE_SCHEMA = '" + database.getInternalName() + "' AND TABLE_TYPE = 'VIEW' ORDER BY TABLE_NAME ASC;"; - } - - default String findAllTablesQuery(Database database) { - return "SELECT TABLE_NAME as internal_name, IF(TABLE_TYPE = 'SYSTEM VERSIONED', true, false) as is_versioned FROM information_schema.TABLES WHERE TABLE_SCHEMA = '" + database.getInternalName() + "' AND TABLE_NAME != 'qs_queries' AND (TABLE_TYPE = 'BASE TABLE' OR TABLE_TYPE = 'SYSTEM VERSIONED') ORDER BY TABLE_NAME ASC;"; - } - - default String findTableQuery(Database database, String name) { - return "SELECT TABLE_NAME as internal_name, IF(TABLE_TYPE = 'SYSTEM VERSIONED', true, false) as is_versioned FROM information_schema.TABLES WHERE TABLE_SCHEMA = '" + database.getInternalName() + "' AND TABLE_NAME = '" + name + "' ORDER BY TABLE_NAME ASC;"; - } - - default String findAllUsersQuery() { - return "SELECT DISTINCT user as username FROM mysql.user WHERE user != 'mariadb.sys' ORDER BY user ASC"; - } - - default String findAllDatabasesQuery() { - return "SELECT SCHEMA_NAME as internal_name FROM SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'performance_schema', 'mysql') ORDER BY SCHEMA_NAME ASC"; - } - - default String findColumnsForTable(Database database, String name) { - return "SHOW COLUMNS FROM `" + name + "`;"; - } - - default List<ViewBriefDto> resultSetToViewDtoList(ResultSet result) throws SQLException { - log.trace("mapping result list to view list result, result={}", result); - final List<ViewBriefDto> views = new LinkedList<>(); - while (result.next()) { - final ViewBriefDto view = ViewBriefDto.builder() - .name(result.getString("internal_name")) - .internalName(result.getString("internal_name")) - .build(); - views.add(view); - } - log.trace("mapped result list {} to view list {}", result, views); - return views; - } - - default List<TableBriefDto> resultSetToTableDtoList(ResultSet result) throws SQLException { - log.trace("mapping result list to table list result, result={}", result); - final List<TableBriefDto> tables = new LinkedList<>(); - while (result.next()) { - final TableBriefDto table = TableBriefDto.builder() - .name(result.getString("internal_name")) - .internalName(result.getString("internal_name")) - .isVersioned(result.getBoolean("is_versioned")) - .build(); - tables.add(table); - } - log.trace("mapped result list {} to table list {}", result, tables); - return tables; - } - - default List<DatabaseBriefDto> resultSetToDatabaseDtoList(ResultSet result) throws SQLException { - log.trace("mapping result list to database list result, result={}", result); - final List<DatabaseBriefDto> databases = new LinkedList<>(); - while (result.next()) { - final DatabaseBriefDto database = DatabaseBriefDto.builder() - .name(result.getString("internal_name")) - .internalName(result.getString("internal_name")) - .build(); - databases.add(database); - } - log.trace("mapped result list {} to database list {}", result, databases); - return databases; - } - - default ViewDto resultSetToViewDto(ResultSet result, String name) throws SQLException, - ColumnTypeMalformedException { - log.trace("mapping result list to view result, result={}", result); - final ViewDto view = ViewDto.builder() - .name(name) - .internalName(name) - .build(); - final List<ColumnDto> columns = new LinkedList<>(); - while (result.next()) { - final ColumnDto column = ColumnDto.builder() - .name(result.getString("Field")) - .internalName(result.getString("Field")) - .columnType(typetoColumnTypeDto(result.getString("Type"))) - .isNullAllowed(nullToBoolean(result.getString("Null"))) - .build(); - columns.add(column); - } - view.setColumns(columns); - log.trace("mapped result list {} to view {}", result, view); - return view; - } - - default TableDto resultSetToTableDto(ResultSet result, String name) throws SQLException, - ColumnTypeMalformedException { - log.trace("mapping result list to table result, result={}", result); - final TableDto table = TableDto.builder() - .name(name) - .internalName(name) - .build(); - final List<ColumnDto> columns = new LinkedList<>(); - while (result.next()) { - final ColumnDto column = ColumnDto.builder() - .name(result.getString("Field")) - .internalName(result.getString("Field")) - .columnType(typetoColumnTypeDto(result.getString("Type"))) - .isNullAllowed(nullToBoolean(result.getString("Null"))) - .build(); - columns.add(column); - } - table.setColumns(columns); - log.trace("mapped result list {} to table {}", result, table); - return table; - } - - default List<UserBriefDto> resultSetToUserDtoList(ResultSet result) throws SQLException { - log.trace("mapping result list to user result, result={}", result); - final List<UserBriefDto> users = new LinkedList<>(); - while (result.next()) { - final UserBriefDto user = UserBriefDto.builder() - .username(result.getString("username")) - .build(); - users.add(user); - } - log.trace("mapped result list {} to user list {}", result, users); - return users; - } - - default ColumnTypeDto typetoColumnTypeDto(String data) throws ColumnTypeMalformedException { - if (data.toUpperCase().startsWith("TINYINT(1)")) { - /* boolean in MySQL */ - return ColumnTypeDto.BOOL; - } - final Matcher matcher = Pattern.compile("([A-Z]+)") - .matcher(data.toUpperCase()); - if (!matcher.find()) { - log.error("Failed to map type: does not match expected format"); - throw new ColumnTypeMalformedException("Failed to map type: does not match expected format"); - } - final String type = matcher.group(1); - try { - return ColumnTypeDto.valueOf(type); - } catch (IllegalArgumentException e) { - if (type.startsWith("TINYINT")) { - /* boolean in MySQL */ - return ColumnTypeDto.BOOL; - } else if (type.startsWith("BOOL")) { - /* boolean */ - return ColumnTypeDto.BOOL; - } else if (type.startsWith("DOUBLE")) { - /* double precision */ - return ColumnTypeDto.DOUBLE; - } else if (type.startsWith("INT")) { - /* integer synonym */ - return ColumnTypeDto.INT; - } else if (type.startsWith("DEC")) { - /* decimal synonym */ - return ColumnTypeDto.DECIMAL; - } else if (type.startsWith("ENUM")) { - return ColumnTypeDto.ENUM; - } else if (type.startsWith("SET")) { - return ColumnTypeDto.SET; - } - } - log.error("Failed to map data {} and type {}", data, type); - throw new ColumnTypeMalformedException("Failed to map data " + data + " and type " + type); - } - - default Boolean nullToBoolean(String data) { - return data.equalsIgnoreCase("yes"); - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index eaed288de378d0cb9a3fc932e6093f784e662b06..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.user.User; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - - UserDto userToUserDto(User data); - - User userBriefDtoToUser(UserBriefDto data); - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java deleted file mode 100644 index ea06c2b170df4eddf56cecc10dd8dff91ee5bd25..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring", uses = {DatabaseMapper.class, UserMapper.class}) -public interface ViewMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ViewMapper.class); - - View viewDtoToView(ViewDto data); - - @Mappings({ - @Mapping(target = "constraints", ignore = true), - @Mapping(target = "tdbid", source = "database.id"), - }) - Table tableDtoToTable(TableDto data); - - @Mappings({ - @Mapping(target = "table.id", source = "tableId"), - @Mapping(target = "dateFormat", ignore = true) - }) - TableColumn columnDtoToTableColumn(ColumnDto data); - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index f41d2aa3fae70608ac913bde9ae299d57ce5b0a4..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java deleted file mode 100644 index 5f4467c0ced3cb05cd8b9e8e32ae06ab24758629..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.DatabaseAccessKey; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index c11a773abc70ade28fdf7aa45845043fafcdd314..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java deleted file mode 100644 index 23883215860e412b4136030f1308918bab91972b..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Identifier; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierRepository extends JpaRepository<Identifier, Long> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index b1020fdcc532602d72cad5018b964edec4f25eea..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java deleted file mode 100644 index ef3472077dd9cdd359d61509690c6ce57dfcdc6c..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.License; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface LicenseRepository extends JpaRepository<License, String> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index bd985254a5e2c6c5d42679754f5c164f975ff2ac..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java deleted file mode 100644 index 004f202d036ccec03c8ccaf10d206b70ed50922a..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumn; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableColumnRepository extends JpaRepository<TableColumn, Long> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index 3d0057f9f93d17adf73498aac29b4ef4e32d1d29..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index 42d09c3e9eaecff5b277e10a724ebfb857a91c8b..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - Optional<User> findByUsername(String username); - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java b/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java deleted file mode 100644 index b16b038367559c7ac1740c607bc6478ba140a620..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.View; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface ViewRepository extends JpaRepository<View, Long> { - - Optional<View> findByInternalName(String internalName); - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java deleted file mode 100644 index b531d3e0e3557f778ec7f68029dc62a1a066bd81..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.DatabaseNotFoundException; - -import java.util.List; - -public interface DatabaseService { - - List<DatabaseBriefDto> findAll(Container container) throws DatabaseNotFoundException; - - Database save(DatabaseBriefDto data) throws ContainerNotFoundException; -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java deleted file mode 100644 index ea1651893af2eb418cb96f3e9b30a1297368a3e1..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.ColumnTypeMalformedException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableNotFoundException; - -import java.util.List; - -public interface TableService { - - List<TableBriefDto> findAll(Database database) throws QueryMalformedException; - - TableDto find(Database database, String name) throws TableNotFoundException, ColumnTypeMalformedException; - - Table save(TableDto data); -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index d32bb477e0d1d27dcbe3e3019ff26e54a9548161..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -import java.util.List; - -public interface UserService { - - List<UserBriefDto> findAll(Database database) throws UserNotFoundException; - - User save(UserBriefDto data); -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java deleted file mode 100644 index c1c989747e376d39eaeff9806bc665e9547ac3f5..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.exception.ColumnTypeMalformedException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.ViewNotFoundException; - -import java.util.List; - -public interface ViewService { - - List<ViewBriefDto> findAll(Database database) throws QueryMalformedException; - - ViewDto find(Database database, String name) throws ViewNotFoundException, ColumnTypeMalformedException; - - View save(ViewDto data); -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java deleted file mode 100644 index d9fe8f2697fcd41919de744edf6fccf8c6d189a2..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ /dev/null @@ -1,74 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.mapper.QueryMapper; -import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.service.DatabaseService; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.jpa.JpaObjectRetrievalFailureException; -import org.springframework.stereotype.Service; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -@Log4j2 -@Service -public class DatabaseServiceImpl extends HibernateConnector implements DatabaseService { - - private final QueryMapper queryMapper; - private final DatabaseMapper databaseMapper; - private final DatabaseRepository databaseRepository; - - @Autowired - public DatabaseServiceImpl(QueryMapper queryMapper, DatabaseMapper databaseMapper, - DatabaseRepository databaseRepository) { - this.queryMapper = queryMapper; - this.databaseMapper = databaseMapper; - this.databaseRepository = databaseRepository; - } - - @Override - public List<DatabaseBriefDto> findAll(Container container) throws DatabaseNotFoundException { - final Database informationSchema = Database.builder() - .internalName("INFORMATION_SCHEMA") - .build(); - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(container.getImage(), container, informationSchema); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = prepareStatement(connection, queryMapper.findAllDatabasesQuery()); - final ResultSet resultSet = preparedStatement.executeQuery(); - return queryMapper.resultSetToDatabaseDtoList(resultSet); - } catch (SQLException | QueryMalformedException e) { - log.error("Failed to find databases from container with id {}: {}", container.getId(), e.getMessage()); - throw new DatabaseNotFoundException("Failed to find databases from container with id " + container.getId() + ": " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - - @Override - public Database save(DatabaseBriefDto data) throws ContainerNotFoundException { - final Database mapped = databaseMapper.databaseBriefDtoToDatabase(data); - try { - final Database database = databaseRepository.save(mapped); - log.info("Saved database with id {}", database.getId()); - return database; - } catch (JpaObjectRetrievalFailureException e) { - log.error("Failed to save database: {}", e.getMessage()); - throw new ContainerNotFoundException("Failed to save database: " + e.getMessage(), e); - } - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java deleted file mode 100644 index 55a48bfd5d852afa09a5214fd5070afe7cacd294..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java +++ /dev/null @@ -1,79 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.QueryMalformedException; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.stereotype.Service; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -@Log4j2 -@Service -public abstract class HibernateConnector { - - public static ComboPooledDataSource getPrivilegedDataSource(ContainerImage image, Container container) { - return getPrivilegedDataSource(image, container, null); - } - - public static ComboPooledDataSource getPrivilegedDataSource(ContainerImage image, Container container, Database database) { - final ComboPooledDataSource dataSource = new ComboPooledDataSource(); - dataSource.setJdbcUrl(url(image, container, database)); - dataSource.setUser(container.getPrivilegedUsername()); - dataSource.setPassword(container.getPrivilegedPassword()); - dataSource.setInitialPoolSize(5); - dataSource.setMinPoolSize(5); - dataSource.setAcquireIncrement(5); - dataSource.setMaxPoolSize(20); - dataSource.setMaxStatements(100); - log.trace("created pooled data source {}", dataSource); - return dataSource; - } - - public static ComboPooledDataSource getDataSource(ContainerImage image, Container container, Database database, String username, String password) { - final ComboPooledDataSource dataSource = new ComboPooledDataSource(); - dataSource.setJdbcUrl(url(image, container, database)); - dataSource.setUser(username); - dataSource.setPassword(password); - dataSource.setInitialPoolSize(5); - dataSource.setMinPoolSize(5); - dataSource.setAcquireIncrement(5); - dataSource.setMaxPoolSize(20); - dataSource.setMaxStatements(100); - log.trace("created pooled data source {}", dataSource); - return dataSource; - } - - private static String url(ContainerImage image, Container container, Database database) { - final StringBuilder stringBuilder = new StringBuilder("jdbc:") - .append(image.getJdbcMethod()) - .append("://") - .append(container.getHost()) - .append(":") - .append(container.getPort()) - .append("/"); - if (database != null) { - stringBuilder.append(database.getInternalName()) - .append("?currentSchema=") - .append(database.getInternalName()); - } - - log.debug("connecting via jdbc, url={}", stringBuilder); - return stringBuilder.toString(); - } - - public PreparedStatement prepareStatement(Connection connection, String statement) throws QueryMalformedException { - try { - return connection.prepareStatement(statement); - } catch (SQLException e) { - log.error("Failed to prepare statement {}m reason: {}", statement, e.getMessage()); - throw new QueryMalformedException("Failed to prepare statement", e); - } - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java deleted file mode 100644 index 68c136cffd6a30da2463ff70f449b54fa7418406..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ /dev/null @@ -1,108 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.ColumnTypeMalformedException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.mapper.QueryMapper; -import at.tuwien.mapper.UserMapper; -import at.tuwien.mapper.ViewMapper; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.service.TableService; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -@Log4j2 -@Service -public class TableServiceImpl extends HibernateConnector implements TableService { - - private final UserMapper userMapper; - private final ViewMapper viewMapper; - private final QueryMapper queryMapper; - private final DatabaseMapper databaseMapper; - private final TableRepository tableRepository; - - @Autowired - public TableServiceImpl(UserMapper userMapper, ViewMapper viewMapper, QueryMapper queryMapper, - DatabaseMapper databaseMapper, TableRepository tableRepository) { - this.userMapper = userMapper; - this.viewMapper = viewMapper; - this.queryMapper = queryMapper; - this.databaseMapper = databaseMapper; - this.tableRepository = tableRepository; - } - - @Override - public List<TableBriefDto> findAll(Database database) throws QueryMalformedException { - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = prepareStatement(connection, queryMapper.findAllTablesQuery(database)); - final ResultSet resultSet = preparedStatement.executeQuery(); - return queryMapper.resultSetToTableDtoList(resultSet); - } catch (SQLException | QueryMalformedException e) { - log.error("Failed to find tables: {}", e.getMessage()); - throw new QueryMalformedException("Failed to find tables: " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - - @Override - public TableDto find(Database database, String name) throws TableNotFoundException, ColumnTypeMalformedException { - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement1 = prepareStatement(connection, queryMapper.findColumnsForTable(database, name)); - final ResultSet resultSet1 = preparedStatement1.executeQuery(); - final TableDto dto = queryMapper.resultSetToTableDto(resultSet1, name); - dto.setDatabase(databaseMapper.databaseToDatabaseDto(database)); - dto.setCreator(userMapper.userToUserDto(database.getCreator())); - dto.setCreatedBy(userMapper.userToUserDto(database.getCreator()).getId()); - dto.setQueueName("dbrepo." + database.getInternalName() + "." + dto.getInternalName()); - dto.setRoutingKey(dto.getQueueName()); - final PreparedStatement preparedStatement2 = prepareStatement(connection, queryMapper.findTableQuery(database, name)); - final ResultSet resultSet2 = preparedStatement2.executeQuery(); - resultSet2.next(); - dto.setIsVersioned(resultSet2.getBoolean("is_versioned")); - return dto; - } catch (SQLException | QueryMalformedException e) { - log.error("Failed to find table with name {}: {}", name, e.getMessage()); - throw new TableNotFoundException("Failed to find table with name " + name + ": " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - - @Override - public Table save(TableDto data) { - final int[] idx = new int[]{0}; - final Table mapped = viewMapper.tableDtoToTable(data); - mapped.setColumns(mapped.getColumns() - .stream() - .peek(c -> c.setOrdinalPosition(idx[0]++)) - .toList()); - /* save */ - final Table table = tableRepository.save(mapped); - log.info("Saved table with id {}", table.getId()); - return table; - } - -} - diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 9ef45f4be76a13b7426c04e976b16ffac0fc2f5f..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.mapper.QueryMapper; -import at.tuwien.mapper.UserMapper; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -@Log4j2 -@Service -public class UserServiceImpl extends HibernateConnector implements UserService { - - private final UserMapper userMapper; - private final QueryMapper queryMapper; - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserMapper userMapper, QueryMapper queryMapper, UserRepository userRepository) { - this.userMapper = userMapper; - this.queryMapper = queryMapper; - this.userRepository = userRepository; - } - - @Override - public List<UserBriefDto> findAll(Database database) throws UserNotFoundException { - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = prepareStatement(connection, queryMapper.findAllUsersQuery()); - final ResultSet resultSet = preparedStatement.executeQuery(); - return queryMapper.resultSetToUserDtoList(resultSet); - } catch (SQLException | QueryMalformedException e) { - log.error("Failed to find users from database with id {}: {}", database.getId(), e.getMessage()); - throw new UserNotFoundException("Failed to find users from database with id " + database.getId() + ": " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - - @Override - public User save(UserBriefDto data) { - final User mapped = userMapper.userBriefDtoToUser(data); - mapped.setEmailVerified(false); - mapped.setEnabled(false); - final User user = userRepository.save(mapped); - log.info("Saved user with id {}", user.getId()); - return user; - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java deleted file mode 100644 index 5d97435f568f20be057245ebd58df0a64ff80c0b..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ /dev/null @@ -1,101 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.exception.ColumnTypeMalformedException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.ViewNotFoundException; -import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.mapper.QueryMapper; -import at.tuwien.mapper.UserMapper; -import at.tuwien.mapper.ViewMapper; -import at.tuwien.repository.mdb.ViewRepository; -import at.tuwien.service.ViewService; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -@Log4j2 -@Service -public class ViewServiceImpl extends HibernateConnector implements ViewService { - - private final UserMapper userMapper; - private final ViewMapper viewMapper; - private final QueryMapper queryMapper; - private final DatabaseMapper databaseMapper; - private final ViewRepository viewRepository; - - @Autowired - public ViewServiceImpl(UserMapper userMapper, ViewMapper viewMapper, QueryMapper queryMapper, - DatabaseMapper databaseMapper, ViewRepository viewRepository) { - this.userMapper = userMapper; - this.viewMapper = viewMapper; - this.queryMapper = queryMapper; - this.databaseMapper = databaseMapper; - this.viewRepository = viewRepository; - } - - @Override - public List<ViewBriefDto> findAll(Database database) throws QueryMalformedException { - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = prepareStatement(connection, queryMapper.findAllViewsQuery(database)); - final ResultSet resultSet = preparedStatement.executeQuery(); - return queryMapper.resultSetToViewDtoList(resultSet); - } catch (SQLException | QueryMalformedException e) { - log.error("Failed to find views: {}", e.getMessage()); - throw new QueryMalformedException("Failed to find views: " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - - @Override - public ViewDto find(Database database, String name) throws ViewNotFoundException, ColumnTypeMalformedException { - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = prepareStatement(connection, queryMapper.findColumnsForTable(database, name)); - final ResultSet resultSet = preparedStatement.executeQuery(); - final ViewDto dto = queryMapper.resultSetToViewDto(resultSet, name); - dto.setDatabase(databaseMapper.databaseToDatabaseDto(database)); - dto.setCreator(userMapper.userToUserDto(database.getCreator())); - dto.setCreatedBy(userMapper.userToUserDto(database.getCreator()).getId()); - return dto; - } catch (SQLException | QueryMalformedException e) { - log.error("Failed to find view with name {}: {}", name, e.getMessage()); - throw new ViewNotFoundException("Failed to find view with name " + name + ": " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - - @Override - public View save(ViewDto data) { - final int[] idx = new int[]{0}; - final View mapped = viewMapper.viewDtoToView(data); - mapped.setColumns(mapped.getColumns() - .stream() - .peek(c -> c.setOrdinalPosition(idx[0]++)) - .toList()); - /* save */ - final View view = viewRepository.save(mapped); - log.info("Saved view with id {}", view.getId()); - return view; - } - -} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/utils/FileUtil.java b/dbrepo-data-service/services/src/main/java/at/tuwien/utils/FileUtil.java deleted file mode 100644 index 54831e79e633470b4d29e2350f13f314696e8404..0000000000000000000000000000000000000000 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/utils/FileUtil.java +++ /dev/null @@ -1,35 +0,0 @@ -package at.tuwien.utils; - -import lombok.extern.log4j.Log4j2; - -import java.io.*; -import java.util.LinkedList; -import java.util.List; - -@Log4j2 -public class FileUtil { - - /** - * Loads a resource from the resource path when the application is compiled into a .jar and during runtime. - * - * @param resourcePath The path to the resource. - * @return The text contents of the resource. - * @throws IOException The resource could not be loaded. - */ - public static List<String> loadResource(String resourcePath) throws IOException { - final InputStream inputStream = FileUtil.class.getResourceAsStream(resourcePath); - if (inputStream == null) { - log.error("Failed to load query store input stream file {}", resourcePath); - throw new IOException("Failed to load query store input stream file"); - } - final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - final List<String> lines = new LinkedList<>(); - while(reader.ready()) { - lines.add(reader.readLine()); - } - inputStream.close(); - reader.close(); - return lines; - } - -} diff --git a/dbrepo-database-service/.gitignore b/dbrepo-database-service/.gitignore deleted file mode 100644 index 8bd31f78e3178d45169a8b02df4e04ac8d5b2bed..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -## Cache -ready - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-database-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-database-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-database-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-database-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-database-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-database-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-database-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-database-service/Dockerfile b/dbrepo-database-service/Dockerfile deleted file mode 100644 index 169effd64c0a39de3e680eaefebad73a25b3f4de..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/Dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV BROKER_USERNAME=fda -ENV BROKER_PASSWORD=fda -ENV SEARCH_USERNAME=admin -ENV SEARCH_PASSWORD=admin -ENV GATEWAY_ENDPOINT=http://gateway-service -ENV LOG_LEVEL=debug -ENV CLIENT_ID="dbrepo-client" -ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./database-service.jar - -EXPOSE 9092 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./database-service.jar"] diff --git a/dbrepo-database-service/README.md b/dbrepo-database-service/README.md deleted file mode 100644 index 459dff58ac32195052d7a97cc918628236656ebb..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Database Service - -## Actuator - -- Actuator Info: http://localhost:9092/actuator/info -- Actuator Health: http://localhost:9092/actuator/health -- Actuator Prometheus: http://localhost:9092/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9092/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9092/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-database-service/mvnw b/dbrepo-database-service/mvnw deleted file mode 100755 index dea2123dccdfdb51caebcfe8e5964494fdeb2a89..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-at.tuwien.gateway.config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-database-service/mvnw.cmd b/dbrepo-database-service/mvnw.cmd deleted file mode 100644 index 2b3a6ff3d00016a977e775944cfe52a58c85f90d..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.at.tuwien.at.tuwien.gateway.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.at.tuwien.at.tuwien.gateway.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-database-service/pom.xml b/dbrepo-database-service/pom.xml deleted file mode 100644 index 830d95dc2d0a2773c7155b906a611fafd5e24857..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/pom.xml +++ /dev/null @@ -1,290 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-database-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-database-service</name> - <description>Service that manages the databases</description> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <c3p0.version>0.9.5.5</c3p0.version> - <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <testcontainers.version>1.18.3</testcontainers.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency><!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters --> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Entities and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - </dependency> - <!-- AMQP --> - <dependency> - <groupId>org.springframework.amqp</groupId> - <artifactId>spring-rabbit</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>com.mchange</groupId> - <artifactId>c3p0</artifactId> - <version>${c3p0.version}</version> - </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${c3p0-hibernate.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- Entity, API, QueryStore --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-querystore</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>mariadb</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>rabbitmq</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - <!-- AMPQ --> - <dependency> - <groupId>com.rabbitmq</groupId> - <artifactId>amqp-client</artifactId> - <version>${rabbit-amqp-client.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - <include>**/init/querystore.sql</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>at/tuwien/seeder/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>**/HibernateConnector.class</exclude> - <exclude>**/DbrepoDatabaseManagingApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>default-report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-database-service/report/pom.xml b/dbrepo-database-service/report/pom.xml deleted file mode 100644 index f6090d5b73651ea0af5aa46aa3c3d7a0821d72d4..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/report/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-database-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <name>dbrepo-database-service-report</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/pom.xml b/dbrepo-database-service/rest-service/pom.xml deleted file mode 100644 index e6b1ca623e2dc297dd15b5ad319c4a8d91a355ec..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-database-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-database-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#packaging --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseApplication.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseApplication.java deleted file mode 100644 index 7cef05f7787fae9080f2f9078843e25c4f4fa2d1..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoDatabaseApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoDatabaseApplication.class, args); - } - -} diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index de68a599f062395e21918952b220fcfb2c376036..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.servers.Server; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository Database Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the databases") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Sourcecode Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services")) - .servers(List.of(new Server() - .description("Generated server url") - .url("http://localhost:9092"), - new Server() - .description("Sandbox") - .url("https://dbrepo2.tuwien.ac.at"))); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("database-service") - .pathsToMatch("/api/**") - .build(); - } - -} diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index a9193b94f5e4780e1cbadaf42b8a2d787a44d51d..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,258 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.FORBIDDEN) - @ExceptionHandler(AccessDeniedException.class) - public ResponseEntity<ApiErrorDto> handle(AccessDeniedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.FORBIDDEN) - .message(e.getLocalizedMessage()) - .code("error.database.access") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(AmqpException.class) - public ResponseEntity<ApiErrorDto> handle(AmqpException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.amqp") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(BrokerMalformedException.class) - public ResponseEntity<ApiErrorDto> handle(BrokerMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.database.broker") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) - @ExceptionHandler(BrokerVirtualHostCreationException.class) - public ResponseEntity<ApiErrorDto> handle(BrokerVirtualHostCreationException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_ACCEPTABLE) - .message(e.getLocalizedMessage()) - .code("error.database.virtualhostcreate") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(BrokerVirtualHostGrantException.class) - public ResponseEntity<ApiErrorDto> handle(BrokerVirtualHostGrantException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.database.virtualhostgrant") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) - @ExceptionHandler(ContainerConnectionException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerConnectionException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.SERVICE_UNAVAILABLE) - .message(e.getLocalizedMessage()) - .code("error.database.containerconnection") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(ContainerNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.containernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.EXPECTATION_FAILED) - @ExceptionHandler(ContainerUnauthorizedException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerUnauthorizedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.EXPECTATION_FAILED) - .message(e.getLocalizedMessage()) - .code("error.database.containerunauthorized") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(DatabaseConnectionException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseConnectionException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.database.databaseconnection") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(DatabaseMalformedException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.database.databasemalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(DatabaseNameExistsException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseNameExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.database.databasenameexists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(DatabaseNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.databasenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(IdentifierNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.identifiernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_IMPLEMENTED) - @ExceptionHandler(ImageNotSupportedException.class) - public ResponseEntity<ApiErrorDto> handle(ImageNotSupportedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_IMPLEMENTED) - .message(e.getLocalizedMessage()) - .code("error.database.imagenotsupported") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(LicenseNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(LicenseNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.licensenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(NotAllowedException.class) - public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.database.notallowed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(QueryMalformedException.class) - public ResponseEntity<ApiErrorDto> handle(QueryMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.database.querymalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(QueryStoreException.class) - public ResponseEntity<ApiErrorDto> handle(QueryStoreException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.database.querystore") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(SubjectNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(SubjectNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.subjectnotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(UserNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.database.usernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/resources/application-local.yml b/dbrepo-database-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index ba39e4baeaf4301c9da3552ae2e8eae43dd02357..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,55 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: database-service - cloud: - loadbalancer.ribbon.enabled: false - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9092 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: info - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: http://localhost/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB - client_secret: client-secret - client_id: dbrepo-client - gateway.endpoint: http://localhost \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/resources/application.yml b/dbrepo-database-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index c1dc6038ccf57dd19bddd20c373e34344c1d6be8..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,70 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: database-service - cloud: - loadbalancer.ribbon.enabled: false - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9092 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" - client_secret: "${DBREPO_CLIENT_SECRET}" - client_id: "${CLIENT_ID}" - gateway.endpoint: "${GATEWAY_ENDPOINT}" \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/resources/config.properties b/dbrepo-database-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e993ed9c62272ab86ae23a64f6195f21e465216f..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/resources/config.properties +++ /dev/null @@ -1 +0,0 @@ -# https://github.com/Netflix/Hystrix/issues/275 \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml b/dbrepo-database-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml deleted file mode 100644 index 5d1f8bd44e7e2f044e1effb24191f4262d83dd52..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> -<hibernate-configuration> - <session-factory> - <property name="current_session_context_class">thread</property> - <property name="transaction.coordinator_class">jdbc</property> - <property name="c3p0.min_size">5</property> - <property name="c3p0.max_size">30</property> - <property name="c3p0.acquire_increment">5</property> - <property name="c3p0.timeout">1800</property> - <property name="show_sql">true</property> - <property name="format_sql">true</property> - <property name="hbm2ddl.auto">update</property> - <mapping class="at.tuwien.querystore.Query" /> - <mapping class="at.tuwien.querystore.Table" /> - <mapping class="at.tuwien.querystore.Column" /> - </session-factory> -</hibernate-configuration> diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java deleted file mode 100644 index 4cf40e356bc1cba8d5d880c8297064a6728bf662..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java +++ /dev/null @@ -1,227 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseGiveAccessDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.mapper.DatabaseMapper; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; - -import java.sql.*; -import java.time.Instant; -import java.util.LinkedList; -import java.util.List; - -@Slf4j -@Configuration -public class MariaDbConfig { - - @Autowired - private DatabaseMapper databaseMapper; - - /** - * Inserts a query into a created database with given hostname and database name. The method uses the JDBC in-out - * notation <a href="#{@link}">{@link https://learn.microsoft.com/en-us/sql/connect/jdbc/using-sql-escape-sequences?view=sql-server-ver16#stored-procedure-calls}</a> - * - * @param database The database. - * @param query The query. - * @param username The connection username. - * @param password The connection password. - * @return The generated or retrieved query id. - * @throws SQLException The procedure did not succeed. - */ - public static Long mockSystemQueryInsert(Database database, String query, String username, String password) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { - final String call = "{call _store_query(?,?,?,?)}"; - log.trace("prepare procedure '{}'", call); - final CallableStatement statement = connection.prepareCall(call); - statement.setString(1, username); - statement.setString(2, query); - statement.setTimestamp(3, Timestamp.from(Instant.now())); - statement.registerOutParameter(4, Types.BIGINT); - statement.executeUpdate(); - final Long queryId = statement.getLong(4); - statement.close(); - log.debug("received queryId={}", queryId); - return queryId; - } - } - - public static void createDatabase(Container container, String database) throws SQLException { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - final String sql = "CREATE DATABASE `" + database + "`;"; - log.trace("prepare statement '{}'", sql); - final PreparedStatement statement = connection.prepareStatement(sql); - statement.executeUpdate(); - statement.close(); - } - } - - public static void createInitDatabase(Container container, Database database) throws SQLException { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - ResourceDatabasePopulator populator = new ResourceDatabasePopulator(new ClassPathResource("init/" + database.getInternalName() + ".sql"), new ClassPathResource("init/querystore.sql")); - populator.setSeparator(";\n"); - populator.populate(connection); - } - } - - public static void dropAllDatabases(Container container) { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - final String sql = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema');"; - log.trace("prepare statement '{}'", sql); - final PreparedStatement statement = connection.prepareStatement(sql); - final ResultSet resultSet = statement.executeQuery(); - final List<String> databases = new LinkedList<>(); - while (resultSet.next()) { - databases.add(resultSet.getString(1)); - } - resultSet.close(); - statement.close(); - for (String database : databases) { - final String drop = "DROP DATABASE IF EXISTS `" + database + "`;"; - final PreparedStatement dropStatement = connection.prepareStatement(drop); - dropStatement.executeUpdate(); - dropStatement.close(); - } - } catch (SQLException e) { - log.error("could not drop all databases", e); - } - } - - public static void dropDatabase(Container container, String database) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - final String sql = "DROP DATABASE IF EXISTS `" + database + "`;"; - log.trace("prepare statement '{}'", sql); - final PreparedStatement statement = connection.prepareStatement(sql); - statement.executeUpdate(); - statement.close(); - } - } - - public void mockGrantUserPermissions(Container container, Database database, User user) throws SQLException, - QueryMalformedException { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - final DatabaseGiveAccessDto access = DatabaseGiveAccessDto.builder() - .username(user.getUsername()) - .type(AccessTypeDto.WRITE_ALL) - .build(); - final PreparedStatement statement1 = databaseMapper.rawGrantUserAccessQuery(connection, access); - statement1.executeUpdate(); - final PreparedStatement statement2 = databaseMapper.rawGrantUserProcedure(connection, user); - statement2.executeUpdate(); - final PreparedStatement statement3 = databaseMapper.rawFlushPrivileges(connection); - statement3.executeUpdate(); - } - } - - public static List<String> getUsernames(String hostname, String database, String username, String password) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + hostname + "/" + database; - log.trace("connect to database {}", jdbc); - final List<String> usernames = new LinkedList<>(); - try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { - final String query = "SELECT User FROM mysql.user;"; - log.trace("prepare statement '{}'", query); - final PreparedStatement statement = connection.prepareStatement(query); - final ResultSet set = statement.executeQuery(); - statement.close(); - while (set.next()) { - usernames.add(set.getString("User")); - } - log.debug("received usernames={}", usernames); - return usernames; - } - } - - public static String getPrivileges(String hostname, String database, String user, String username, String password) - throws Exception { - final String jdbc = "jdbc:mariadb://" + hostname + "/" + database; - log.trace("connect to database {}", jdbc); - final List<String> usernames = new LinkedList<>(); - try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { - final String query = "SHOW GRANTS FOR `" + user + "`;"; - log.trace("prepare statement '{}'", query); - final PreparedStatement statement = connection.prepareStatement(query); - final ResultSet set = statement.executeQuery(); - statement.close(); - if (set.next()) { - return set.getString(1); - } - } - throw new Exception("Failed to get privileges"); - } - - public static void mockQuery(String hostname, String query, String username, String password) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + hostname; - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { - final PreparedStatement statement = connection.prepareStatement(query); - statement.executeUpdate(); - statement.close(); - } - } - - /** - * Inserts a query into a created database with given hostname and database name. The method uses the JDBC in-out - * notation <a href="#{@link}">{@link https://learn.microsoft.com/en-us/sql/connect/jdbc/using-sql-escape-sequences?view=sql-server-ver16#stored-procedure-calls}</a> - * - * @param database The database. - * @param query The query. - * @param username The connection username. - * @param password The connection password. - * @return The generated or retrieved query id. - * @throws SQLException The procedure did not succeed. - */ - public static Long mockUserQueryInsert(Database database, String query, String username, String password) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { - final String call = "{call store_query(?,?,?)}"; - log.trace("prepare procedure '{}'", call); - final CallableStatement statement = connection.prepareCall(call); - statement.setString(1, query); - statement.setTimestamp(2, Timestamp.from(Instant.now())); - statement.registerOutParameter(3, Types.BIGINT); - statement.executeUpdate(); - final Long queryId = statement.getLong(3); - statement.close(); - log.debug("received queryId={}", queryId); - return queryId; - } - } - - /** - * Inserts a query into a created database with given hostname and database name. The method uses the JDBC in-out - * notation <a href="#{@link}">{@link https://learn.microsoft.com/en-us/sql/connect/jdbc/using-sql-escape-sequences?view=sql-server-ver16#stored-procedure-calls}</a> - * - * @param database The database. - * @param query The query. - * @return The generated or retrieved query id. - * @throws SQLException The procedure did not succeed. - */ - public static Long mockSystemQueryInsert(Database database, String query) throws SQLException { - return mockSystemQueryInsert(database, query, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword()); - } -} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java deleted file mode 100644 index 587927a0703c0bc78a8dc41fb665ac5d02a1d3b4..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.test.BaseTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.images.PullPolicy; - -/** - * This class configures the MariaDB container for the integration tests. - */ -@Configuration -public class MariaDbContainerConfig { - - @Bean - public CustomMariaDBContainer mariaDB() { - return CustomMariaDBContainer.getInstance(); - } - - /** - * This class represents the customized MariaDB container. It is a singleton to avoid the recreation of containers - * which can be very time-consuming. - */ - public static class CustomMariaDBContainer extends MariaDBContainer<CustomMariaDBContainer> { - - private static CustomMariaDBContainer instance; - - public static CustomMariaDBContainer getInstance() { - if(instance == null) { - instance = new CustomMariaDBContainer(BaseTest.IMAGE_1_NAME + ":" + BaseTest.IMAGE_1_VERSION); - instance.withImagePullPolicy(PullPolicy.alwaysPull()); - instance.addFixedExposedPort(BaseTest.CONTAINER_1_PORT, BaseTest.IMAGE_1_PORT); - instance.withUsername(BaseTest.CONTAINER_1_PRIVILEGED_USERNAME); - instance.withPassword(BaseTest.CONTAINER_1_PRIVILEGED_PASSWORD); - instance.withInitScript("init/users.sql"); - } - return instance; - } - - private CustomMariaDBContainer(String dockerImageName) { - super(dockerImageName); - } - - @Override - protected void configure() { - super.configure(); - this.addEnv("MYSQL_USER", "test"); // MariaDB does not allow this to be root - } - - @Override - public void stop() { - // do nothing, JVM handles shut down - } - } -} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index 42d07d0ae0ab1051469e33cf67067f0c034c6d8d..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java deleted file mode 100644 index 68999dbae5612e8a4b49f4611209e50cbf91069d..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class SwaggerComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @Test - public void swaggerUi_succeeds() throws Exception { - this.mockMvc.perform(get("/swagger-ui/index.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - -} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java deleted file mode 100644 index 2ea19cd287a3144dcac851fda343b3368e823b76..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ /dev/null @@ -1,82 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Log4j2 -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class IdentifierServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private IdentifierRepository identifierRepository; - - @Autowired - private IdentifierService identifierService; - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<Identifier> response = identifierService.findAll(DATABASE_1_ID); - assertEquals(1, response.size()); - } - - @Test - public void find_notFound_fails() { - - /* test */ - final List<Identifier> response = identifierService.findAll(DATABASE_2_ID); - assertEquals(0, response.size()); - } - - -} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java deleted file mode 100644 index eda6038a7d3304cca527faa3acd9edbc8343f3d9..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class UserServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private UserService userService; - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - } - - @Test - public void findByUsername_succeeds() throws UserNotFoundException { - - /* test */ - final User response = userService.findByUsername(USER_1_USERNAME); - assertEquals(USER_1_ID, response.getId()); - } - - @Test - public void findByUsername_fails() { - - /* test */ - assertThrows(UserNotFoundException.class, () -> { - userService.findByUsername("notexisting"); - }); - } - - @Test - public void find_succeeds() throws UserNotFoundException { - - /* test */ - final User response = userService.find(USER_1_ID); - assertEquals(USER_1_ID, response.getId()); - } - - @Test - public void find_fails() { - - /* test */ - assertThrows(UserNotFoundException.class, () -> { - userService.find(UUID.fromString("deadbeef-20bc-4191-acb2-77a3afcae32f")); - }); - } - -} diff --git a/dbrepo-database-service/rest-service/src/test/resources/application.properties b/dbrepo-database-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 8f66f6a4d8221dc7ed1a2a973ac816e17ccba500..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,33 +0,0 @@ -# enable local spring profile -spring.profiles.active=local,junit - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# logging -logging.level.root=error -logging.level.at.tuwien.=trace - -# rabbitmq -fda.gateway.endpoint=http://localhost:15672 -spring.rabbitmq.host=localhost -spring.rabbitmq.virtual-host=/ -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest - -# elastic -fda.elastic.endpoint=search-mock-service:9200 \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/test/resources/init/musicology.sql b/dbrepo-database-service/rest-service/src/test/resources/init/musicology.sql deleted file mode 100644 index 4d2c8deb43ede5de84cd321a302e97ef84038508..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/init/musicology.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE DATABASE musicology; -USE musicology; - -CREATE SEQUENCE seq_mfcc; - -CREATE TABLE mfcc -( - id BIGINT PRIMARY KEY NOT NULL DEFAULT nextval(`seq_mfcc`), - value DECIMAL NOT NULL -) WITH SYSTEM VERSIONING; - -INSERT INTO `mfcc` (`value`) -VALUES (11.2), - (11.3), - (11.4), - (11.9), - (12.3), - (23.1); \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-database-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/test/resources/init/users.sql b/dbrepo-database-service/rest-service/src/test/resources/init/users.sql deleted file mode 100644 index 45f7b53a0f602a780522da646d64da2a0bc36e53..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/init/users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY 'junit1'; -CREATE USER junit2 IDENTIFIED BY 'junit2'; -CREATE USER junit3 IDENTIFIED BY 'junit3'; -CREATE USER junit4 IDENTIFIED BY 'junit4'; \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/test/resources/init/weather.sql b/dbrepo-database-service/rest-service/src/test/resources/init/weather.sql deleted file mode 100644 index 05976e23e48dd83f763a0acbf841223e7e879d43..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/init/weather.sql +++ /dev/null @@ -1,65 +0,0 @@ -/* https://www.kaggle.com/jsphyg/weather-dataset-rattle-package */ -CREATE DATABASE weather; -USE weather; - -CREATE TABLE weather_location -( - location VARCHAR(255) PRIMARY KEY, - lat DOUBLE PRECISION NULL, - lng DOUBLE PRECISION NULL -) WITH SYSTEM VERSIONING; - -CREATE TABLE weather_aus -( - id BIGINT NOT NULL PRIMARY KEY, - `date` DATE NOT NULL, - location VARCHAR(255) NULL, - mintemp DOUBLE PRECISION NULL, - rainfall DOUBLE PRECISION NULL, - FOREIGN KEY (location) REFERENCES weather_location (location), - UNIQUE (`date`), - CHECK (`mintemp` > 0) -) WITH SYSTEM VERSIONING; - -CREATE TABLE sensor -( - `timestamp` TIMESTAMP NOT NULL PRIMARY KEY, - `value` DECIMAL -) WITH SYSTEM VERSIONING; - -INSERT INTO weather_location (location, lat, lng) -VALUES ('Albury', -36.0653583, 146.9112214), - ('Sydney', -33.847927, 150.6517942), - ('Vienna', null, null); - -INSERT INTO weather_aus (id, `date`, location, mintemp, rainfall) -VALUES (1, '2008-12-01', 'Albury', 13.4, 0.6), - (2, '2008-12-02', 'Albury', 7.4, 0), - (3, '2008-12-03', 'Albury', 12.9, 0); - -INSERT INTO sensor (`timestamp`, value) -VALUES ('2022-12-24 17:00:00', 10.0), - ('2022-12-24 18:00:00', 10.2), - ('2022-12-24 19:00:00', null), - ('2022-12-24 20:00:00', 10.3), - ('2022-12-24 21:00:00', 10.0), - ('2022-12-24 22:00:00', null); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW junit2 AS -( -select `date`, `location`, `mintemp`, `rainfall` -from `weather_aus` -where `location` = 'Albury'); - -CREATE VIEW `hs_weather_aus` AS -SELECT * -FROM (SELECT `id`, ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total - FROM `weather_aus` FOR SYSTEM_TIME ALL - GROUP BY inserted_at, deleted_at - ORDER BY deleted_at DESC - LIMIT 50) AS v -ORDER BY v.inserted_at, v.deleted_at ASC; diff --git a/dbrepo-database-service/rest-service/src/test/resources/init/zoo.sql b/dbrepo-database-service/rest-service/src/test/resources/init/zoo.sql deleted file mode 100644 index 238978ac00ac8d9bc710348790a4a7d00155de60..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/init/zoo.sql +++ /dev/null @@ -1,194 +0,0 @@ -CREATE DATABASE zoo; -USE zoo; - -create sequence seq_zoo_id; -create sequence seq_names_id; -create table zoo -( - id bigint not null default nextval(`seq_zoo_id`), - animal_name varchar(255) null, - hair tinyint(1) null, - feathers tinyint(1) null, - eggs tinyint(1) null, - milk tinyint(1) null, - airborne tinyint(1) null, - aquatic tinyint(1) null, - predator tinyint(1) null, - toothed tinyint(1) null, - backbone tinyint(1) null, - breathes tinyint(1) null, - venomous tinyint(1) null, - fins tinyint(1) null, - legs bigint null, - tail tinyint(1) null, - domestic tinyint(1) null, - catsize tinyint(1) null, - class_type bigint null, - primary key (id) -) with system versioning; - -create table names -( - id bigint not null default nextval(`seq_names_id`), - firstname varchar(255), - lastname varchar(255), - primary key (id), - unique key (firstname, lastname) -) with system versioning; - -create table likes -( - name_id bigint not null, - zoo_id bigint not null, - primary key (name_id, zoo_id), - foreign key (name_id) references names (id), - foreign key (zoo_id) references zoo (id) -) with system versioning; - -INSERT INTO zoo (id, animal_name, hair, feathers, eggs, milk, airborne, aquatic, predator, toothed, backbone, breathes, - venomous, fins, legs, tail, domestic, catsize, class_type) -VALUES (1, 'aardvark', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (2, 'antelope', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (3, 'bass', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (4, 'bear', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (5, 'boar', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (6, 'buffalo', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (7, 'calf', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (8, 'carp', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 4), - (9, 'catfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (10, 'cavy', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 0, 1, 0, 1), - (11, 'cheetah', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (12, 'chicken', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (13, 'chub', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (14, 'clam', 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7), - (15, 'crab', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7), - (16, 'crayfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (17, 'crow', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (18, 'deer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (19, 'dogfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (20, 'dolphin', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (21, 'dove', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (22, 'duck', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (23, 'elephant', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (24, 'flamingo', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (25, 'flea', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (26, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (27, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, 0, 5), - (28, 'fruitbat', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (29, 'giraffe', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (30, 'girl', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 2, 0, 1, 1, 1), - (31, 'gnat', 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (32, 'goat', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (33, 'gorilla', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 1), - (34, 'gull', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (35, 'haddock', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (36, 'hamster', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 0, 1), - (37, 'hare', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (38, 'hawk', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (39, 'herring', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (40, 'honeybee', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 1, 0, 6), - (41, 'housefly', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (42, 'kiwi', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (43, 'ladybird', 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (44, 'lark', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (45, 'leopard', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (46, 'lion', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (47, 'lobster', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (48, 'lynx', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (49, 'mink', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (50, 'mole', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (51, 'mongoose', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (52, 'moth', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (53, 'newt', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 5), - (54, 'octopus', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 8, 0, 0, 1, 7), - (55, 'opossum', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (56, 'oryx', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (57, 'ostrich', 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (58, 'parakeet', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (59, 'penguin', 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (60, 'pheasant', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (61, 'pike', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (62, 'piranha', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (63, 'pitviper', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 3), - (64, 'platypus', 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (65, 'polecat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (66, 'pony', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (67, 'porpoise', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (68, 'puma', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (69, 'pussycat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (70, 'raccoon', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (71, 'reindeer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (72, 'rhea', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (73, 'scorpion', 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 8, 1, 0, 0, 7), - (74, 'seahorse', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (75, 'seal', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1), - (76, 'sealion', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 2, 1, 0, 1, 1), - (77, 'seasnake', 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 3), - (78, 'seawasp', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 7), - (79, 'skimmer', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (80, 'skua', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (81, 'slowworm', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 3), - (82, 'slug', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (83, 'sole', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (84, 'sparrow', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (85, 'squirrel', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (86, 'starfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7), - (87, 'stingray', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 4), - (88, 'swan', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (89, 'termite', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (90, 'toad', 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (91, 'tortoise', 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 4, 1, 0, 1, 3), - (92, 'tuatara', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 3), - (93, 'tuna', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (94, 'vampire', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (95, 'vole', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (96, 'vulture', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (97, 'wallaby', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 1, 1), - (98, 'wasp', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 0, 0, 6), - (99, 'wolf', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (100, 'worm', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (101, 'wren', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2); - -INSERT INTO names (firstname, lastname) -VALUES ('Moritz', 'Staudinger'), - ('Martin', 'Weise'), - ('Eva', 'Gergely'), - ('Cornelia', 'Michlits'), - ('Kirill', 'Stytsenko'); - -INSERT INTO likes (name_id, zoo_id) -VALUES (1, 5), - (1, 10), - (2, 3), - (2, 80), - (3, 4), - (4, 4), - (5, 100); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW mock_view AS -( -SELECT `id`, - `animal_name`, - `hair`, - `feathers`, - `eggs`, - `milk`, - `airborne`, - `aquatic`, - `predator`, - `toothed`, - `backbone`, - `breathes`, - `venomous`, - `fins`, - `legs`, - `tail`, - `domestic`, - `catsize`, - `class_type` -FROM `zoo` -WHERE `class_type` = 1); diff --git a/dbrepo-database-service/services/pom.xml b/dbrepo-database-service/services/pom.xml deleted file mode 100644 index 00258baa4fc5574bc719764c7361b566418cdb2a..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-database-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>services</artifactId> - <version>1.3.0</version> - <name>dbrepo-database-service-services</name> - -</project> \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java deleted file mode 100644 index 92b60f4f8a5ed8a566e2504d71b63478b1593f68..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.auth; - -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.DecodedJWT; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.util.Arrays; -import java.util.Base64; -import java.util.stream.Collectors; - -@Slf4j -public class AuthTokenFilter extends OncePerRequestFilter { - - @Value("${fda.jwt.issuer}") - private String issuer; - - @Value("${fda.jwt.public_key}") - private String publicKey; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - final String jwt = parseJwt(request); - if (jwt != null) { - final UserDetails userDetails = verifyJwt(jwt); - log.debug("authenticated user {}", userDetails); - final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(request, response); - } - - public UserDetails verifyJwt(String token) throws ServletException { - final KeyFactory kf; - try { - kf = KeyFactory.getInstance("RSA"); - } catch (NoSuchAlgorithmException e) { - log.error("Failed to find RSA algorithm"); - throw new ServletException("Failed to find RSA algorithm", e); - } - final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); - final RSAPublicKey pubKey; - try { - pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); - } catch (InvalidKeySpecException e) { - log.error("Provided public key is invalid"); - throw new ServletException("Provided public key is invalid", e); - } - final Algorithm algorithm = Algorithm.RSA256(pubKey, null); - JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(issuer) - .withAudience("spring") - .build(); - final DecodedJWT jwt = verifier.verify(token); - final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); - return UserDetailsDto.builder() - .username(jwt.getClaim("client_id").asString()) - .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) - .build(); - } - - /** - * Parses the token from the HTTP header of the request - * - * @param request The request. - * @return The token. - */ - public String parseJwt(HttpServletRequest request) { - String headerAuth = request.getHeader("Authorization"); - if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); - } - return null; - } -} \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java deleted file mode 100644 index a99d4841fefa2962e1e972b53e4c1b5a6ce0fb03..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package at.tuwien.config; - -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import lombok.Getter; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -@Getter -@Log4j2 -@Configuration -public class AmqpConfig { - - @Value("${spring.rabbitmq.host}") - private String ampqHost; - - @Value("${spring.rabbitmq.port:5672}") - private int ampqPort; - - @Value("${spring.rabbitmq.virtual-host}") - private String virtualHost; - - @Value("${spring.rabbitmq.username}") - private String ampqUsername; - - @Value("${spring.rabbitmq.password}") - private String ampqPassword; - - @Bean - public Channel getChannel() throws IOException, TimeoutException { - final ConnectionFactory factory = new ConnectionFactory(); - factory.setHost(ampqHost); - factory.setPort(ampqPort); - factory.setVirtualHost(virtualHost); - factory.setUsername(ampqUsername); - factory.setPassword(ampqPassword); - final Connection connection = factory.newConnection(); - return connection.createChannel(); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index f3db3e030a05b7e91135fd8a0968d29eb9b6d2d5..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,46 +0,0 @@ -package at.tuwien.config; - -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Getter -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${fda.client_secret}") - private String clientSecret; - - @Value("${fda.client_id}") - private String clientId; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean("gatewayRestTemplate") - public RestTemplate gatewayRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index 70887d0e33bfd4919aa42b35b5e48aac0f7b2579..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,93 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/database/**", "GET") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java deleted file mode 100644 index 84169f32e08a9580d23b3590bb7a5691dcfe3975..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.FORBIDDEN) -public class AccessDeniedException extends IOException { - - public AccessDeniedException(String msg) { - super(msg); - } - - public AccessDeniedException(String msg, Throwable thr) { - super(msg, thr); - } - - public AccessDeniedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/AmqpException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/AmqpException.java deleted file mode 100644 index 6af0750d6f5089a8442a7159eac2076462df2825..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/AmqpException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE) -public class AmqpException extends Exception { - - public AmqpException(String msg) { - super(msg); - } - - public AmqpException(String msg, Throwable thr) { - super(msg, thr); - } - - public AmqpException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerMalformedException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerMalformedException.java deleted file mode 100644 index 975982aeac0f57b8bb5abfa1067e3483d25acb91..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerMalformedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class BrokerMalformedException extends IOException { - - public BrokerMalformedException(String msg) { - super(msg); - } - - public BrokerMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public BrokerMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java deleted file mode 100644 index bb3b2690dc7c1348cb33ac0f147d6be320aa7267..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE) -public class BrokerVirtualHostCreationException extends Exception { - - public BrokerVirtualHostCreationException(String msg) { - super(msg); - } - - public BrokerVirtualHostCreationException(String msg, Throwable thr) { - super(msg, thr); - } - - public BrokerVirtualHostCreationException(Throwable thr) { - super(thr); - } -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java deleted file mode 100644 index 43c9b928a6250d8db190bfc5104557ac659fb594..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class BrokerVirtualHostGrantException extends Exception { - - public BrokerVirtualHostGrantException(String msg) { - super(msg); - } - - public BrokerVirtualHostGrantException(String msg, Throwable thr) { - super(msg, thr); - } - - public BrokerVirtualHostGrantException(Throwable thr) { - super(thr); - } -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerConnectionException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerConnectionException.java deleted file mode 100644 index b5c630b259ac00df503e58a53a128160b9e7df00..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerConnectionException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.BAD_GATEWAY, reason = "Container connection failed") -public class ContainerConnectionException extends Exception { - - public ContainerConnectionException(String message) { - super(message); - } - - public ContainerConnectionException(String message, Throwable thr) { - super(message, thr); - } - - public ContainerConnectionException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java deleted file mode 100644 index f0ba3be868978e3c72d3dcffefd4f662e0dccbd9..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Container not found") -public class ContainerNotFoundException extends Exception { - - public ContainerNotFoundException(String message) { - super(message); - } - - public ContainerNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public ContainerNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java deleted file mode 100644 index eb716ab8f5388e1197bfafc6189e9360596d0ad5..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.EXPECTATION_FAILED, reason = "Container not found") -public class ContainerUnauthorizedException extends Exception { - - public ContainerUnauthorizedException(String message) { - super(message); - } - - public ContainerUnauthorizedException(String message, Throwable thr) { - super(message, thr); - } - - public ContainerUnauthorizedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java deleted file mode 100644 index 2970fc77c3ffce6a1c511de858a82f8ecd492654..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) -public class DatabaseConnectionException extends IOException { - - public DatabaseConnectionException(String msg) { - super(msg); - } - - public DatabaseConnectionException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseConnectionException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseMalformedException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseMalformedException.java deleted file mode 100644 index 1775380783119b43ab6a716d4a152be9298ca4fa..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseMalformedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Execution on the end-user container failed.") -public class DatabaseMalformedException extends IOException { - - public DatabaseMalformedException(String msg) { - super(msg); - } - - public DatabaseMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java deleted file mode 100644 index 68e194813806a1a5f3ecd8c36983e6e6a798acfc..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.CONFLICT) -public class DatabaseNameExistsException extends IOException { - - public DatabaseNameExistsException(String msg) { - super(msg); - } - - public DatabaseNameExistsException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseNameExistsException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java deleted file mode 100644 index 0c1644ac232a96d88971b4e2ee0f94918f0396ce..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Database not found") -public class DatabaseNotFoundException extends Exception { - - public DatabaseNotFoundException(String message) { - super(message); - } - - public DatabaseNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public DatabaseNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java deleted file mode 100644 index e381d847b0c459fae2b4d9d35229f842e1c4e346..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class IdentifierNotFoundException extends Exception { - - public IdentifierNotFoundException(String message) { - super(message); - } - - public IdentifierNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public IdentifierNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java deleted file mode 100644 index 26aaa828d3289c80bef86aab32d914e9d635c32f..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_IMPLEMENTED, reason = "image not supported") -public class ImageNotSupportedException extends Exception { - - public ImageNotSupportedException(String message) { - super(message); - } - - public ImageNotSupportedException(String message, Throwable thr) { - super(message, thr); - } - - public ImageNotSupportedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/LicenseNotFoundException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/LicenseNotFoundException.java deleted file mode 100644 index 23d8a70ff0ed0aed1ed14faf39a75291ffdb4a55..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/LicenseNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "License not found") -public class LicenseNotFoundException extends Exception { - - public LicenseNotFoundException(String message) { - super(message); - } - - public LicenseNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public LicenseNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java deleted file mode 100644 index 6d3d2bc052a734dd49bf58e309b063c11f55292a..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class QueryMalformedException extends Exception { - - public QueryMalformedException(String msg) { - super(msg); - } - - public QueryMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java deleted file mode 100644 index d07cd0df4aa239005ecfdefec438d9305dcfa818..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.CONFLICT) -public class QueryStoreException extends Exception { - - public QueryStoreException(String msg) { - super(msg); - } - - public QueryStoreException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryStoreException(Throwable thr) { super(thr); - } -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/SubjectNotFoundException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/SubjectNotFoundException.java deleted file mode 100644 index 6cb506abc95aa1f365b0ea3f53f942ffeadf8375..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/SubjectNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Subject not found") -public class SubjectNotFoundException extends Exception { - - public SubjectNotFoundException(String message) { - super(message); - } - - public SubjectNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public SubjectNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-database-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index 0abb87f609f0a6706c8e499eabc23e3d46d3304d..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found") -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String message) { - super(message); - } - - public UserNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/ContainerServiceGateway.java b/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/ContainerServiceGateway.java deleted file mode 100644 index b2de6f82d41198dadf7d29b519efe7a081341344..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/ContainerServiceGateway.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.exception.ContainerNotFoundException; - -public interface ContainerServiceGateway { - - /** - * Finds a container by given id. - * - * @param id The container id. - * @return The container. - * @throws ContainerNotFoundException The container was not found. - */ - ContainerDto find(Long id) throws ContainerNotFoundException; -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/ContainerServiceGatewayImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/ContainerServiceGatewayImpl.java deleted file mode 100644 index 8e366fdf984df58824a2fead84c68a535e6b2a41..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/ContainerServiceGatewayImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package at.tuwien.gateway.impl; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.gateway.ContainerServiceGateway; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -@Slf4j -@Service -public class ContainerServiceGatewayImpl implements ContainerServiceGateway { - - private final RestTemplate restTemplate; - private final GatewayConfig gatewayConfig; - - @Autowired - public ContainerServiceGatewayImpl(@Qualifier("gatewayRestTemplate") RestTemplate restTemplate, - GatewayConfig gatewayConfig) { - this.restTemplate = restTemplate; - this.gatewayConfig = gatewayConfig; - } - - @Override - public ContainerDto find(Long id) throws ContainerNotFoundException { - final String url = gatewayConfig.getGatewayEndpoint() + "/api/container/" + id; - final ResponseEntity<ContainerDto> response = restTemplate.exchange(url, HttpMethod.GET, null, ContainerDto.class); - if (!response.getStatusCode().equals(HttpStatus.OK)) { - log.error("Failed to find container: {}", response.getStatusCode()); - throw new ContainerNotFoundException("Failed to find container"); - } - return response.getBody(); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java deleted file mode 100644 index 4c74ed486cefadb499d458aa305f25262193a0ca..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.entities.container.Container; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring", uses = {ImageMapper.class}) -public interface ContainerMapper { - - @Mappings({ - @Mapping(target = "id", source = "id"), - }) - ContainerDto containerToContainerDto(Container data); - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java b/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java deleted file mode 100644 index 0e6e6294b6c5683de321811b026cefb258b0385b..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.entities.identifier.Identifier; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface IdentifierMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(IdentifierMapper.class); - - IdentifierBriefDto identifierToIdentifierBriefDto(Identifier data); - - @Mappings({ - @Mapping(target = "database.identifier", ignore = true) - }) - IdentifierDto identifierToIdentifierDto(Identifier data); - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java b/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java deleted file mode 100644 index f8d8dc6763889c033acd866d559bd3f18aa8372c..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.container.image.ImageDto; -import at.tuwien.entities.container.image.ContainerImage; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface ImageMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ImageMapper.class); - - /* keep */ - ImageDto containerImageToImageDto(ContainerImage data); - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index cb3679d1c347d809015b4a67fcd99d4d01130709..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,46 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.auth.TokenIntrospectDto; -import at.tuwien.api.user.GrantedAuthorityDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -import java.util.Arrays; -import java.util.UUID; -import java.util.stream.Collectors; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - - /* keep */ - @Mappings({ - @Mapping(target = "id", expression = "java(data.getId().toString())") - }) - UserDetailsDto userDtoToUserDetailsDto(UserDto data); - - UserBriefDto userDtoToUserBriefDto(UserDto data); - - default UserDetailsDto tokenIntrospectDtoToUserDetailsDto(TokenIntrospectDto data) { - return UserDetailsDto.builder() - .id(data.getSub()) - .username(data.getUsername()) - .authorities(Arrays.stream(data.getRealmAccess().getRoles()) - .map(SimpleGrantedAuthority::new) - .collect(Collectors.toList())) - .build(); - } - - default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { - final GrantedAuthority authority = new SimpleGrantedAuthority(data.getAuthority()); - log.trace("mapped granted authority {} to granted authority {}", data, authority); - return authority; - } -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index f41d2aa3fae70608ac913bde9ae299d57ce5b0a4..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index 8a2929590da18931e612783a2b8c687fb87adb19..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,24 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { - - List<Database> findReadAccess(UUID id); - - List<Database> findWriteAccess(UUID id); - - List<Database> findConfigureAccess(UUID id); - - Optional<Database> findPublicOrMine(Long databaseId, UUID id); - - Optional<Database> findPublic(Long databaseId); - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java deleted file mode 100644 index e9a1ace9a73872c75e4fbb31af14fd698f67dcea..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierType; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface IdentifierRepository extends JpaRepository<Identifier, Long> { - - List<Identifier> findByDatabaseId(Long containerId); - - Optional<Identifier> findByDatabaseIdAndType(Long databaseId, IdentifierType type); - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index b1020fdcc532602d72cad5018b964edec4f25eea..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index bd985254a5e2c6c5d42679754f5c164f975ff2ac..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index 3d0057f9f93d17adf73498aac29b4ef4e32d1d29..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index 42d09c3e9eaecff5b277e10a724ebfb857a91c8b..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - Optional<User> findByUsername(String username); - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java deleted file mode 100644 index 6125ff39ab41a7e341bb01a32bbc152415483032..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.DatabaseDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseIdxRepository extends ElasticsearchRepository<DatabaseDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/ContainerService.java deleted file mode 100644 index d58e11d4416cb62727f6a12688c2ff419fab2add..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerNotFoundException; - -public interface ContainerService { - Container find(Long id) throws ContainerNotFoundException; - - ContainerDto inspect(Long id) throws ContainerNotFoundException; -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java deleted file mode 100644 index 0238eca2c5b925cf14220dac1ac3b5b483349db9..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.identifier.Identifier; - -import java.util.List; - -public interface IdentifierService { - - /** - * Finds all identifiers in the metadata database for a database with given id. - * - * @param databaseId The database id. - * @return The list of identifiers. - */ - List<Identifier> findAll(Long databaseId); -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index cec9cf42e785ee2211782faeefc0181cf5c7ff4f..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,13 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -import java.util.UUID; - -public interface UserService { - - User findByUsername(String username) throws UserNotFoundException; - - User find(UUID id) throws UserNotFoundException; -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java deleted file mode 100644 index 1796de02e8d04b2b25cd6ab4eba5c0d4427e0cd6..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.gateway.ContainerServiceGateway; -import at.tuwien.repository.mdb.ContainerRepository; -import at.tuwien.service.ContainerService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class ContainerServiceImpl implements ContainerService { - - private final ContainerRepository containerRepository; - private final ContainerServiceGateway containerServiceGateway; - - @Autowired - public ContainerServiceImpl(ContainerRepository containerRepository, - ContainerServiceGateway containerServiceGateway) { - this.containerRepository = containerRepository; - this.containerServiceGateway = containerServiceGateway; - } - - @Override - public Container find(Long id) throws ContainerNotFoundException { - final Optional<Container> optional = containerRepository.findById(id); - if (optional.isEmpty()) { - log.error("Failed to find container with id {}", id); - throw new ContainerNotFoundException("Failed to find container"); - } - return optional.get(); - } - - @Override - public ContainerDto inspect(Long id) throws ContainerNotFoundException { - return containerServiceGateway.find(id); - } -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java deleted file mode 100644 index fec841198727c1fd61f343a02141a58e0c5f112a..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.service.IdentifierService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Log4j2 -@Service -public class IdentifierServiceImpl implements IdentifierService { - - private final IdentifierRepository identifierRepository; - - @Autowired - public IdentifierServiceImpl(IdentifierRepository identifierRepository) { - this.identifierRepository = identifierRepository; - } - - @Override - public List<Identifier> findAll(Long databaseId) { - return identifierRepository.findByDatabaseId(databaseId); - } - -} diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 2626da3c2cdb4c45b13cc9ea93ca9f4b472fd7e3..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; -import java.util.UUID; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with username {}", username); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - - @Override - public User find(UUID id) throws UserNotFoundException { - final Optional<User> optional = userRepository.findById(id); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with id {}", id); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - -} diff --git a/dbrepo-gateway-service/dbrepo.conf b/dbrepo-gateway-service/dbrepo.conf index 7e7e413c4086cbf0c0a720a7f4054a8ee9511a7d..2e91b3ac4e20e367155dccd63f95453f2d1832e1 100644 --- a/dbrepo-gateway-service/dbrepo.conf +++ b/dbrepo-gateway-service/dbrepo.conf @@ -6,10 +6,6 @@ upstream authentication { server authentication-service:8080; } -upstream user { - server user-service:9098; -} - upstream broker { server broker-service:15672; } @@ -22,30 +18,6 @@ upstream metadata { server metadata-service:9099; } -upstream identifier { - server identifier-service:9096; -} - -upstream query { - server query-service:9093; -} - -upstream table { - server table-service:9094; -} - -upstream database { - server database-service:9092; -} - -upstream container { - server container-service:9091; -} - -upstream semantics { - server semantics-service:9097; -} - upstream search { server search-db:9200; } @@ -72,15 +44,6 @@ server { proxy_read_timeout 90; } - location /api/user { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://user; - proxy_read_timeout 90; - } - location /api/broker { rewrite /api/broker/(.*) /api/$1 break; proxy_set_header Host $host; @@ -100,203 +63,41 @@ server { proxy_read_timeout 90; } - location /api/oai { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata; - proxy_read_timeout 90; - } - - location /api/maintenance { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://user; - proxy_read_timeout 90; - } - - location /api/identifier { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://identifier; - proxy_read_timeout 90; - } - - location /api/identifier/retrieve { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://identifier; - proxy_read_timeout 90; - } - - location /api/pid { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://identifier; - proxy_read_timeout 90; - } - location /pid { rewrite /pid/(.*) /api/pid/$1 break; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://identifier; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/query { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/view { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/table/[0-9]+/history { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/table/[0-9]+/data { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/table/[0-9]+/query { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/table/[0-9]+/export { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/table/[0-9]+/consumer { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/version { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://query; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/table { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://table; - proxy_read_timeout 90; - } - - location ~ ^/api/database { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://database; - proxy_read_timeout 90; - } - - location ~ ^/api/database/[0-9]+/access { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://database; - proxy_read_timeout 90; - } - - location /api/container { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://container; - proxy_read_timeout 90; - } - - location /api/image { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://container; + proxy_pass http://metadata; proxy_read_timeout 90; } - location /api/semantic { + location /api/upload { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://semantics; + proxy_pass http://upload; proxy_read_timeout 90; } - location /api/upload { + location /retrieve { + rewrite /retrieve/(.*) /$1 break; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://upload; + proxy_pass http://search; proxy_read_timeout 90; } - location /retrieve { - rewrite /retrieve/(.*) /$1 break; + location /api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://search; + proxy_pass http://metadata; proxy_read_timeout 90; } diff --git a/dbrepo-identifier-service/.dockerignore b/dbrepo-identifier-service/.dockerignore deleted file mode 100644 index 36998121983d45bf75bdcdeded0116019f0b6f82..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -**/*.csv \ No newline at end of file diff --git a/dbrepo-identifier-service/.gitignore b/dbrepo-identifier-service/.gitignore deleted file mode 100644 index 648659eaf4f4567251f8be20833a11e6f43e8c31..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### Environment ### -.env - -### Generated ### -ready -mapping.xml -rest-service/src/main/java/at/tuwien/userdb/Table.java - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-identifier-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-identifier-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-identifier-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-identifier-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-identifier-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-identifier-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-identifier-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-identifier-service/Dockerfile b/dbrepo-identifier-service/Dockerfile deleted file mode 100644 index bc20b4874a48216cea33c2394079d51fd8305466..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/Dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./api ./api -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV BROKER_USERNAME=fda -ENV BROKER_PASSWORD=fda -ENV GATEWAY_ENDPOINT=http://gateway-service -ENV WEBSITE=http://localhost -ENV LOG_LEVEL=debug -ENV CLIENT_ID="dbrepo-client" -ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./identifier-service.jar - -EXPOSE 9096 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./identifier-service.jar"] diff --git a/dbrepo-identifier-service/README.md b/dbrepo-identifier-service/README.md deleted file mode 100644 index 9f9b6fcdd3c07732e54c9a0bf7c33746adaf9fde..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Identifier Service - -## Actuator - -- Actuator Info: http://localhost:9096/actuator/info -- Actuator Health: http://localhost:9096/actuator/health -- Actuator Prometheus: http://localhost:9096/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9096/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9096/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-identifier-service/api/pom.xml b/dbrepo-identifier-service/api/pom.xml deleted file mode 100644 index 01a432603d1497cb95ad8983bce9d8fc74bf6a0a..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/api/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-identifier-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>api</artifactId> - <name>dbrepo-identifier-service-api</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - -</project> \ No newline at end of file diff --git a/dbrepo-identifier-service/mvnw b/dbrepo-identifier-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-identifier-service/mvnw.cmd b/dbrepo-identifier-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-identifier-service/pom.xml b/dbrepo-identifier-service/pom.xml deleted file mode 100644 index e03d06db1b8ab125b4b13f36b42f0d30e1797b50..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/pom.xml +++ /dev/null @@ -1,282 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-identifier-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-identifier-service</name> - <description>Service that manages the identifiers</description> - - <packaging>pom</packaging> - <modules> - <module>api</module> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> - <commons-io.version>2.11.0</commons-io.version> - <opencsv.version>5.7.1</opencsv.version> - <super-csv.version>2.4.0</super-csv.version> - <jsql.version>4.6</jsql.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <testcontainers.version>1.18.3</testcontainers.version> - <opensearch-testcontainer.version>2.0.0</opensearch-testcontainer.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency><!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters --> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-thymeleaf</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Entities and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - </dependency> - <!-- DataSource --> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-annotations</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-test</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - <exclusion> - <groupId>org.junit.vintage</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.opensearch</groupId> - <artifactId>opensearch-testcontainers</artifactId> - <version>${opensearch-testcontainer.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - </dependency> - <!-- Export --> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>${commons-io.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - <include>**/templates/*.xml</include> - <include>**/templates/*.txt</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>**/DbrepoIdentifierServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>default-report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-identifier-service/report/pom.xml b/dbrepo-identifier-service/report/pom.xml deleted file mode 100644 index 3fafe6f6041986c3070809c66c3d80db51576a0d..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/report/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-identifier-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <name>dbrepo-identifier-service-report</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/pom.xml b/dbrepo-identifier-service/rest-service/pom.xml deleted file mode 100644 index 89ed56a1ca9110f0a67e184aa756acb88391d438..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-identifier-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-identifier-service-rest</name> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java deleted file mode 100644 index 6470353fa5b67ce52aa494b6558f1afb23921ff9..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoIdentifierServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoIdentifierServiceApplication.class, args); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index 7c8ddcff285685220d7cb1fed793feea0f1a40ff..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.servers.Server; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository Identifier Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the identifiers") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Sourcecode Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services")) - .servers(List.of(new Server() - .description("Generated server url") - .url("http://localhost:9096"), - new Server() - .description("Sandbox") - .url("https://dbrepo2.tuwien.ac.at"))); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("identifier-service") - .pathsToMatch("/api/**") - .build(); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java deleted file mode 100644 index 9b8509553e1a4048ea4de0d766ceea93e734a5db..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.converters.IdentifierTypeConverter; -import org.springframework.context.annotation.Configuration; -import org.springframework.format.FormatterRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class WebConfig implements WebMvcConfigurer { - - @Override - public void addFormatters(FormatterRegistry registry) { - registry.addConverter(new IdentifierTypeConverter()); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index 27a6c76130c2e77ee3dfe95b84a4e21e15b03646..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,150 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.FORBIDDEN) - @ExceptionHandler(AccessDeniedException.class) - public ResponseEntity<ApiErrorDto> handle(AccessDeniedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.FORBIDDEN) - .message(e.getLocalizedMessage()) - .code("error.identifier.accessdenied") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(DatabaseNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.identifier.databasenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(IdentifierAlreadyExistsException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierAlreadyExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.identifier.exists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.PRECONDITION_FAILED) - @ExceptionHandler(IdentifierAlreadyPublishedException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierAlreadyPublishedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.PRECONDITION_FAILED) - .message(e.getLocalizedMessage()) - .code("error.identifier.published") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(IdentifierNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.identifier.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) - @ExceptionHandler(IdentifierPublishingNotAllowedException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierPublishingNotAllowedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_ACCEPTABLE) - .message(e.getLocalizedMessage()) - .code("error.identifier.publish") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(IdentifierRequestException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierRequestException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.identifier.requestinvalid") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(NotAllowedException.class) - public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.identifier.notallowed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(QueryNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(QueryNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.identifier.query") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_GATEWAY) - @ExceptionHandler(RemoteUnavailableException.class) - public ResponseEntity<ApiErrorDto> handle(RemoteUnavailableException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_GATEWAY) - .message(e.getLocalizedMessage()) - .code("error.identifier.remote") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(UserNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.identifier.usernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 08f6f6a49694c73968337ea579b928adc5565e5a..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,57 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: identifier-service - cloud: - loadbalancer.ribbon.enabled: false - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9096 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - at.tuwien.auth.UserPermissionEvaluator: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: http://localhost/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB - client_secret: client-secret - client_id: dbrepo-client - gateway.endpoint: http://localhost - website: http://localhost \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 9701f85dd63394bdb21d6a0b289ef0f43d967275..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,72 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: identifier-service - cloud: - loadbalancer.ribbon.enabled: false - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9096 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - at.tuwien.auth.UserPermissionEvaluator: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" - client_secret: "${DBREPO_CLIENT_SECRET}" - client_id: "${CLIENT_ID}" - gateway.endpoint: "${GATEWAY_ENDPOINT}" - website: "${WEBSITE}" \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/config.properties b/dbrepo-identifier-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index 5626b5cda8a058cb0b10778a848b830d8bfb6520..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.IdentifierIdxRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - - @Autowired - private MockMvc mockMvc; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorStatus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java deleted file mode 100644 index 3d4751850889ea8298579b38c38ab71b85b47a20..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.IdentifierIdxRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class SwaggerComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - - @Test - public void swaggerUi_succeeds() throws Exception { - this.mockMvc.perform(get("/swagger-ui/index.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java deleted file mode 100644 index f8625b44ebab512d3a9b7a289bef6dd1f1204143..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java +++ /dev/null @@ -1,171 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.exception.QueryNotFoundException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.IdentifierIdxRepository; -import com.google.common.io.Files; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.web.client.ResourceAccessException; -import org.springframework.web.client.RestTemplate; - -import java.io.File; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class QueryServiceGatewayUnitTest extends BaseUnitTest { - - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - - @MockBean - @Qualifier("restTemplate") - private RestTemplate restTemplate; - - @MockBean - private UserRepository userRepository; - - @Autowired - private QueryServiceGateway queryServiceGateway; - - @Test - public void find_succeeds() throws QueryNotFoundException, RemoteUnavailableException { - final ResponseEntity<QueryDto> mock = ResponseEntity.status(HttpStatus.ACCEPTED) - .body(QUERY_1_DTO); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(QueryDto.class))) - .thenReturn(mock); - - /* test */ - final QueryDto response = queryServiceGateway.find(DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, null); - assertNotNull(response); - assertEquals(QUERY_1_ID, response.getId()); - } - - @Test - public void find_notFound_fails() { - final ResponseEntity<QueryDto> mock = ResponseEntity.status(HttpStatus.NOT_FOUND) - .build(); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(QueryDto.class))) - .thenReturn(mock); - - /* test */ - assertThrows(QueryNotFoundException.class, () -> { - queryServiceGateway.find(DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, null); - }); - } - - @Test - public void find_notAvailable_fails() { - final ResponseEntity<QueryDto> mock = ResponseEntity.status(HttpStatus.NOT_FOUND) - .build(); - - /* mock */ - doThrow(ResourceAccessException.class) - .when(restTemplate) - .exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(QueryDto.class)); - - /* test */ - assertThrows(RemoteUnavailableException.class, () -> { - queryServiceGateway.find(DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, null); - }); - } - - @Test - public void find_notAuthorized_fails() { - final ResponseEntity<QueryDto> mock = ResponseEntity.status(HttpStatus.UNAUTHORIZED) - .build(); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(QueryDto.class))) - .thenReturn(mock); - - /* test */ - assertThrows(RemoteUnavailableException.class, () -> { - queryServiceGateway.find(DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, null); - }); - } - - @Test - public void export_succeeds() throws IOException, QueryNotFoundException, RemoteUnavailableException { - final byte[] bytes = Files.toByteArray(new File("src/test/resources/csv/testdata.csv")); - final ResponseEntity<byte[]> mock = ResponseEntity.status(HttpStatus.OK) - .body(bytes); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(byte[].class))) - .thenReturn(mock); - - /* test */ - final byte[] response = queryServiceGateway.export(DATABASE_1_ID, QUERY_1_ID); - assertNotNull(response); - assertEquals(bytes, response); - } - - @Test - public void export_notFound_fails() { - final ResponseEntity<byte[]> mock = ResponseEntity.status(HttpStatus.NOT_FOUND) - .build(); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(byte[].class))) - .thenReturn(mock); - - /* test */ - assertThrows(QueryNotFoundException.class, () -> { - queryServiceGateway.export(DATABASE_1_ID, QUERY_1_ID); - }); - } - - @Test - public void export_notAuthorized_fails() { - final ResponseEntity<byte[]> mock = ResponseEntity.status(HttpStatus.UNAUTHORIZED) - .build(); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(byte[].class))) - .thenReturn(mock); - - /* test */ - assertThrows(RemoteUnavailableException.class, () -> { - queryServiceGateway.export(DATABASE_1_ID, QUERY_1_ID); - }); - } - - @Test - public void export_notAvailable_succeeds() { - - /* mock */ - doThrow(ResourceAccessException.class) - .when(restTemplate) - .exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(byte[].class)); - - /* test */ - assertThrows(RemoteUnavailableException.class, () -> { - queryServiceGateway.export(DATABASE_1_ID, QUERY_1_ID); - }); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java deleted file mode 100644 index 3f9373e2723a6581795d475617f5e53807b93b36..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.IdentifierIdxRepository; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@ExtendWith(SpringExtension.class) -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -public class DatabaseServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - - @Autowired - private DatabaseService databaseService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private ImageRepository imageRepository; - - @BeforeEach - public void beforeEach() { - userRepository.save(USER_1); - realmRepository.save(REALM_DBREPO); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - } - - @Test - public void find_succeeds() throws DatabaseNotFoundException { - - /* test */ - final Database response = databaseService.find(DATABASE_1_ID); - assertEquals(DATABASE_1_ID, response.getId()); - } - - @Test - public void find_fails() { - - /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - databaseService.find(9999L); - }); - } - - -} diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java deleted file mode 100644 index 5b40a26704b88f190a6bfed1d7deddb822d41e32..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ /dev/null @@ -1,406 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierDescription; -import at.tuwien.entities.identifier.IdentifierTitle; -import at.tuwien.entities.identifier.RelatedIdentifier; -import at.tuwien.exception.*; -import at.tuwien.gateway.QueryServiceGateway; -import at.tuwien.repository.sdb.IdentifierIdxRepository; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.when; - -@Log4j2 -@Testcontainers -@ExtendWith(SpringExtension.class) -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -public class IdentifierServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private QueryServiceGateway queryServiceGateway; - - @MockBean - @Qualifier("restTemplate") - private RestTemplate restTemplate; - - @Autowired - private LicenseRepository licenseRepository; - - @Autowired - private IdentifierService identifierService; - - @Autowired - private IdentifierRepository identifierRepository; - - @Autowired - private IdentifierIdxRepository identifierIdxRepository; - - @Autowired - private IdentifierTitleRepository identifierTitleRepository; - - @Autowired - private IdentifierDescriptionRepository identifierDescriptionRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ViewRepository viewRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private RealmRepository realmRepository; - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - imageRepository.save(IMAGE_1_SIMPLE); - realmRepository.save(REALM_DBREPO); - licenseRepository.save(LICENSE_1); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - userRepository.save(USER_3_SIMPLE); - userRepository.save(USER_4_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - containerRepository.save(CONTAINER_2_SIMPLE); - databaseRepository.save(DATABASE_2_SIMPLE); - } - - @Test - public void create_subsetRelatedIdentifiers_succeeds() - throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, - QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, - IdentifierRequestException, ViewNotFoundException { - final String bearer = "Bearer abcxyz"; - - /* mock */ - when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), eq(QueryDto.class))) - .thenReturn(ResponseEntity.ok(QUERY_2_DTO)); - when(queryServiceGateway.find(DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer)) - .thenReturn(QUERY_2_DTO); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - - /* test */ - final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_2_PRINCIPAL, bearer); - assertEquals(IDENTIFIER_2_ID, response.getId()); - assertNotNull(response.getTitles()); - assertEquals(1, response.getTitles().size()); - final IdentifierTitle title0 = response.getTitles().get(0); - assertEquals(IDENTIFIER_2_TITLE_1_TITLE, title0.getTitle()); - assertEquals(IDENTIFIER_2_TITLE_1_LANG, title0.getLanguage()); - assertEquals(IDENTIFIER_2_TITLE_1_TYPE, title0.getTitleType()); - assertNotNull(response.getDescriptions()); - assertEquals(1, response.getDescriptions().size()); - final IdentifierDescription description0 = response.getDescriptions().get(0); - assertEquals(IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); - assertEquals(IDENTIFIER_2_DESCRIPTION_1_LANG, description0.getLanguage()); - assertEquals(IDENTIFIER_2_DESCRIPTION_1_TYPE, description0.getDescriptionType()); - assertEquals(IDENTIFIER_2_DOI, response.getDoi()); - assertEquals(IDENTIFIER_2_PUBLISHER, response.getPublisher()); - assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); - assertNull(response.getLanguage()); - assertEquals(IDENTIFIER_2_PUBLICATION_YEAR, response.getPublicationYear()); - assertEquals(IDENTIFIER_2_PUBLICATION_MONTH, response.getPublicationMonth()); - assertEquals(IDENTIFIER_2_PUBLICATION_DAY, response.getPublicationDay()); - final List<RelatedIdentifier> relatedIdentifiers = response.getRelatedIdentifiers(); - assertEquals(1, relatedIdentifiers.size()); - final RelatedIdentifier relatedIdentifier1 = relatedIdentifiers.get(0); - assertEquals(RELATED_IDENTIFIER_2_ID, relatedIdentifier1.getId()); - assertEquals(RELATED_IDENTIFIER_2_TYPE, relatedIdentifier1.getType()); - assertEquals(RELATED_IDENTIFIER_2_RELATION_TYPE, relatedIdentifier1.getRelation()); - assertEquals(RELATED_IDENTIFIER_2_VALUE, relatedIdentifier1.getValue()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_2_ID)); - } - - @Test - public void create_succeeds() throws DatabaseNotFoundException, UserNotFoundException, - IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, - RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException { - final String bearer = "Bearer abcxyz"; - - /* test */ - final Identifier response = identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL, bearer); - assertEquals(IDENTIFIER_1_ID, response.getId()); - assertNotNull(response.getTitles()); - final List<IdentifierTitle> titles = response.getTitles(); - assertEquals(2, titles.size()); - final IdentifierTitle title0 = titles.get(0); - assertEquals(IDENTIFIER_1_TITLE_1_ID, title0.getId()); - assertEquals(IDENTIFIER_1_TITLE_1_TITLE, title0.getTitle()); - assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); - assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); - final IdentifierTitle title1 = titles.get(1); - assertEquals(IDENTIFIER_1_TITLE_2_ID, title1.getId()); - assertEquals(IDENTIFIER_1_TITLE_2_TITLE, title1.getTitle()); - assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); - assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); - assertNotNull(response.getDescriptions()); - assertEquals(1, response.getDescriptions().size()); - final List<IdentifierDescription> descriptions = response.getDescriptions(); - final IdentifierDescription description0 = descriptions.get(0); - assertEquals(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); - assertEquals(IDENTIFIER_1_DESCRIPTION_1_LANG, description0.getLanguage()); - assertEquals(IDENTIFIER_1_DESCRIPTION_1_TYPE, description0.getDescriptionType()); - assertNotNull(response.getCreators()); - assertEquals(1, response.getCreators().size()); - assertNotNull(response.getFunders()); - assertEquals(1, response.getFunders().size()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); - } - - @Test - public void create_noRelatedTitleDescription_succeeds() throws DatabaseNotFoundException, UserNotFoundException, - IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, - RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException { - final String bearer = "Bearer abcxyz"; - - /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - containerRepository.save(CONTAINER_4_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); - databaseRepository.save(DATABASE_4_SIMPLE); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - identifierRepository.save(IDENTIFIER_3_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - identifierIdxRepository.save(IDENTIFIER_2_DTO); - identifierIdxRepository.save(IDENTIFIER_3_DTO); - - /* test */ - final Identifier response = identifierService.create(IDENTIFIER_4_DTO_REQUEST, USER_1_PRINCIPAL, bearer); - assertEquals(IDENTIFIER_4_ID, response.getId()); - assertNotNull(response.getTitles()); - assertEquals(0, response.getTitles().size()); - assertNotNull(response.getDescriptions()); - assertEquals(0, response.getDescriptions().size()); - assertNotNull(response.getCreators()); - assertEquals(1, response.getCreators().size()); - assertNotNull(response.getFunders()); - assertEquals(0, response.getFunders().size()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_4_ID)); - } - - @Test - public void create_subsetHasDatabaseIdentifier_succeeds() throws DatabaseNotFoundException, UserNotFoundException, - IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, - RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException { - final String authorization = "Bearer abcxyz"; - - /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - containerRepository.save(CONTAINER_4_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); - databaseRepository.save(DATABASE_4_SIMPLE); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - identifierRepository.save(IDENTIFIER_3_SIMPLE); - identifierRepository.save(IDENTIFIER_4_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - identifierIdxRepository.save(IDENTIFIER_2_DTO); - identifierIdxRepository.save(IDENTIFIER_3_DTO); - identifierIdxRepository.save(IDENTIFIER_4_DTO); - when(queryServiceGateway.find(DATABASE_1_ID, IDENTIFIER_5_DTO_REQUEST, authorization)) - .thenReturn(QUERY_1_DTO); - - /* test */ - final Identifier response = identifierService.create(IDENTIFIER_5_DTO_REQUEST, USER_1_PRINCIPAL, authorization); - assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabaseId()); - assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabase().getId()); - assertEquals(IDENTIFIER_5_QUERY, response.getQuery()); - assertEquals(IDENTIFIER_5_QUERY_HASH, response.getQueryHash()); - assertEquals(IDENTIFIER_5_RESULT_HASH, response.getResultHash()); - assertEquals(0, response.getTitles().size()); - assertEquals(0, response.getDescriptions().size()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_5_ID)); - } - - @Test - public void create_viewIdentifier_succeeds() throws DatabaseNotFoundException, UserNotFoundException, - IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, - RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException { - final String authorization = "Bearer abcxyz"; - - /* mock */ - containerRepository.save(CONTAINER_3_SIMPLE); - containerRepository.save(CONTAINER_4_SIMPLE); - databaseRepository.save(DATABASE_3_SIMPLE); - databaseRepository.save(DATABASE_4_SIMPLE); - tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE)); - viewRepository.save(VIEW_1); - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - identifierRepository.save(IDENTIFIER_3_SIMPLE); - identifierRepository.save(IDENTIFIER_4_SIMPLE); - identifierRepository.save(IDENTIFIER_5_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - identifierIdxRepository.save(IDENTIFIER_2_DTO); - identifierIdxRepository.save(IDENTIFIER_3_DTO); - identifierIdxRepository.save(IDENTIFIER_4_DTO); - identifierIdxRepository.save(IDENTIFIER_5_DTO); - - /* test */ - final Identifier response = identifierService.create(IDENTIFIER_6_DTO_REQUEST, USER_1_PRINCIPAL, authorization); - assertEquals(IDENTIFIER_6_DATABASE_ID, response.getDatabaseId()); - assertEquals(IDENTIFIER_6_DATABASE_ID, response.getDatabase().getId()); - assertEquals(IDENTIFIER_6_QUERY, response.getQuery()); - assertEquals(IDENTIFIER_6_QUERY_HASH, response.getQueryHash()); - assertEquals(IDENTIFIER_6_RESULT_HASH, response.getResultHash()); - assertEquals(0, response.getTitles().size()); - assertEquals(0, response.getDescriptions().size()); - assertEquals(1, response.getLicenses().size()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_6_ID)); - } - - @Test - public void find_fails() { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - - /* test */ - assertThrows(IdentifierNotFoundException.class, () -> { - identifierService.find(IDENTIFIER_2_ID); - }); - } - - @Test - public void update_database_succeeds() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierRequestException, - IdentifierNotFoundException { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - - /* test */ - final Identifier response = identifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL, "Bearer abc"); - assertEquals(IDENTIFIER_1_ID, response.getId()); - assertEquals(IDENTIFIER_1_DATABASE_ID, response.getDatabaseId()); - final List<IdentifierTitle> titles = response.getTitles(); - assertEquals(2, titles.size()); - final IdentifierTitle title0 = titles.get(0); - assertEquals(IDENTIFIER_1_TITLE_1_ID, title0.getId()); - assertEquals(IDENTIFIER_1_TITLE_1_TITLE_MODIFY, title0.getTitle()); // <<<<<< - assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); - assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); - final IdentifierTitle title1 = titles.get(1); - assertEquals(IDENTIFIER_1_TITLE_2_ID, title1.getId()); - assertEquals(IDENTIFIER_1_TITLE_2_TITLE_MODIFY, title1.getTitle()); - assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); - assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); - assertEquals(IDENTIFIER_1_PUBLICATION_YEAR, response.getPublicationYear()); - assertEquals(IDENTIFIER_1_PUBLICATION_MONTH, response.getPublicationMonth()); - assertEquals(IDENTIFIER_1_PUBLICATION_DAY, response.getPublicationDay()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); - } - - @Test - @Transactional - public void update_subset_succeeds() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierRequestException, - IdentifierNotFoundException { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierRepository.save(IDENTIFIER_2_SIMPLE); - when(queryServiceGateway.find(eq(IDENTIFIER_2_DATABASE_ID), any(IdentifierSaveDto.class), anyString())) - .thenReturn(QUERY_2_DTO); - - /* test */ - final Identifier response = identifierService.update(IDENTIFIER_2_ID, IDENTIFIER_2_DTO_UPDATE_REQUEST, USER_2_PRINCIPAL, "Bearer abc"); - assertEquals(IDENTIFIER_2_ID, response.getId()); - assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); - assertEquals(1, response.getTitles().size()); - assertEquals(1, identifierRepository.findAll().stream().map(Identifier::getTitles).flatMap(List::stream).toList().size()); - assertEquals(IDENTIFIER_2_PUBLICATION_YEAR, response.getPublicationYear()); - assertEquals(IDENTIFIER_2_PUBLICATION_MONTH, response.getPublicationMonth()); - assertEquals(IDENTIFIER_2_PUBLICATION_DAY, response.getPublicationDay()); - /* open search database */ - assertTrue(identifierIdxRepository.existsById(IDENTIFIER_2_ID)); - } - - @Test - public void delete_succeeds() throws IdentifierNotFoundException { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - identifierIdxRepository.save(IDENTIFIER_1_DTO); - - /* test */ - identifierService.delete(IDENTIFIER_1_ID); - assertTrue(userRepository.findById(IDENTIFIER_1_CREATED_BY).isPresent()) /* no cascade of delete */; - /* open search database */ - assertFalse(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); - } - - @Test - public void delete_notFound_fails() { - - /* mock */ - identifierRepository.save(IDENTIFIER_1_SIMPLE); - - /* test */ - assertThrows(IdentifierNotFoundException.class, () -> { - identifierService.delete(IDENTIFIER_2_ID); - }); - } - -} diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/application.properties b/dbrepo-identifier-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 22397307c12cb16208fe5e15fcd1580fc3f81bd9..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,28 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled = false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled = false -spring.cloud.config.enabled = false - -# internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# datacite -fda.datacite.url: https://api.test.datacite.org/ -fda.datacite.prefix: 10.12345 -fda.datacite.username: test-user -fda.datacite.password: test-password - -fda.mapping.path: /tmp -fda.table.path: /tmp \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-identifier-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/~ b/dbrepo-identifier-service/rest-service/~ deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java deleted file mode 100644 index 92b60f4f8a5ed8a566e2504d71b63478b1593f68..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.auth; - -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.DecodedJWT; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.util.Arrays; -import java.util.Base64; -import java.util.stream.Collectors; - -@Slf4j -public class AuthTokenFilter extends OncePerRequestFilter { - - @Value("${fda.jwt.issuer}") - private String issuer; - - @Value("${fda.jwt.public_key}") - private String publicKey; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - final String jwt = parseJwt(request); - if (jwt != null) { - final UserDetails userDetails = verifyJwt(jwt); - log.debug("authenticated user {}", userDetails); - final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(request, response); - } - - public UserDetails verifyJwt(String token) throws ServletException { - final KeyFactory kf; - try { - kf = KeyFactory.getInstance("RSA"); - } catch (NoSuchAlgorithmException e) { - log.error("Failed to find RSA algorithm"); - throw new ServletException("Failed to find RSA algorithm", e); - } - final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); - final RSAPublicKey pubKey; - try { - pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); - } catch (InvalidKeySpecException e) { - log.error("Provided public key is invalid"); - throw new ServletException("Provided public key is invalid", e); - } - final Algorithm algorithm = Algorithm.RSA256(pubKey, null); - JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(issuer) - .withAudience("spring") - .build(); - final DecodedJWT jwt = verifier.verify(token); - final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); - return UserDetailsDto.builder() - .username(jwt.getClaim("client_id").asString()) - .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) - .build(); - } - - /** - * Parses the token from the HTTP header of the request - * - * @param request The request. - * @return The token. - */ - public String parseJwt(HttpServletRequest request) { - String headerAuth = request.getHeader("Authorization"); - if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); - } - return null; - } -} \ No newline at end of file diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index ca023e1ad0977cb3a3bf18753d5b8f90c1ffa042..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.tuwien.config; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean("restTemplate") - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java deleted file mode 100644 index d38f17c6cb936e354b6b7362ccf8808476e24b47..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.thymeleaf.spring6.SpringTemplateEngine; -import org.thymeleaf.templatemode.TemplateMode; -import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; - -import java.nio.charset.StandardCharsets; - -@Configuration -public class TemplateConfig { - - @Bean - public SpringTemplateEngine springTemplateEngine() { - final SpringTemplateEngine springTemplateEngine = new SpringTemplateEngine(); - springTemplateEngine.addTemplateResolver(oaiTemplateResolver()); - return springTemplateEngine; - } - - private ClassLoaderTemplateResolver oaiTemplateResolver() { - final ClassLoaderTemplateResolver oaiTemplateResolver = new ClassLoaderTemplateResolver(); - oaiTemplateResolver.setPrefix("/templates/"); - oaiTemplateResolver.setSuffix(".xml"); - oaiTemplateResolver.setTemplateMode(TemplateMode.TEXT); - oaiTemplateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name()); - oaiTemplateResolver.setCacheable(false); - return oaiTemplateResolver; - } -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index 4169e7977c4d9cb037a3721080b08efc00c060a4..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,96 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpMethod; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import jakarta.servlet.http.HttpServletResponse; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/identifier/**", "GET"), - new AntPathRequestMatcher("/api/pid/**", "GET") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java deleted file mode 100644 index 84169f32e08a9580d23b3590bb7a5691dcfe3975..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.FORBIDDEN) -public class AccessDeniedException extends IOException { - - public AccessDeniedException(String msg) { - super(msg); - } - - public AccessDeniedException(String msg, Throwable thr) { - super(msg, thr); - } - - public AccessDeniedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java deleted file mode 100644 index f0bb71f36492511efbe2c8c959dcdb97c679702f..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class IdentifierNotFoundException extends Exception { - - public IdentifierNotFoundException(String msg) { - super(msg); - } - - public IdentifierNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public IdentifierNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java deleted file mode 100644 index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class NotAllowedException extends Exception { - - public NotAllowedException(String msg) { - super(msg); - } - - public NotAllowedException(String msg, Throwable thr) { - super(msg, thr); - } - - public NotAllowedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/RemoteUnavailableException.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/RemoteUnavailableException.java deleted file mode 100644 index 3e18ea33b547e4a47ab03594479a1cfce8bb8653..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/RemoteUnavailableException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.BAD_GATEWAY) -public class RemoteUnavailableException extends Exception { - - public RemoteUnavailableException(String msg) { - super(msg); - } - - public RemoteUnavailableException(String msg, Throwable thr) { - super(msg, thr); - } - - public RemoteUnavailableException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index 0abb87f609f0a6706c8e499eabc23e3d46d3304d..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found") -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String message) { - super(message); - } - - public UserNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java deleted file mode 100644 index 2f260975ff4746858184a4c8e5d4ee8268425625..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "View not found") -public class ViewNotFoundException extends Exception { - - public ViewNotFoundException(String message) { - super(message); - } - - public ViewNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public ViewNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/QueryServiceGateway.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/QueryServiceGateway.java deleted file mode 100644 index aef227e06f41f436c8e160efcc079a3736b149ce..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/QueryServiceGateway.java +++ /dev/null @@ -1,36 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.exception.QueryNotFoundException; -import at.tuwien.exception.RemoteUnavailableException; -import org.springframework.stereotype.Service; - -@Service -public interface QueryServiceGateway { - - /** - * Finds a query by given id from the query service that internally looks in the query store of a container. - * - * @param databaseId The database id. - * @param identifier The identifier containing the query id and database id. - * @param authorization The authorization token. - * @return The query information if successful. - * @throws QueryNotFoundException The query was not found. - * @throws RemoteUnavailableException The remote service is not available. - */ - QueryDto find(Long databaseId, IdentifierSaveDto identifier, String authorization) - throws QueryNotFoundException, RemoteUnavailableException; - - /** - * Exports a query by given id. - * - * @param databaseId The database id. - * @param queryId The query id. - * @return The exported resource as bytes. - * @throws RemoteUnavailableException The remote service is not available. - * @throws QueryNotFoundException The query was not found. - */ - byte[] export(Long databaseId, Long queryId) throws RemoteUnavailableException, - QueryNotFoundException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/QueryServiceGatewayImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/QueryServiceGatewayImpl.java deleted file mode 100644 index 093ad37d18c43e1612e1c8b21a091bd8d64e06e5..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/QueryServiceGatewayImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package at.tuwien.gateway.impl; - -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.exception.QueryNotFoundException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.gateway.QueryServiceGateway; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.*; -import org.springframework.stereotype.Service; -import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; -import org.springframework.web.client.RestTemplate; - -@Slf4j -@Service -public class QueryServiceGatewayImpl implements QueryServiceGateway { - - private final RestTemplate restTemplate; - - @Autowired - public QueryServiceGatewayImpl(RestTemplate restTemplate) { - this.restTemplate = restTemplate; - } - - @Override - public QueryDto find(Long databaseId, IdentifierSaveDto identifier, String authorization) throws QueryNotFoundException, - RemoteUnavailableException { - final HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", authorization); - final String url = - "/api/database/" + databaseId + "/query/" + identifier.getQueryId(); - final ResponseEntity<QueryDto> response; - try { - log.trace("call gateway path {}", url); - response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers), QueryDto.class); - } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable e) { - log.error("Query service not available for database with id {} for query with id {}, reason {}", - databaseId, identifier.getQueryId(), e.getMessage()); - throw new RemoteUnavailableException("Query service not available", e); - } - if (response.getStatusCode().equals(HttpStatus.NOT_FOUND)) { - log.error("Query not found for and database with id {} for query with id {}", - databaseId, identifier.getQueryId()); - throw new QueryNotFoundException("Query not found"); - } - if (response.getStatusCode().equals(HttpStatus.UNAUTHORIZED)) { - log.error("Query not authorized for and database with id {} for query with id {}", - databaseId, identifier.getQueryId()); - throw new RemoteUnavailableException("Query not authorized"); - } - log.debug("found query {}", response.getBody()); - return response.getBody(); - } - - @Override - public byte[] export(Long databaseId, Long queryId) - throws RemoteUnavailableException, QueryNotFoundException { - final String url = "/database/" + databaseId + "/query/" + queryId + "/export"; - final HttpHeaders headers = new HttpHeaders(); - headers.add("Accept", "text/csv"); - final ResponseEntity<byte[]> response; - try { - log.trace("call gateway path {}", url); - response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers), byte[].class); - } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable e) { - log.error("Query service not available: {}", e.getMessage()); - throw new RemoteUnavailableException("Query service not available", e); - } - if (response.getStatusCode().equals(HttpStatus.NOT_FOUND)) { - log.error("Query not found for and database with id {} for query with id {}", - databaseId, queryId); - throw new QueryNotFoundException("Query not found"); - } - if (response.getStatusCode().equals(HttpStatus.UNAUTHORIZED)) { - log.error("Query not authorized for and database with id {} for query with id {}", - databaseId, queryId); - throw new RemoteUnavailableException("Query not authorized"); - } - log.debug("found query {}", response.getBody()); - return response.getBody(); - } -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index bac8f626c26760326cf2dfd17027b5d2e5d29cd1..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.user.GrantedAuthorityDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - /* keep */ - @Mappings({ - @Mapping(target = "id", expression = "java(data.getId().toString())") - }) - UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); - - default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { - return new SimpleGrantedAuthority(data.getAuthority()); - } -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/AccessRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/AccessRepository.java deleted file mode 100644 index 643d28edf28aa429d6052477ff07eb5e0ea548a4..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/AccessRepository.java +++ /dev/null @@ -1,24 +0,0 @@ - -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.DatabaseAccessKey; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface AccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> { - - /** - * Finds database access by given database id and user id. - * - * @param databaseId The database id. - * @param userId The user id. - * @return Non-empty optional if this database access exists, empty optional otherwise. - */ - Optional<DatabaseAccess> findByHdbidAndHuserid(Long databaseId, UUID userId); - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index 04a8da854e9fdcc99a059c3aa1d7728e21b8780b..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index df6ec321689ad7fa1c05eb1430177aae79122133..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index b1020fdcc532602d72cad5018b964edec4f25eea..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java deleted file mode 100644 index da00aae798c0a66a096e6b85b1a8ed92362c7f73..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.License; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface LicenseRepository extends JpaRepository<License, String> { -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 67377273717420aee00239b28325d06e7d87f8ab..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,12 +0,0 @@ - -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index 5cbbeb08bacd52ffc1b3fd021928dd06e7fbb16e..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,11 +0,0 @@ - -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index 7244c3455c0a7d01a2649cec769d0c0dc09e3e6a..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,22 +0,0 @@ - -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - /** - * Finds an user by given username. - * - * @param username The username. - * @return Non-empty optional if this user exists, empty optional otherwise. - */ - Optional<User> findByUsername(String username); - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java deleted file mode 100644 index 7c1fec39225336bb1ec6ffb15d70798d5f66f482..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java +++ /dev/null @@ -1,11 +0,0 @@ - -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.View; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ViewRepository extends JpaRepository<View, Long> { - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/AccessService.java deleted file mode 100644 index 1cb63e6a239d4dd1a430bd36710559dc87694eed..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/AccessService.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.AccessDeniedException; - -import java.util.UUID; - -public interface AccessService { - - /** - * Finds database access by given database id and user id. - * - * @param databaseId The database id. - * @param userId The user id. - * @return The database access. - * @throws AccessDeniedException The access does not exist. - */ - DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/DatabaseService.java deleted file mode 100644 index 1d081f4441ee1e3684c00a23815143c4986b93bf..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; - -public interface DatabaseService { - - /** - * Finds a database by given id in the remote database service. - * - * @param databaseId The database id. - * @return The database. - * @throws DatabaseNotFoundException The database was not found. - */ - Database find(Long databaseId) throws DatabaseNotFoundException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/IdentifierService.java deleted file mode 100644 index 6f01237644d735feee0995e85415c3b0f6da1448..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ /dev/null @@ -1,122 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.*; -import org.springframework.core.io.InputStreamResource; -import org.springframework.stereotype.Service; - -import java.security.Principal; -import java.util.List; - -@Service -public interface IdentifierService { - - /** - * Finds all identifiers in the metadata database which are not deleted. Optionally, the result can be filtered by - * database id and/or query id. - * - * @param databaseId Optional. The database id. - * @param queryId Optional. The query id. - * @param viewId Optional. The view id. - * @return List of identifiers - */ - List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId); - - /** - * Finds all identifiers in the metadata database which are not deleted and filter by query id. - * - * @param databaseId The database id. - * @param queryId The query id. - * @return The identifier, if found. - */ - List<Identifier> findByDatabaseIdAndQueryId(Long databaseId, Long queryId); - - /** - * Creates a new identifier in the metadata database for a query or database. - * - * @param data The identifier. - * @param principal The authorization principal. - * @param authorization The authorization bearer. - * @return The created identifier from the metadata database if successful. - * @throws IdentifierPublishingNotAllowedException The identifier with this visibility could not be created. - * @throws QueryNotFoundException The query with this id (in the data) could not be created. - * @throws RemoteUnavailableException The connection to the Query Store could not be established by - * the database connector. - * @throws IdentifierAlreadyExistsException The identifier for this query/database already exists. - * @throws UserNotFoundException The user was not found in the metadata database. - * @throws DatabaseNotFoundException The database was not found in the metadata database. - */ - Identifier create(IdentifierSaveDto data, Principal principal, String authorization) - throws IdentifierPublishingNotAllowedException, QueryNotFoundException, - RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, - DatabaseNotFoundException, IdentifierRequestException, ViewNotFoundException; - - /** - * Finds an identifier by given id in the metadata database. - * - * @param identifierId The identifier id. - * @return The identifier, if successful. - * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. - */ - Identifier find(Long identifierId) throws IdentifierNotFoundException; - - /** - * Export metadata for a identifier - * - * @param id The identifier id. - * @return The export, if successful. - * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. - */ - InputStreamResource exportMetadata(Long id) throws IdentifierNotFoundException; - - /** - * Export metadata for bibliography for a identifier. - * - * @param id The identifier id. - * @param style The identifier bibliography style. Optional. Default: APA. - * @return The export, if successful. - * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. - * @throws IdentifierRequestException The identifier style was not found. - */ - String exportBibliography(Long id, BibliographyTypeDto style) throws IdentifierNotFoundException, - IdentifierRequestException; - - /** - * Exports an identifier to XML - * - * @param identifierId The identifier id. - * @return The XML resource, if successful. - * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. - * @throws QueryNotFoundException The query was not found in the metadata database or was deleted. - * @throws RemoteUnavailableException The connection to the Query Store could not be established by the database - * connector. - * @throws IdentifierRequestException The identifier does not allow for exporting. - */ - InputStreamResource exportResource(Long identifierId) - throws IdentifierNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierRequestException; - - /** - * Updated the metadata (only) on the identifier for a given id in the metadata database. - * - * @param identifierId The identifier id. - * @param data The metadata. - * @param principal The user principal. - * @return The updated identifier if successful. - */ - Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal, String authorization) - throws UserNotFoundException, DatabaseNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierRequestException, IdentifierNotFoundException; - - /** - * Soft-deletes an identifier for a given id in the metadata database. Does not actually remove the entity from the - * database, but sets it as deleted. - * - * @param identifierId The identifier id. - * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. - */ - void delete(Long identifierId) throws IdentifierNotFoundException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/MetadataService.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/MetadataService.java deleted file mode 100644 index 0c34b4d3bfcd7677b194a4d137ca38da7c2fd9e3..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/MetadataService.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.exception.DoiNotFoundException; -import at.tuwien.exception.OrcidNotFoundException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.exception.RorNotFoundException; - -public interface MetadataService { - - /** - * Finds creator user metadata by remote service and user identifier. - * - * @param url The user identifier. - * @return The user metadata. - * @throws OrcidNotFoundException The provided identifier is of ORCID type and does not exist. - * @throws RorNotFoundException The provided identifier is of ROR type and does not exist. - * @throws RemoteUnavailableException The remote service is not supported. - */ - ExternalMetadataDto findByUrl(String url) throws OrcidNotFoundException, RorNotFoundException, RemoteUnavailableException, DoiNotFoundException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index b72b76179efe26d7cc5c51e647a930036214e9ff..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -public interface UserService { - - /** - * Finds a user with given username. - * - * @param username The username. - * @return The user. - * @throws UserNotFoundException The user does not exist. - */ - User findByUsername(String username) throws UserNotFoundException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/ViewService.java deleted file mode 100644 index 9dc1637a549a11791493459024351742ab097e66..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/ViewService.java +++ /dev/null @@ -1,8 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.View; -import at.tuwien.exception.ViewNotFoundException; - -public interface ViewService { - View findById(Long id) throws ViewNotFoundException; -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java deleted file mode 100644 index c086a2990c4f405ebc7d45a5cbbd47b8a3a4432b..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.AccessDeniedException; -import at.tuwien.repository.mdb.AccessRepository; -import at.tuwien.service.AccessService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; -import java.util.UUID; - -@Log4j2 -@Service -public class AccessServiceImpl implements AccessService { - - private final AccessRepository accessRepository; - - @Autowired - public AccessServiceImpl(AccessRepository accessRepository) { - this.accessRepository = accessRepository; - } - - @Override - public DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException { - final Optional<DatabaseAccess> optional = accessRepository.findByHdbidAndHuserid(databaseId, userId); - if (optional.isEmpty()) { - log.error("Failed to find access for user with id {}", userId); - throw new AccessDeniedException("Failed to find access"); - } - return optional.get(); - } -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java deleted file mode 100644 index 094995eb3e77ccaba894e22877d0118a5ff362f8..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ /dev/null @@ -1,36 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.service.DatabaseService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Optional; - -@Log4j2 -@Service -public class DatabaseServiceImpl implements DatabaseService { - - private final DatabaseRepository databaseRepository; - - @Autowired - public DatabaseServiceImpl(DatabaseRepository databaseRepository) { - this.databaseRepository = databaseRepository; - } - - @Override - @Transactional(readOnly = true) - public Database find(Long databaseId) throws DatabaseNotFoundException { - final Optional<Database> database = databaseRepository.findById(databaseId); - if (database.isEmpty()) { - log.error("Failed to find database"); - throw new DatabaseNotFoundException("Failed to find database"); - } - return database.get(); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java deleted file mode 100644 index 0a77b17ae17c5393132b505840048fe2df12db11..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ /dev/null @@ -1,353 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.identifier.*; -import at.tuwien.config.EndpointConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.LanguageType; -import at.tuwien.entities.database.View; -import at.tuwien.entities.identifier.*; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.QueryServiceGateway; -import at.tuwien.mapper.IdentifierMapper; -import at.tuwien.repository.sdb.IdentifierIdxRepository; -import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.IdentifierService; -import at.tuwien.service.UserService; -import at.tuwien.service.ViewService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.IOUtils; -import org.springframework.core.io.InputStreamResource; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.thymeleaf.TemplateEngine; -import org.thymeleaf.context.Context; -import org.thymeleaf.exceptions.TemplateInputException; - -import java.io.ByteArrayInputStream; -import java.nio.charset.Charset; -import java.security.Principal; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Stream; - -@Slf4j -@Service -public class IdentifierServiceImpl implements IdentifierService { - - private final UserService userService; - private final ViewService viewService; - private final EndpointConfig endpointConfig; - private final TemplateEngine templateEngine; - private final DatabaseService databaseService; - private final IdentifierMapper identifierMapper; - private final QueryServiceGateway queryServiceGateway; - private final IdentifierRepository identifierRepository; - private final IdentifierIdxRepository identifierIdxRepository; - - public IdentifierServiceImpl(UserService userService, ViewService viewService, EndpointConfig endpointConfig, - TemplateEngine templateEngine, DatabaseService databaseService, - IdentifierMapper identifierMapper, QueryServiceGateway queryServiceGateway, - IdentifierRepository identifierRepository, - IdentifierIdxRepository identifierIdxRepository) { - this.userService = userService; - this.viewService = viewService; - this.endpointConfig = endpointConfig; - this.templateEngine = templateEngine; - this.databaseService = databaseService; - this.identifierMapper = identifierMapper; - this.queryServiceGateway = queryServiceGateway; - this.identifierRepository = identifierRepository; - this.identifierIdxRepository = identifierIdxRepository; - } - - @Override - @Transactional(readOnly = true) - public List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId) { - final List<Identifier> identifiers = this.identifierRepository.findAll(); - Stream<Identifier> stream = identifiers.stream(); - if (type != null) { - log.trace("filter by type: {}", type); - stream = stream.filter(i -> Objects.nonNull(i.getType())) - .filter(i -> i.getType().equals(identifierMapper.identifierTypeDtoToIdentifierType(type))); - } - if (databaseId != null) { - log.trace("filter by database id: {}", databaseId); - stream = stream.filter(i -> Objects.nonNull(i.getDatabaseId())) - .filter(i -> i.getDatabaseId().equals(databaseId)); - } - if (queryId != null) { - log.trace("filter by query id: {}", queryId); - stream = stream.filter(i -> Objects.nonNull(i.getQueryId())) - .filter(i -> i.getQueryId().equals(queryId)); - } - if (viewId != null) { - log.trace("filter by view id: {}", viewId); - stream = stream.filter(i -> Objects.nonNull(i.getViewId())) - .filter(i -> i.getViewId().equals(viewId)); - } - return stream.toList(); - } - - @Override - @Transactional(readOnly = true) - public List<Identifier> findByDatabaseIdAndQueryId(Long databaseId, Long queryId) { - return identifierRepository.findByDatabaseIdAndQueryId(databaseId, queryId); - } - - @Override - @Transactional - public Identifier create(IdentifierSaveDto data, Principal principal, String authorization) - throws QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, - UserNotFoundException, DatabaseNotFoundException, IdentifierPublishingNotAllowedException, - IdentifierRequestException, ViewNotFoundException { - /* check */ - if (data.getType().equals(IdentifierTypeDto.DATABASE) && identifierRepository.existsByDatabaseIdAndType(data.getDatabaseId(), IdentifierType.DATABASE)) { - log.error("Identifier already issued for database with id {}", data.getDatabaseId()); - throw new IdentifierAlreadyExistsException("Database identifier already exists"); - } else if (data.getType().equals(IdentifierTypeDto.SUBSET) && identifierRepository.existsByDatabaseIdAndQueryIdAndType(data.getDatabaseId(), data.getQueryId(), IdentifierType.SUBSET)) { - log.error("Identifier already issued for database with id {} and query with id {}", data.getDatabaseId(), data.getQueryId()); - throw new IdentifierAlreadyExistsException("Subset identifier already exists"); - } - /* create identifier */ - final Identifier identifier = identifierMapper.identifierCreateDtoToIdentifier(data); - final User creator = userService.findByUsername(principal.getName()); - identifier.setCreator(creator); - identifier.setDatabaseId(data.getDatabaseId()); - final Database database = databaseService.find(data.getDatabaseId()); - identifier.setDatabase(database); - if (data.getType().equals(IdentifierTypeDto.SUBSET)) { - log.debug("identifier type: subset"); - final QueryDto query = queryServiceGateway.find(data.getDatabaseId(), data, authorization); - identifier.setQuery(query.getQuery()); - identifier.setQueryId(query.getId()); - identifier.setQueryNormalized(query.getQueryNormalized()); - identifier.setQueryHash(query.getQueryHash()); - identifier.setExecution(query.getExecution()); - identifier.setResultNumber(query.getResultNumber()); - identifier.setResultHash(query.getResultHash()); - } else if (data.getType().equals(IdentifierTypeDto.VIEW)) { - log.debug("identifier type: view"); - final View view = viewService.findById(data.getViewId()); - identifier.setViewId(view.getId()); - identifier.setQuery(view.getQuery()); - identifier.setQueryNormalized(view.getQuery()); - identifier.setQueryHash(view.getQueryHash()); - } - /* create in metadata database */ - final Identifier entity = saveIdentifier(identifier, data.getCreators(), data.getRelatedIdentifiers(), - data.getTitles(), data.getDescriptions(), data.getFunders()); - log.info("Created identifier with id {} in metadata database", entity.getId()); - /* create in open search database */ - identifierIdxRepository.save(identifierMapper.identifierToIdentifierDto(entity)); - log.info("Created identifier with id {} in open search database", entity.getId()); - return entity; - } - - @Override - @Transactional(readOnly = true) - public Identifier find(Long identifierId) throws IdentifierNotFoundException { - final Optional<Identifier> optional = identifierRepository.findById(identifierId); - if (optional.isEmpty()) { - log.error("Identifier with id {} not existing", identifierId); - throw new IdentifierNotFoundException("Unable to find identifier"); - } - return optional.get(); - } - - @Override - @Transactional(readOnly = true) - public InputStreamResource exportMetadata(Long id) throws IdentifierNotFoundException { - /* check */ - final Identifier identifier = find(id); - /* context */ - final Context context = new Context(); - if (identifier.getDoi() != null) { - context.setVariable("identifierType", "DOI"); - context.setVariable("identifier", identifier.getDoi()); - } else { - context.setVariable("identifierType", "PID"); - context.setVariable("identifier", endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId()); - } - context.setVariable("language", identifier.getLanguage()); - context.setVariable("creators", identifier.getCreators()); - context.setVariable("titles", identifier.getTitles()); - context.setVariable("publisher", identifier.getPublisher()); - context.setVariable("publicationYear", identifier.getPublicationYear()); - context.setVariable("created", identifier.getCreated()); - context.setVariable("relatedIdentifiers", identifier.getRelatedIdentifiers()); - context.setVariable("funders", identifier.getFunders()); - context.setVariable("descriptions", identifier.getDescriptions()); - context.setVariable("licenses", identifier.getLicenses()); - /* map */ - final String body = templateEngine.process("doi.xml", context) - .replaceAll("\\s+", " "); - final InputStreamResource resource = new InputStreamResource(IOUtils.toInputStream(body, Charset.defaultCharset())); - log.debug("mapped file stream {}", resource.getDescription()); - return resource; - } - - @Override - @Transactional(readOnly = true) - public String exportBibliography(Long id, BibliographyTypeDto style) - throws IdentifierNotFoundException, IdentifierRequestException { - /* check */ - final Identifier identifier = find(id); - /* context */ - final Context context = new Context(); - if (identifier.getDoi() != null) { - context.setVariable("identifierType", "doi"); - context.setVariable("identifier", identifier.getDoi()); - } else { - context.setVariable("identifierType", "url"); - context.setVariable("identifier", endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId()); - } - context.setVariable("creator", identifier.getCreator()); - context.setVariable("creators", identifier.getCreators()); - context.setVariable("title", preferTitle(identifier.getTitles())); - context.setVariable("publisher", identifier.getPublisher()); - context.setVariable("publicationMonth", identifier.getPublicationMonth()); - context.setVariable("publicationYear", identifier.getPublicationYear()); - /* map */ - final String template = "cite_" + style.name().toLowerCase() + ".txt"; - final String body; - try { - body = templateEngine.process(template, context); - } catch (TemplateInputException e) { - log.error("Failed to load template: {}", e.getMessage()); - throw new IdentifierRequestException("Failed to load template", e); - } - log.trace("mapped bibliography {}", body); - return body; - } - - @Override - @Transactional(readOnly = true) - public InputStreamResource exportResource(Long identifierId) throws IdentifierNotFoundException, - QueryNotFoundException, RemoteUnavailableException, IdentifierRequestException { - /* check */ - final Identifier identifier = find(identifierId); - if (identifier.getType().equals(IdentifierType.DATABASE)) { - log.error("Failed to find identifier with id {} as it refers to a database and not a query", identifierId); - throw new IdentifierRequestException("Failed to find identifier"); - } - /* subset */ - final byte[] file = queryServiceGateway.export(identifier.getDatabase().getId(), identifier.getQueryId()); - final InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(file)); - log.trace("found resource {}", resource); - return resource; - } - - @Override - @Transactional - public Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal, String authorization) - throws UserNotFoundException, DatabaseNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierNotFoundException { - /* find doi */ - final Identifier oldIdentifier = find(identifierId); - /* create identifier */ - final Identifier identifier = identifierMapper.identifierUpdateDtoToIdentifier(data); - identifier.setId(identifierId); - identifier.setDoi(oldIdentifier.getDoi()); - final User creator = userService.findByUsername(principal.getName()); - identifier.setCreator(creator); - final Database database = databaseService.find(data.getDatabaseId()); - identifier.setDatabase(database); - if (data.getType().equals(IdentifierTypeDto.SUBSET)) { - log.debug("identifier describes a subset"); - final IdentifierSaveDto payload = identifierMapper.identifierUpdateDtoToIdentifierCreateDto(data); - final QueryDto query = queryServiceGateway.find(data.getDatabaseId(), payload, authorization); - identifier.setQuery(query.getQuery()); - identifier.setQueryId(query.getId()); - identifier.setQueryNormalized(query.getQueryNormalized()); - identifier.setQueryHash(query.getQueryHash()); - identifier.setExecution(query.getExecution()); - identifier.setResultNumber(query.getResultNumber()); - identifier.setResultHash(query.getResultHash()); - } - /* update in metadata database */ - final Identifier entity = saveIdentifier(identifier, data.getCreators(), data.getRelatedIdentifiers(), - data.getTitles(), data.getDescriptions(), data.getFunders()); - log.info("Updated identifier with id {} in metadata database", identifierId); - /* update in open search database */ - identifierIdxRepository.save(identifierMapper.identifierToIdentifierDto(entity)); - log.info("Updated identifier with id {} in open search database", identifierId); - return entity; - } - - @Override - @Transactional - public void delete(Long identifierId) throws IdentifierNotFoundException { - /* delete in metadata database */ - if (!identifierRepository.existsById(identifierId)) { - log.error("Failed to find identifier with id {} in metadata database", identifierId); - throw new IdentifierNotFoundException("Failed to find identifier with id " + identifierId + " in metadata database"); - } - identifierRepository.deleteById(identifierId); - log.info("Deleted identifier with id {} in metadata database", identifierId); - /* delete in elastic search */ - if (!identifierIdxRepository.existsById(identifierId)) { - log.error("Failed to find identifier with id {} in open search database", identifierId); - throw new IdentifierNotFoundException("Failed to find identifier with id " + identifierId + " in open search database"); - } - identifierIdxRepository.deleteById(identifierId); - log.info("Deleted identifier with id {} in open search database", identifierId); - } - - public IdentifierTitle preferTitle(List<IdentifierTitle> titles) { - final Optional<IdentifierTitle> optional = titles.stream() - .filter(t -> Objects.nonNull(t.getLanguage())) - .filter(t -> t.getLanguage().equals(LanguageType.EN)) - .findFirst(); - return optional.orElseGet(() -> titles.get(0)); - } - - public Identifier saveIdentifier(Identifier identifier, List<CreatorSaveDto> creators, - List<RelatedIdentifierSaveDto> relatedIdentifiers, - List<IdentifierSaveTitleDto> titles, - List<IdentifierSaveDescriptionDto> descriptions, - List<IdentifierFunderSaveDto> funders) { - /* create in metadata database */ - if (creators != null) { - identifier.setCreators(creators.stream() - .map(identifierMapper::creatorCreateDtoToCreator) - .peek(c -> c.setIdentifier(identifier)) - .toList()); - log.debug("set {} creator(s)", identifier.getCreators().size()); - } - if (relatedIdentifiers != null) { - identifier.setRelatedIdentifiers(relatedIdentifiers.stream() - .map(identifierMapper::relatedIdentifierCreateDtoToRelatedIdentifier) - .peek(r -> r.setIdentifier(identifier)) - .toList()); - log.debug("set {} related identifier(s)", identifier.getRelatedIdentifiers().size()); - } - if (titles != null) { - identifier.setTitles(null); - identifier.setTitles(titles.stream() - .map(identifierMapper::identifierCreateTitleDtoToIdentifierTitle) - .peek(t -> t.setIdentifier(identifier)) - .toList()); - log.debug("set {} title(s)", identifier.getTitles().size()); - } - if (descriptions != null) { - identifier.setDescriptions(descriptions.stream() - .map(identifierMapper::identifierCreateDescriptionDtoToIdentifierDescription) - .peek(d -> d.setIdentifier(identifier)) - .toList()); - log.debug("set {} description(s)", identifier.getDescriptions().size()); - } - if (funders != null) { - identifier.setFunders(funders.stream() - .map(identifierMapper::identifierFunderSaveDtoToIdentifierFunder) - .peek(d -> d.setIdentifier(identifier)) - .toList()); - log.debug("set {} funder(s)", identifier.getFunders().size()); - } - return identifierRepository.save(identifier); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java deleted file mode 100644 index 8c06fcfede41536dd2ec358bcf071a73f9848ac4..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.api.ror.RorDto; -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.exception.DoiNotFoundException; -import at.tuwien.exception.OrcidNotFoundException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.exception.RorNotFoundException; -import at.tuwien.gateway.CrossrefGateway; -import at.tuwien.gateway.OrcidGateway; -import at.tuwien.gateway.RorGateway; -import at.tuwien.mapper.ExternalMapper; -import at.tuwien.service.MetadataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Slf4j -@Service -public class MetadataServiceImpl implements MetadataService { - - private final RorGateway rorGateway; - private final OrcidGateway orcidGateway; - private final ExternalMapper externalMapper; - private final CrossrefGateway crossrefGateway; - - @Autowired - public MetadataServiceImpl(RorGateway rorGateway, OrcidGateway orcidGateway, ExternalMapper externalMapper, - CrossrefGateway crossrefGateway) { - this.rorGateway = rorGateway; - this.orcidGateway = orcidGateway; - this.externalMapper = externalMapper; - this.crossrefGateway = crossrefGateway; - } - - @Override - public ExternalMetadataDto findByUrl(String url) throws OrcidNotFoundException, RorNotFoundException, - RemoteUnavailableException, DoiNotFoundException { - if (url.contains("orcid.org")) { - final OrcidDto orcidDto = orcidGateway.findByUrl(url); - return externalMapper.orcidDtoToExternalMetadataDto(orcidDto); - } else if (url.contains("ror.org")) { - final int idx = url.lastIndexOf('/'); - if (idx + 1 >= url.length()) { - log.error("Failed to find metadata from ROR URL: too short"); - throw new RorNotFoundException("Failed to find metadata from ROR URL: too short"); - } - final String id = url.substring(idx + 1); - final RorDto rorDto = rorGateway.findById(id); - return externalMapper.rorDtoToExternalMetadataDto(rorDto); - } else if (url.contains("doi.org")) { - final int idx = url.indexOf("doi.org/"); - if (idx + 1 >= url.length()) { - log.error("Failed to find metadata from CrossRef URL: too short"); - throw new RorNotFoundException("Failed to find metadata from CrossRef URL: too short"); - } - final String id = url.substring(idx + 8); - final CrossrefDto crossrefDto = crossrefGateway.findById(id); - return externalMapper.crossrefDtoToExternalMetadataDto(crossrefDto); - } - log.error("Failed to find metadata: unsupported identifier {}", url); - throw new RemoteUnavailableException("Failed to find metadata: unsupported identifier " + url); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 47f1ac286b3fa39407359baf5cdc58a4f8d700f5..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with username {}", username); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - -} diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java deleted file mode 100644 index 298ea15687407b57d7d870e1574c4a1c742d375d..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.View; -import at.tuwien.exception.ViewNotFoundException; -import at.tuwien.repository.mdb.ViewRepository; -import at.tuwien.service.ViewService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class ViewServiceImpl implements ViewService { - - private final ViewRepository viewRepository; - - @Autowired - public ViewServiceImpl(ViewRepository viewRepository) { - this.viewRepository = viewRepository; - } - - @Override - public View findById(Long id) throws ViewNotFoundException { - final Optional<View> optional = viewRepository.findById(id); - if (optional.isEmpty()) { - log.error("Failed to find view with id: {}", id); - throw new ViewNotFoundException("Failed to find view with id: " + id); - } - return optional.get(); - } -} diff --git a/dbrepo-identifier-service/~ b/dbrepo-identifier-service/~ deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-metadata-db/Dockerfile b/dbrepo-metadata-db/Dockerfile index d72c18f684a435f6eace5293522db46700eb249f..68c1a96a1f67d0ba1b14e82da95bb0c9f2406838 100644 --- a/dbrepo-metadata-db/Dockerfile +++ b/dbrepo-metadata-db/Dockerfile @@ -1,24 +1,3 @@ -###### FIRST STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY ./api ./api -COPY ./entities ./entities -COPY ./oai ./oai -COPY ./querystore ./querystore -COPY ./test ./test - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -# Install to local repository -RUN mvn -q clean install > /dev/null - -###### SECOND STAGE ###### FROM bitnami/mariadb:10.5 as runtime ENV METADATA_DB=fda @@ -33,8 +12,4 @@ COPY ./51-dbrepo.cnf /opt/bitnami/mariadb/conf/my_custom.cnf # Scripts are copied to /docker-entrypoint-initdb.d/ in docker-compose from analyze service HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD mysqladmin ping --user="$METADATA_USERNAME" --password="$METADATA_PASSWORD" --silent -COPY ./setup-schema.sql /docker-entrypoint-initdb.d/setup-schema.sql - -WORKDIR /app - -COPY --from=build /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien \ No newline at end of file +COPY ./setup-schema.sql /docker-entrypoint-initdb.d/setup-schema.sql \ No newline at end of file diff --git a/dbrepo-metadata-db/api/pom.xml b/dbrepo-metadata-db/api/pom.xml deleted file mode 100644 index 778642d6576efccb5160ca3ce4e117c05cbd4214..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/api/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>1.3.0</version> - <name>dbrepo-metadata-db-api</name> - - <dependencies/> - -</project> \ No newline at end of file diff --git a/dbrepo-metadata-db/entities/pom.xml b/dbrepo-metadata-db/entities/pom.xml deleted file mode 100644 index 4be01963321c88ffc3c4d003052d72d537d74073..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/entities/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>1.3.0</version> - <name>dbrepo-metadata-db-entity</name> - - <dependencies/> - -</project> \ No newline at end of file diff --git a/dbrepo-metadata-db/oai/pom.xml b/dbrepo-metadata-db/oai/pom.xml deleted file mode 100644 index 7b376d445ddf95f5979b61206eece81e0a6c9c6c..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/oai/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>dbrepo-metadata-db-oai</artifactId> - <version>1.3.0</version> - <name>dbrepo-metadata-db-oai</name> - - <dependencies/> - -</project> \ No newline at end of file diff --git a/dbrepo-metadata-db/pom.xml b/dbrepo-metadata-db/pom.xml deleted file mode 100644 index 35b8b185da8a4c6895057a76eecde59f3d1b23db..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/pom.xml +++ /dev/null @@ -1,93 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db</artifactId> - <version>1.3.0</version> - <name>dbrepo-metadata-db</name> - <description>Demo project for Spring Boot</description> - - <packaging>pom</packaging> - <modules> - <module>api</module> - <module>entities</module> - <module>querystore</module> - <module>oai</module> - <module>test</module> - </modules> - - <properties> - <java.version>17</java.version> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - <jsql-parser.version>4.6</jsql-parser.version> - <jackson-datatype.version>2.15.0</jackson-datatype.version> - <commons.version>2.11.0</commons.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-jsr310</artifactId> - <version>${jackson-datatype.version}</version> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>${commons.version}</version> - </dependency> - <!-- Utils --> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>31.1-jre</version> - </dependency> - <!-- SQL Parser --> - <dependency> - <groupId>com.github.jsqlparser</groupId> - <artifactId>jsqlparser</artifactId> - <version>${jsql-parser.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- OpenAPI --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - </dependencies> - - <!-- build at.tuwien.gateway.config in ./rest-service/pom.xml --> - -</project> diff --git a/dbrepo-metadata-db/querystore/pom.xml b/dbrepo-metadata-db/querystore/pom.xml deleted file mode 100644 index a65774524737eabc7500f304c246b8c28c5783b1..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/querystore/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>dbrepo-metadata-db-querystore</artifactId> - <version>1.3.0</version> - <name>dbrepo-metadata-db-querystore</name> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>1.3.0</version> - <scope>compile</scope> - </dependency> - </dependencies> - -</project> \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/MariaDbConfig.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/MariaDbConfig.java deleted file mode 100644 index f33a0aa099b5ecd7456611bca1aea1c136f1e2a6..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/MariaDbConfig.java +++ /dev/null @@ -1,139 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.querystore.Query; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; - -import java.sql.*; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -@Slf4j -@Configuration -public class MariaDbConfig { - - public static void createInitDatabase(Container container, Database database) throws SQLException { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - ResourceDatabasePopulator populator = new ResourceDatabasePopulator(new ClassPathResource("init/" + database.getInternalName() + ".sql"), new ClassPathResource("init/querystore.sql")); - populator.setSeparator(";\n"); - populator.populate(connection); - } - } - - public static void dropAllDatabases(Container container) { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - final String sql = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema');"; - log.trace("prepare statement '{}'", sql); - final PreparedStatement statement = connection.prepareStatement(sql); - final ResultSet resultSet = statement.executeQuery(); - final List<String> databases = new LinkedList<>(); - while (resultSet.next()) { - databases.add(resultSet.getString(1)); - } - resultSet.close(); - statement.close(); - for (String database : databases) { - final String drop = "DROP DATABASE IF EXISTS `" + database + "`;"; - final PreparedStatement dropStatement = connection.prepareStatement(drop); - dropStatement.executeUpdate(); - dropStatement.close(); - } - } catch (SQLException e) { - log.error("could not drop all databases", e); - } - } - - public static void insertQueryStore(Database database, Query query, String username) throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { - final PreparedStatement prepareStatement = connection.prepareStatement( - "INSERT INTO qs_queries (created_by, query, query_normalized, is_persisted, query_hash, result_hash, result_number, created, executed) VALUES (?,?,?,?,?,?,?,?,?)"); - prepareStatement.setString(1, username); - prepareStatement.setString(2, query.getQuery()); - prepareStatement.setString(3, query.getQuery()); - prepareStatement.setBoolean(4, query.getIsPersisted()); - prepareStatement.setString(5, query.getQueryHash()); - prepareStatement.setString(6, query.getResultHash()); - prepareStatement.setLong(7, query.getResultNumber()); - prepareStatement.setTimestamp(8, Timestamp.from(query.getCreated())); - prepareStatement.setTimestamp(9, Timestamp.from(query.getExecuted())); - log.trace("prepared statement: {}", prepareStatement); - prepareStatement.executeUpdate(); - } - } - - public static List<Map<String, Object>> listQueryStore(Database database) throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { - final Statement statement = connection.createStatement(); - final ResultSet result = statement.executeQuery( - "SELECT created_by, query, query_normalized, is_persisted, query_hash, result_hash, result_number, created, executed FROM qs_queries"); - final List<Map<String, Object>> rows = new LinkedList<>(); - while (result.next()) { - rows.add(new HashMap<>() {{ - put("created_by", result.getString(1)); - put("query", result.getString(2)); - put("query_normalized", result.getString(3)); - put("is_persisted", result.getBoolean(4)); - put("query_hash", result.getString(5)); - put("result_hash", result.getString(6)); - put("result_number", result.getLong(7)); - put("created", result.getTimestamp(8)); - put("executed", result.getTimestamp(9)); - }}); - } - return rows; - } - } - - public static List<Map<String, String>> selectQuery(Database database, String query, String... columns) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - final List<Map<String, String>> rows = new LinkedList<>(); - try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { - final Statement statement = connection.createStatement(); - final ResultSet result = statement.executeQuery(query); - while (result.next()) { - final Map<String, String> row = new HashMap<>(); - for (String column : columns) { - row.put(column, result.getString(column)); - } - rows.add(row); - } - } - return rows; - } - - public static void execute(Database database, String query) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { - final Statement statement = connection.createStatement(); - statement.executeUpdate(query); - } - } - - public static void execute(Container container, String query) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { - final Statement statement = connection.createStatement(); - statement.executeUpdate(query); - } - } -} diff --git a/dbrepo-metadata-db/test/src/test/resources/musicology/1_querystore.sql b/dbrepo-metadata-db/test/src/test/resources/musicology/1_querystore.sql deleted file mode 100644 index 2762d130a0044c439b41c0215b0d87924bc8f072..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/musicology/1_querystore.sql +++ /dev/null @@ -1,75 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` -( - `id` bigint not null primary key default nextval(`qs_queries_seq`), - `created` datetime not null default now(), - `executed` datetime not null default now(), - `created_by` varchar(255) not null, - `query` text not null, - `query_normalized` text not null, - `is_persisted` boolean not null, - `query_hash` varchar(255) not null, - `result_hash` varchar(255), - `result_number` bigint -); -DELIMITER $$ -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255)) -BEGIN - DECLARE _sql TEXT; - SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', - GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), - ') SEPARATOR \',\'), 256) AS hash FROM `', name, '` INTO @hash;') - FROM `information_schema`.`columns` - WHERE `table_schema` = DATABASE() - AND `table_name` = name - INTO _sql; - PREPARE stmt FROM _sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - SET hash = @hash; -END $$ -DELIMITER $$ -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER $$ -CREATE - DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER ; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/musicology/2_schema_data.sql b/dbrepo-metadata-db/test/src/test/resources/musicology/2_schema_data.sql deleted file mode 100644 index 91324167ad169987c0beda255612b1a620fcb93e..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/musicology/2_schema_data.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE SEQUENCE seq_mfcc; - -CREATE TABLE mfcc -( - id BIGINT PRIMARY KEY NOT NULL DEFAULT nextval(`seq_mfcc`), - value DECIMAL NOT NULL -) WITH SYSTEM VERSIONING; - -INSERT INTO `mfcc` (`value`) -VALUES (11.2), - (11.3), - (11.4), - (11.9), - (12.3), - (23.1); \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/musicology/3_users.sql b/dbrepo-metadata-db/test/src/test/resources/musicology/3_users.sql deleted file mode 100644 index 6a4244967779a981e2d23241d147bced80ba8b69..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/musicology/3_users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY PASSWORD '*440BA4FD1A87A0999647DB67C0EE258198B247BA'; -CREATE USER junit2 IDENTIFIED BY PASSWORD '*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE'; -CREATE USER junit3 IDENTIFIED BY PASSWORD '*D65FCA043964B63E849DD6334699ECB065905DA4'; -CREATE USER junit4 IDENTIFIED BY PASSWORD '*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882'; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/sensor/1_querystore.sql b/dbrepo-metadata-db/test/src/test/resources/sensor/1_querystore.sql deleted file mode 100644 index 2762d130a0044c439b41c0215b0d87924bc8f072..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/sensor/1_querystore.sql +++ /dev/null @@ -1,75 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` -( - `id` bigint not null primary key default nextval(`qs_queries_seq`), - `created` datetime not null default now(), - `executed` datetime not null default now(), - `created_by` varchar(255) not null, - `query` text not null, - `query_normalized` text not null, - `is_persisted` boolean not null, - `query_hash` varchar(255) not null, - `result_hash` varchar(255), - `result_number` bigint -); -DELIMITER $$ -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255)) -BEGIN - DECLARE _sql TEXT; - SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', - GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), - ') SEPARATOR \',\'), 256) AS hash FROM `', name, '` INTO @hash;') - FROM `information_schema`.`columns` - WHERE `table_schema` = DATABASE() - AND `table_name` = name - INTO _sql; - PREPARE stmt FROM _sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - SET hash = @hash; -END $$ -DELIMITER $$ -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER $$ -CREATE - DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER ; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/sensor/2_traffic.sql b/dbrepo-metadata-db/test/src/test/resources/sensor/2_traffic.sql deleted file mode 100644 index 93d293a6fe9ee11cbd662208a85089ac3f9fab99..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/sensor/2_traffic.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE SEQUENCE seq_sensor - START 1; - -CREATE TABLE sensor -( - `timestamp` TIMESTAMP NULL, - primary key (`timestamp`) -) with system versioning; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/sensor/3_users.sql b/dbrepo-metadata-db/test/src/test/resources/sensor/3_users.sql deleted file mode 100644 index 6a4244967779a981e2d23241d147bced80ba8b69..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/sensor/3_users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY PASSWORD '*440BA4FD1A87A0999647DB67C0EE258198B247BA'; -CREATE USER junit2 IDENTIFIED BY PASSWORD '*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE'; -CREATE USER junit3 IDENTIFIED BY PASSWORD '*D65FCA043964B63E849DD6334699ECB065905DA4'; -CREATE USER junit4 IDENTIFIED BY PASSWORD '*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882'; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/species/1_querystore.sql b/dbrepo-metadata-db/test/src/test/resources/species/1_querystore.sql deleted file mode 100644 index 2762d130a0044c439b41c0215b0d87924bc8f072..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/species/1_querystore.sql +++ /dev/null @@ -1,75 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` -( - `id` bigint not null primary key default nextval(`qs_queries_seq`), - `created` datetime not null default now(), - `executed` datetime not null default now(), - `created_by` varchar(255) not null, - `query` text not null, - `query_normalized` text not null, - `is_persisted` boolean not null, - `query_hash` varchar(255) not null, - `result_hash` varchar(255), - `result_number` bigint -); -DELIMITER $$ -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255)) -BEGIN - DECLARE _sql TEXT; - SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', - GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), - ') SEPARATOR \',\'), 256) AS hash FROM `', name, '` INTO @hash;') - FROM `information_schema`.`columns` - WHERE `table_schema` = DATABASE() - AND `table_name` = name - INTO _sql; - PREPARE stmt FROM _sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - SET hash = @hash; -END $$ -DELIMITER $$ -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER $$ -CREATE - DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER ; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/species/2_schema_data.sql b/dbrepo-metadata-db/test/src/test/resources/species/2_schema_data.sql deleted file mode 100644 index 957368fcc773ecf22f419585b50206ad56359bc9..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/species/2_schema_data.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* https://sandbox.zenodo.org/api/files/6aca3421-add3-489b-8c4a-35228fe5c683/species_id.csv */ -CREATE TABLE maldi_ms_data -( - qu VARCHAR(255) NOT NULL, - species VARCHAR(255) NOT NULL, - score VARCHAR(255) NOT NULL -) WITH SYSTEM VERSIONING; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/species/3_users.sql b/dbrepo-metadata-db/test/src/test/resources/species/3_users.sql deleted file mode 100644 index 6a4244967779a981e2d23241d147bced80ba8b69..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/species/3_users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY PASSWORD '*440BA4FD1A87A0999647DB67C0EE258198B247BA'; -CREATE USER junit2 IDENTIFIED BY PASSWORD '*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE'; -CREATE USER junit3 IDENTIFIED BY PASSWORD '*D65FCA043964B63E849DD6334699ECB065905DA4'; -CREATE USER junit4 IDENTIFIED BY PASSWORD '*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882'; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/weather/1_querystore.sql b/dbrepo-metadata-db/test/src/test/resources/weather/1_querystore.sql deleted file mode 100644 index 2762d130a0044c439b41c0215b0d87924bc8f072..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/weather/1_querystore.sql +++ /dev/null @@ -1,75 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` -( - `id` bigint not null primary key default nextval(`qs_queries_seq`), - `created` datetime not null default now(), - `executed` datetime not null default now(), - `created_by` varchar(255) not null, - `query` text not null, - `query_normalized` text not null, - `is_persisted` boolean not null, - `query_hash` varchar(255) not null, - `result_hash` varchar(255), - `result_number` bigint -); -DELIMITER $$ -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255)) -BEGIN - DECLARE _sql TEXT; - SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', - GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), - ') SEPARATOR \',\'), 256) AS hash FROM `', name, '` INTO @hash;') - FROM `information_schema`.`columns` - WHERE `table_schema` = DATABASE() - AND `table_name` = name - INTO _sql; - PREPARE stmt FROM _sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - SET hash = @hash; -END $$ -DELIMITER $$ -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER $$ -CREATE - DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER ; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/weather/2_schema_data.sql b/dbrepo-metadata-db/test/src/test/resources/weather/2_schema_data.sql deleted file mode 100644 index d82b0fc3d21b0465ea2b2dadb02cc339cff453c9..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/weather/2_schema_data.sql +++ /dev/null @@ -1,62 +0,0 @@ -/* https://www.kaggle.com/jsphyg/weather-dataset-rattle-package */ -CREATE TABLE weather_location -( - location VARCHAR(255) PRIMARY KEY, - lat DOUBLE PRECISION NULL, - lng DOUBLE PRECISION NULL -) WITH SYSTEM VERSIONING; - -CREATE TABLE weather_aus -( - id BIGINT NOT NULL PRIMARY KEY, - `date` DATE NOT NULL, - location VARCHAR(255) NULL, - mintemp DOUBLE PRECISION NULL, - rainfall DOUBLE PRECISION NULL, - FOREIGN KEY (location) REFERENCES weather_location (location), - UNIQUE (`date`), - CHECK (`mintemp` > 0) -) WITH SYSTEM VERSIONING; - -CREATE TABLE sensor -( - `timestamp` TIMESTAMP NOT NULL PRIMARY KEY, - `value` DECIMAL -) WITH SYSTEM VERSIONING; - -INSERT INTO weather_location (location, lat, lng) -VALUES ('Albury', -36.0653583, 146.9112214), - ('Sydney', -33.847927, 150.6517942), - ('Vienna', null, null); - -INSERT INTO weather_aus (id, `date`, location, mintemp, rainfall) -VALUES (1, '2008-12-01', 'Albury', 13.4, 0.6), - (2, '2008-12-02', 'Albury', 7.4, 0), - (3, '2008-12-03', 'Albury', 12.9, 0); - -INSERT INTO sensor (`timestamp`, value) -VALUES ('2022-12-24 17:00:00', 10.0), - ('2022-12-24 18:00:00', 10.2), - ('2022-12-24 19:00:00', null), - ('2022-12-24 20:00:00', 10.3), - ('2022-12-24 21:00:00', 10.0), - ('2022-12-24 22:00:00', null); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW junit2 AS -( -select `date`, `location`, `mintemp`, `rainfall` -from `weather_aus` -where `location` = 'Albury'); - -CREATE VIEW `hs_weather_aus` AS -SELECT * -FROM (SELECT `id`, ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total - FROM `weather_aus` FOR SYSTEM_TIME ALL - GROUP BY inserted_at, deleted_at - ORDER BY deleted_at DESC - LIMIT 50) AS v -ORDER BY v.inserted_at, v.deleted_at ASC; diff --git a/dbrepo-metadata-db/test/src/test/resources/weather/3_users.sql b/dbrepo-metadata-db/test/src/test/resources/weather/3_users.sql deleted file mode 100644 index 6a4244967779a981e2d23241d147bced80ba8b69..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/weather/3_users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY PASSWORD '*440BA4FD1A87A0999647DB67C0EE258198B247BA'; -CREATE USER junit2 IDENTIFIED BY PASSWORD '*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE'; -CREATE USER junit3 IDENTIFIED BY PASSWORD '*D65FCA043964B63E849DD6334699ECB065905DA4'; -CREATE USER junit4 IDENTIFIED BY PASSWORD '*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882'; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/weather/location.csv b/dbrepo-metadata-db/test/src/test/resources/weather/location.csv deleted file mode 100644 index b9410c65c9b4169eb1a231dbe5ca04ff20c116cf..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/weather/location.csv +++ /dev/null @@ -1,2 +0,0 @@ -Albury,-36.0653583,146.9112214 -Sydney,-33.847927,150.6517942 \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/zoo/1_querystore.sql b/dbrepo-metadata-db/test/src/test/resources/zoo/1_querystore.sql deleted file mode 100644 index 2762d130a0044c439b41c0215b0d87924bc8f072..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/zoo/1_querystore.sql +++ /dev/null @@ -1,75 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` -( - `id` bigint not null primary key default nextval(`qs_queries_seq`), - `created` datetime not null default now(), - `executed` datetime not null default now(), - `created_by` varchar(255) not null, - `query` text not null, - `query_normalized` text not null, - `is_persisted` boolean not null, - `query_hash` varchar(255) not null, - `result_hash` varchar(255), - `result_number` bigint -); -DELIMITER $$ -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255)) -BEGIN - DECLARE _sql TEXT; - SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', - GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), - ') SEPARATOR \',\'), 256) AS hash FROM `', name, '` INTO @hash;') - FROM `information_schema`.`columns` - WHERE `table_schema` = DATABASE() - AND `table_name` = name - INTO _sql; - PREPARE stmt FROM _sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt; - SET hash = @hash; -END $$ -DELIMITER $$ -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER $$ -CREATE - DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) -BEGIN - DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); - DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); - PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash); - SELECT COUNT(*) FROM _tmp INTO @count; - IF @hash IS NULL THEN - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); - ELSE - INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, - `result_number`, `executed`) - SELECT _username, query, query, false, _queryhash, @hash, @count, executed - WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); - END IF; -END $$ -DELIMITER ; \ No newline at end of file diff --git a/dbrepo-metadata-db/test/src/test/resources/zoo/2_schema_data.sql b/dbrepo-metadata-db/test/src/test/resources/zoo/2_schema_data.sql deleted file mode 100644 index 50f02ee2c53f5afc8a472b1c418225434b45d98e..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/zoo/2_schema_data.sql +++ /dev/null @@ -1,191 +0,0 @@ -create sequence seq_zoo_id; -create sequence seq_names_id; -create table zoo -( - id bigint not null default nextval(`seq_zoo_id`), - animal_name varchar(255) null, - hair tinyint(1) null, - feathers tinyint(1) null, - eggs tinyint(1) null, - milk tinyint(1) null, - airborne tinyint(1) null, - aquatic tinyint(1) null, - predator tinyint(1) null, - toothed tinyint(1) null, - backbone tinyint(1) null, - breathes tinyint(1) null, - venomous tinyint(1) null, - fins tinyint(1) null, - legs bigint null, - tail tinyint(1) null, - domestic tinyint(1) null, - catsize tinyint(1) null, - class_type bigint null, - primary key (id) -) with system versioning; - -create table names -( - id bigint not null default nextval(`seq_names_id`), - firstname varchar(255), - lastname varchar(255), - primary key (id), - unique key (firstname, lastname) -) with system versioning; - -create table likes -( - name_id bigint not null, - zoo_id bigint not null, - primary key (name_id, zoo_id), - foreign key (name_id) references names (id), - foreign key (zoo_id) references zoo (id) -) with system versioning; - -INSERT INTO zoo (id, animal_name, hair, feathers, eggs, milk, airborne, aquatic, predator, toothed, backbone, breathes, - venomous, fins, legs, tail, domestic, catsize, class_type) -VALUES (1, 'aardvark', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (2, 'antelope', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (3, 'bass', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (4, 'bear', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (5, 'boar', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (6, 'buffalo', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (7, 'calf', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (8, 'carp', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 4), - (9, 'catfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (10, 'cavy', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 0, 1, 0, 1), - (11, 'cheetah', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (12, 'chicken', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (13, 'chub', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (14, 'clam', 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7), - (15, 'crab', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7), - (16, 'crayfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (17, 'crow', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (18, 'deer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (19, 'dogfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (20, 'dolphin', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (21, 'dove', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (22, 'duck', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (23, 'elephant', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (24, 'flamingo', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (25, 'flea', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (26, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (27, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, 0, 5), - (28, 'fruitbat', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (29, 'giraffe', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (30, 'girl', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 2, 0, 1, 1, 1), - (31, 'gnat', 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (32, 'goat', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (33, 'gorilla', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 1), - (34, 'gull', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (35, 'haddock', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (36, 'hamster', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 0, 1), - (37, 'hare', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (38, 'hawk', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (39, 'herring', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (40, 'honeybee', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 1, 0, 6), - (41, 'housefly', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (42, 'kiwi', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (43, 'ladybird', 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (44, 'lark', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (45, 'leopard', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (46, 'lion', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (47, 'lobster', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (48, 'lynx', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (49, 'mink', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (50, 'mole', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (51, 'mongoose', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (52, 'moth', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (53, 'newt', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 5), - (54, 'octopus', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 8, 0, 0, 1, 7), - (55, 'opossum', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (56, 'oryx', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (57, 'ostrich', 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (58, 'parakeet', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (59, 'penguin', 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (60, 'pheasant', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (61, 'pike', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (62, 'piranha', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (63, 'pitviper', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 3), - (64, 'platypus', 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (65, 'polecat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (66, 'pony', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (67, 'porpoise', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (68, 'puma', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (69, 'pussycat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (70, 'raccoon', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (71, 'reindeer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (72, 'rhea', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (73, 'scorpion', 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 8, 1, 0, 0, 7), - (74, 'seahorse', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (75, 'seal', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1), - (76, 'sealion', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 2, 1, 0, 1, 1), - (77, 'seasnake', 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 3), - (78, 'seawasp', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 7), - (79, 'skimmer', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (80, 'skua', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (81, 'slowworm', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 3), - (82, 'slug', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (83, 'sole', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (84, 'sparrow', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (85, 'squirrel', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (86, 'starfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7), - (87, 'stingray', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 4), - (88, 'swan', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (89, 'termite', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (90, 'toad', 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (91, 'tortoise', 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 4, 1, 0, 1, 3), - (92, 'tuatara', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 3), - (93, 'tuna', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (94, 'vampire', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (95, 'vole', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (96, 'vulture', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (97, 'wallaby', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 1, 1), - (98, 'wasp', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 0, 0, 6), - (99, 'wolf', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (100, 'worm', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (101, 'wren', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2); - -INSERT INTO names (firstname, lastname) -VALUES ('Moritz', 'Staudinger'), - ('Martin', 'Weise'), - ('Eva', 'Gergely'), - ('Cornelia', 'Michlits'), - ('Kirill', 'Stytsenko'); - -INSERT INTO likes (name_id, zoo_id) -VALUES (1, 5), - (1, 10), - (2, 3), - (2, 80), - (3, 4), - (4, 4), - (5, 100); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW mock_view AS -( -SELECT `id`, - `animal_name`, - `hair`, - `feathers`, - `eggs`, - `milk`, - `airborne`, - `aquatic`, - `predator`, - `toothed`, - `backbone`, - `breathes`, - `venomous`, - `fins`, - `legs`, - `tail`, - `domestic`, - `catsize`, - `class_type` -FROM `zoo` -WHERE `class_type` = 1); diff --git a/dbrepo-metadata-db/test/src/test/resources/zoo/3_users.sql b/dbrepo-metadata-db/test/src/test/resources/zoo/3_users.sql deleted file mode 100644 index 6a4244967779a981e2d23241d147bced80ba8b69..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-db/test/src/test/resources/zoo/3_users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY PASSWORD '*440BA4FD1A87A0999647DB67C0EE258198B247BA'; -CREATE USER junit2 IDENTIFIED BY PASSWORD '*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE'; -CREATE USER junit3 IDENTIFIED BY PASSWORD '*D65FCA043964B63E849DD6334699ECB065905DA4'; -CREATE USER junit4 IDENTIFIED BY PASSWORD '*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882'; \ No newline at end of file diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index 1c584cfd34d6ca6136546494ffd81183d77bbd43..8712f6f9bd1ed4285f33f91b43f6fa35b87bbd1e 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -1,45 +1,65 @@ ###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### FROM maven:3-openjdk-17 as build MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ +COPY ./api/pom.xml ./api/ +COPY ./entities/pom.xml ./entities/ +COPY ./oai/pom.xml ./oai/ +COPY ./querystore/pom.xml ./querystore/ +COPY ./report/pom.xml ./report/ +COPY ./repositories/pom.xml ./repositories/ +COPY ./rest-service/pom.xml ./rest-service/ +COPY ./services/pom.xml ./services/ +COPY ./test/pom.xml ./test/ -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien +RUN mvn verify -B -fn +COPY ./api ./api +COPY ./entities ./entities +COPY ./oai ./oai +COPY ./querystore ./querystore +COPY ./report ./report +COPY ./repositories ./repositories COPY ./rest-service ./rest-service COPY ./services ./services -COPY ./report ./report +COPY ./test ./test # Make sure it compiles -RUN mvn -q clean package -DskipTests +RUN mvn clean install -DskipTests -###### THIRD STAGE ###### +###### SECOND STAGE ###### FROM openjdk:17-alpine as runtime MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV GATEWAY_ENDPOINT=http://gateway-service -ENV PID_BASE="http://localhost/pid/" -ENV REPOSITORY_NAME="Example Repository" -ENV BASE_URL="http://localhost" ENV ADMIN_MAIL="noreply@localhost" -ENV EARLIEST_DATESTAMP="2022-09-17T18:23:00Z" +ENV BASE_URL="http://localhost" +ENV BROKER_CONSUMERS=2 +ENV BROKER_ENDPOINT=http://broker-service:15672 +ENV BROKER_USERNAME=fda +ENV CLIENT_ID="dbrepo-client" +ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" ENV DELETED_RECORD=persistent +ENV EARLIEST_DATESTAMP="2022-09-17T18:23:00Z" ENV GRANULARITY="YYYY-MM-DDThh:mm:ssZ" +ENV JWT_ISSUER="http://localhost/realms/dbrepo" +ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" ENV LOG_LEVEL=debug +ENV METADATA_DB=fda +ENV METADATA_PASSWORD=dbrepo +ENV METADATA_USERNAME=root +ENV NOT_SUPPORTED_KEYWORDS=\\*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,-- +ENV PID_BASE="http://localhost/pid/" +ENV REPOSITORY_NAME="Example Repository" +ENV SEARCH_USERNAME=admin +ENV SHARED_FILESYSTEM=/tmp +ENV USER_NETWORK=userdb +ENV WEBSITE=http://localhost WORKDIR /app -COPY --from=build ./rest-service/target/rest-service-*.jar ./metadata-service.jar +COPY --from=build ./rest-service/target/dbrepo-metadata-service-rest-service-*.jar ./metadata-service.jar -EXPOSE 9090 +EXPOSE 9099 ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./metadata-service.jar"] diff --git a/dbrepo-table-service/services/pom.xml b/dbrepo-metadata-service/api/pom.xml similarity index 68% rename from dbrepo-table-service/services/pom.xml rename to dbrepo-metadata-service/api/pom.xml index 05c0764c19c40d88cd04e7cab60234893dea8b5e..63e76bec78e78ce227edd5f1abe767eeb0b098af 100644 --- a/dbrepo-table-service/services/pom.xml +++ b/dbrepo-metadata-service/api/pom.xml @@ -4,14 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>dbrepo-table-service</artifactId> <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service</artifactId> <version>1.3.0</version> </parent> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-api</artifactId> <version>1.3.0</version> - <name>dbrepo-table-service-services</name> + <name>dbrepo-metadata-service-api</name> + + <dependencies/> <build> <plugins> @@ -27,12 +29,6 @@ <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> - <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> - <path> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - </path> </annotationProcessorPaths> </configuration> </plugin> diff --git a/dbrepo-identifier-service/api/src/main/java/at/tuwien/ExportResource.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/ExportResource.java similarity index 100% rename from dbrepo-identifier-service/api/src/main/java/at/tuwien/ExportResource.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/ExportResource.java diff --git a/dbrepo-query-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java similarity index 100% rename from dbrepo-query-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/InsertTableRawQuery.java diff --git a/dbrepo-query-service/api/src/main/java/at/tuwien/SortType.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/SortType.java similarity index 100% rename from dbrepo-query-service/api/src/main/java/at/tuwien/SortType.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/SortType.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/PermissionDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/PermissionDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/PermissionDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/PermissionDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/TupleDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/TupleDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/TupleDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/TupleDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CredentialDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CredentialDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CredentialDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CredentialDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LicenseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LicenseDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LicenseDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LicenseDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExportDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExportDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExportDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExportDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ImportDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ImportDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ReferenceTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ReferenceTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ReferenceTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ReferenceTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorSaveDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorSaveDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorSaveDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderSaveDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderSaveDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderSaveDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDescriptionDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDescriptionDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDescriptionDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDescriptionDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveTitleDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveTitleDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveTitleDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveTitleDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierSaveDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierSaveDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierSaveDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierSaveDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/ror/RorDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ror/RorDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/ror/RorDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ror/RorDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/EntityDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/EntityDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/EntityDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/EntityDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserEmailDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserEmailDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserEmailDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserEmailDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserForgotDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserForgotDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserForgotDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserForgotDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserResetDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserResetDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserResetDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserResetDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserRolesDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserRolesDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserRolesDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserRolesDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java similarity index 100% rename from dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java diff --git a/dbrepo-container-service/services/pom.xml b/dbrepo-metadata-service/entities/pom.xml similarity index 67% rename from dbrepo-container-service/services/pom.xml rename to dbrepo-metadata-service/entities/pom.xml index 53655363998cecea5a53234fc8ffe47e01e4836c..a91ce44bf32969f9feb5005d331050d2e267c9fc 100644 --- a/dbrepo-container-service/services/pom.xml +++ b/dbrepo-metadata-service/entities/pom.xml @@ -4,14 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>dbrepo-container-service</artifactId> <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service</artifactId> <version>1.3.0</version> </parent> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-entities</artifactId> <version>1.3.0</version> - <name>dbrepo-container-service-services</name> + <name>dbrepo-metadata-service-entity</name> + + <dependencies/> <build> <plugins> @@ -27,12 +29,6 @@ <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> - <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> - <path> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - </path> </annotationProcessorPaths> </configuration> </plugin> diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDateKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDateKey.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDateKey.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDateKey.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/AccessType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/AccessType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/AccessType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/AccessType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java similarity index 96% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java index ee3058130dd38934e4a34c39b06ff13985bb802b..ca06be6c9c9233c801d75d8652428f46983e90f3 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java @@ -18,7 +18,7 @@ import java.util.UUID; @NoArgsConstructor @IdClass(DatabaseAccessKey.class) @EntityListeners(AuditingEntityListener.class) -@jakarta.persistence.Table(name = "mdb_have_access") +@Table(name = "mdb_have_access") public class DatabaseAccess { @Id diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/LanguageType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/LanguageType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/LanguageType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/LanguageType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java similarity index 87% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java index 8591b36ea4daeeaee3f7d5b2aca1fef1fec153ab..ef7d0d33a5a937f7b8515d7cdd9bcbf44c3c897a 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java @@ -13,7 +13,7 @@ import jakarta.persistence.*; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@jakarta.persistence.Table(name = "mdb_licenses", uniqueConstraints = { +@Table(name = "mdb_licenses", uniqueConstraints = { @UniqueConstraint(columnNames = {"uri"}) }) public class License { diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java similarity index 99% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java index 9acc37c167d6a2ccc04c81c126bf941e3e648990..c6684755e241bf710c486143b55c6a7ac513ca94 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java @@ -27,7 +27,7 @@ import java.util.UUID; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@jakarta.persistence.Table(name = "mdb_view") +@Table(name = "mdb_view") @NamedQueries({ @NamedQuery(name = "View.findAllPublicByDatabaseId", query = "select v from View v where v.database.id = ?1 and v.isPublic = true"), @NamedQuery(name = "View.findAllPublicOrMineByDatabaseId", query = "select v from View v where v.database.id = ?1 and (v.isPublic = true or v.creator.username = ?2)"), diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java similarity index 96% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java index a54af9c70d6c1e81eb402c595e840dff472cbcd6..ca9853256d9b36dd772a23b8e38288df5da369ff 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java @@ -17,7 +17,7 @@ import java.util.List; @ToString @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@jakarta.persistence.Table(name = "mdb_concepts", uniqueConstraints = { +@Table(name = "mdb_concepts", uniqueConstraints = { @UniqueConstraint(columnNames = {"uri"}) }) @NamedQueries({ diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java similarity index 96% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java index 68c5a1087916eee5c8e655894cdf37400cd1c605..8f115bdf13fe12f7aff76e6eb1d6a09658d5eccf 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java @@ -17,7 +17,7 @@ import java.util.List; @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@jakarta.persistence.Table(name = "mdb_units", uniqueConstraints = { +@Table(name = "mdb_units", uniqueConstraints = { @UniqueConstraint(columnNames = {"uri"}) }) @NamedQueries({ diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java similarity index 94% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java index 66018ec053637ca84af602d52159fe01cc637b7e..88a1ce77a10231fa70fe96df23454a5b4bffd418 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java @@ -15,7 +15,7 @@ import jakarta.persistence.*; @ToString @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@jakarta.persistence.Table(name = "mdb_constraints_foreign_key_reference") +@Table(name = "mdb_constraints_foreign_key_reference") public class ForeignKeyReference { @Id diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java similarity index 99% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java index 17e608ee7f94bd5a75e789eab7b87ea981d1632b..3a268785e8af97181258a61e8749d1f2441c42d9 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java @@ -24,7 +24,7 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@jakarta.persistence.Table(name = "mdb_identifiers") +@Table(name = "mdb_identifiers") @NamedQueries({ @NamedQuery(name = "Identifier.findAllDatabaseIdentifiers", query = "select i from Identifier i where i.type = 'DATABASE'"), @NamedQuery(name = "Identifier.findAllSubsetIdentifiers", query = "select i from Identifier i where i.type = 'SUBSET'"), diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/NameType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/NameType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/VisibilityType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Credential.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Credential.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Group.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Group.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Group.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Group.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/GroupMembership.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/GroupMembership.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/GroupMembership.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/GroupMembership.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/GroupMembershipKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/GroupMembershipKey.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/GroupMembershipKey.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/GroupMembershipKey.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Realm.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Realm.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroup.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroup.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroup.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroup.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroupKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroupKey.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroupKey.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RealmDefaultGroupKey.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Role.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/Role.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/RoleMappingKey.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java similarity index 100% rename from dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java rename to dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java diff --git a/dbrepo-semantics-service/services/pom.xml b/dbrepo-metadata-service/oai/pom.xml similarity index 67% rename from dbrepo-semantics-service/services/pom.xml rename to dbrepo-metadata-service/oai/pom.xml index b1ee2e0ce76f472221cf2c97e9fec25665d9768f..c4e04a3e1d3578269474cf7f0b7d8051fbb2b3b1 100644 --- a/dbrepo-semantics-service/services/pom.xml +++ b/dbrepo-metadata-service/oai/pom.xml @@ -4,14 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>dbrepo-semantics-service</artifactId> <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service</artifactId> <version>1.3.0</version> </parent> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-oai</artifactId> <version>1.3.0</version> - <name>dbrepo-semantics-service-services</name> + <name>dbrepo-metadata-service-oai</name> + + <dependencies/> <build> <plugins> @@ -27,12 +29,6 @@ <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> - <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> - <path> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - </path> </annotationProcessorPaths> </configuration> </plugin> diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java b/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java similarity index 100% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java rename to dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java similarity index 100% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java similarity index 100% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java similarity index 100% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java similarity index 100% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index 7d8f61785350c1b4351ba4ebbf2893180c47559c..729bd8df76fef5df25ff7ac510fed8fb37ae9496 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -30,8 +30,14 @@ <packaging>pom</packaging> <modules> - <module>rest-service</module> + <module>api</module> + <module>entities</module> + <module>oai</module> + <module>querystore</module> + <module>test</module> + <module>repositories</module> <module>services</module> + <module>rest-service</module> <module>report</module> </modules> @@ -39,16 +45,21 @@ <java.version>17</java.version> <spring-cloud.version>4.0.2</spring-cloud.version> <mapstruct.version>1.5.5.Final</mapstruct.version> + <rabbitmq.version>5.16.0</rabbitmq.version> + <jackson-datatype.version>2.15.0</jackson-datatype.version> + <commons.version>2.11.0</commons.version> <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> + <c3p0.version>0.9.5.5</c3p0.version> + <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> + <apache-jena.version>4.8.0</apache-jena.version> <opencsv.version>5.7.1</opencsv.version> <super-csv.version>2.4.0</super-csv.version> - <jsql.version>4.6</jsql.version> + <jsql-parser.version>4.6</jsql-parser.version> <keycloak.version>21.0.2</keycloak.version> - <hibernate.version>6.2.2.Final</hibernate.version> <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> + <testcontainers.version>1.18.3</testcontainers.version> + <opensearch-testcontainer.version>2.0.0</opensearch-testcontainer.version> <opensearch-client.version>1.1.0</opensearch-client.version> <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> <jackson.version>2.15.2</jackson.version> @@ -107,6 +118,11 @@ <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-annotations</artifactId> + <version>${jackson.version}</version> + </dependency> <dependency> <groupId>org.opensearch.client</groupId> <artifactId>opensearch-rest-high-level-client</artifactId> @@ -117,42 +133,55 @@ <artifactId>opensearch-rest-client-sniffer</artifactId> <version>${opensearch-rest-client.version}</version> </dependency> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>${c3p0.version}</version> + </dependency> + <dependency> + <groupId>org.hibernate.orm</groupId> + <artifactId>hibernate-c3p0</artifactId> + <version>${c3p0-hibernate.version}</version> + </dependency> <!-- Monitoring --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <scope>runtime</scope> </dependency> - <!-- Entity and API --> + <!-- Authentication --> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-oai</artifactId> - <version>${project.version}</version> - <scope>compile</scope> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-common</artifactId> + <version>${keycloak.version}</version> + </dependency> + <dependency> + <groupId>com.auth0</groupId> + <artifactId>java-jwt</artifactId> + <version>${jwt.version}</version> </dependency> + <!-- Utils --> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - <scope>compile</scope> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>31.1-jre</version> </dependency> + <!-- SQL Parser --> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - <scope>compile</scope> + <groupId>com.github.jsqlparser</groupId> + <artifactId>jsqlparser</artifactId> + <version>${jsql-parser.version}</version> </dependency> + <!-- RDF --> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-querystore</artifactId> - <version>${project.version}</version> - <scope>compile</scope> + <groupId>org.apache.jena</groupId> + <artifactId>jena-core</artifactId> + <version>${apache-jena.version}</version> </dependency> - <!-- Authentication --> <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> + <groupId>org.apache.jena</groupId> + <artifactId>jena-arq</artifactId> + <version>${apache-jena.version}</version> </dependency> <!-- IDE --> <dependency> @@ -171,6 +200,26 @@ <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + <version>${jackson-datatype.version}</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>${commons.version}</version> + </dependency> + <!-- AMPQ --> + <dependency> + <groupId>org.springframework.amqp</groupId> + <artifactId>spring-rabbit</artifactId> + </dependency> + <dependency> + <groupId>com.rabbitmq</groupId> + <artifactId>amqp-client</artifactId> + <version>${rabbitmq.version}</version> + </dependency> <!-- Swagger --> <dependency> <groupId>org.springdoc</groupId> @@ -184,12 +233,6 @@ <version>${springdoc-openapi.version}</version> </dependency> <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> @@ -223,16 +266,41 @@ <artifactId>h2</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>junit-jupiter</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>mariadb</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>rabbitmq</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.opensearch</groupId> + <artifactId>opensearch-testcontainers</artifactId> + <version>${opensearch-testcontainer.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.opensearch.client</groupId> + <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> + <version>${opensearch-client.version}</version> + <scope>test</scope> + </dependency> <dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - </dependency> </dependencies> <build> @@ -242,7 +310,9 @@ <filtering>true</filtering> <includes> <include>**/application*.yml</include> + <include>**/templates/*.txt</include> <include>**/templates/*.xml</include> + <include>**/init/querystore.sql</include> </includes> </resource> </resources> @@ -258,7 +328,10 @@ <exclude>at/tuwien/mapper/**/*</exclude> <exclude>at/tuwien/handlers/**/*</exclude> <exclude>at/tuwien/exception/**/*</exclude> + <exclude>at/tuwien/utils/**/*</exclude> <exclude>at/tuwien/config/**/*</exclude> + <exclude>at/tuwien/auth/**/*</exclude> + <exclude>**/HibernateConnector.class</exclude> <exclude>**/DbrepoMetadataServiceApplication.class</exclude> </excludes> </configuration> diff --git a/dbrepo-metadata-service/querystore/pom.xml b/dbrepo-metadata-service/querystore/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..fc125dea5e6edc9955826f7aff41c594616c68cb --- /dev/null +++ b/dbrepo-metadata-service/querystore/pom.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service</artifactId> + <version>1.3.0</version> + </parent> + + <artifactId>dbrepo-metadata-service-querystore</artifactId> + <version>1.3.0</version> + <name>dbrepo-metadata-service-querystore</name> + + <dependencies/> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>${java.version}</source> + <target>${java.version}</target> + <annotationProcessorPaths> + <path> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file diff --git a/dbrepo-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java b/dbrepo-metadata-service/querystore/src/main/java/at/tuwien/querystore/Query.java similarity index 100% rename from dbrepo-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java rename to dbrepo-metadata-service/querystore/src/main/java/at/tuwien/querystore/Query.java diff --git a/dbrepo-metadata-service/report/pom.xml b/dbrepo-metadata-service/report/pom.xml index 49cb9b5a7ca985f86565de91e58fc9b98193daf7..f3793ae9da7db256b224477c9b5a9a4962c3541a 100644 --- a/dbrepo-metadata-service/report/pom.xml +++ b/dbrepo-metadata-service/report/pom.xml @@ -9,7 +9,7 @@ <version>1.3.0</version> </parent> - <artifactId>report</artifactId> + <artifactId>dbrepo-metadata-service-report</artifactId> <name>dbrepo-metadata-service-report</name> <properties> @@ -19,12 +19,7 @@ <dependencies> <dependency> <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-rest-service</artifactId> <version>${project.version}</version> </dependency> </dependencies> diff --git a/dbrepo-identifier-service/services/pom.xml b/dbrepo-metadata-service/repositories/pom.xml similarity index 65% rename from dbrepo-identifier-service/services/pom.xml rename to dbrepo-metadata-service/repositories/pom.xml index d1eae1c8a06679bc1a45418de81a7c2344621a8e..06dbfd1a3f09dc818ec4d050b74e9c1998f2a32a 100644 --- a/dbrepo-identifier-service/services/pom.xml +++ b/dbrepo-metadata-service/repositories/pom.xml @@ -3,23 +3,38 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>api</artifactId> - <version>1.3.0</version> - <scope>compile</scope> - </dependency> - </dependencies> <parent> - <artifactId>dbrepo-identifier-service</artifactId> + <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> <version>1.3.0</version> </parent> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-repositories</artifactId> <version>1.3.0</version> - <name>dbrepo-identifier-service-services</name> + <name>dbrepo-metadata-service-repositories</name> + + <dependencies> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-oai</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-querystore</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-entities</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> <build> <plugins> diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccessDeniedException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccessDeniedException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/AmqpException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AmqpException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/AmqpException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AmqpException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ArbitraryPrimaryKeysException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ArbitraryPrimaryKeysException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/ArbitraryPrimaryKeysException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ArbitraryPrimaryKeysException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/BannerMessageNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BannerMessageNotFoundException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/BannerMessageNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BannerMessageNotFoundException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/BrokerMalformedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerMalformedException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/BrokerMalformedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerMalformedException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerVirtualHostCreationException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerVirtualHostGrantException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ColumnParseException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ColumnParseException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/ColumnParseException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ColumnParseException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ConceptNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ConceptNotFoundException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/ConceptNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ConceptNotFoundException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyRemovedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyRemovedException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyRemovedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyRemovedException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyRunningException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyRunningException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyRunningException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyRunningException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyStoppedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyStoppedException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyStoppedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyStoppedException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerConnectionException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerConnectionException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerConnectionException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerConnectionException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotFoundException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotFoundException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerNotRunningException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotRunningException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerNotRunningException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotRunningException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerStillRunningException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerStillRunningException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ContainerStillRunningException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerStillRunningException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerUnauthorizedException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DataProcessingException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataProcessingException.java similarity index 94% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/DataProcessingException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataProcessingException.java index fc0555c8e3e175c5cd7aca8e4c16766d2c87a49c..873eb5d2820bebea680f55ad94d9350c88f77905 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DataProcessingException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataProcessingException.java @@ -3,8 +3,6 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import java.io.IOException; - @ResponseStatus(code = HttpStatus.LOCKED) public class DataProcessingException extends Exception { diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseConnectionException.java similarity index 94% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseConnectionException.java index 63459167f77f9f2350abfee7cdb80ef0c704fda2..1296c643711ff9ed7bcaea35789201156c239ee8 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseConnectionException.java @@ -3,8 +3,6 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import java.io.IOException; - @ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) public class DatabaseConnectionException extends Exception { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseMalformedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseMalformedException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseMalformedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseMalformedException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNameExistsException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/DoiNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DoiNotFoundException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/DoiNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DoiNotFoundException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/FileStorageException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FileStorageException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/FileStorageException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FileStorageException.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/FilterBadRequestException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FilterBadRequestException.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/FilterBadRequestException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FilterBadRequestException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/ForeignUserException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ForeignUserException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/ForeignUserException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ForeignUserException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/HeaderInvalidException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/HeaderInvalidException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/HeaderInvalidException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/HeaderInvalidException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierAlreadyExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierAlreadyExistsException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierAlreadyExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierAlreadyExistsException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierAlreadyPublishedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierAlreadyPublishedException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierAlreadyPublishedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierAlreadyPublishedException.java diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java similarity index 100% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierPublishingNotAllowedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierPublishingNotAllowedException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierPublishingNotAllowedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierPublishingNotAllowedException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierRequestException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierRequestException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierRequestException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierRequestException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierUpdateBadFormException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierUpdateBadFormException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/IdentifierUpdateBadFormException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierUpdateBadFormException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java similarity index 89% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java index b690b723b211f1ba656e47cb9915aa00950097b7..9b52af25ff35893279889643ba06f7ae8db242c8 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java @@ -2,7 +2,6 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.server.ResponseStatusException; @ResponseStatus(code = HttpStatus.CONFLICT, reason = "Image already exists") public class ImageAlreadyExistsException extends Exception { diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageInvalidException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageInvalidException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageInvalidException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageInvalidException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotFoundException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotFoundException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotSupportedException.java similarity index 94% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotSupportedException.java index 86702d53ba6e08918ec8e0fe2a0e7739a1050622..1d293e03e5be0ba929f933187d1cbab9bb42a446 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotSupportedException.java @@ -3,8 +3,6 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import java.io.IOException; - @ResponseStatus(code = HttpStatus.BAD_REQUEST) public class ImageNotSupportedException extends Exception { diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/exception/InvalidPrefixException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/InvalidPrefixException.java similarity index 100% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/exception/InvalidPrefixException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/InvalidPrefixException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/LicenseNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/LicenseNotFoundException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/LicenseNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/LicenseNotFoundException.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/NotAllowedException.java similarity index 88% rename from dbrepo-database-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/NotAllowedException.java index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..b1521fe9402ed022ac69d33f48b704b643fc62da 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/NotAllowedException.java @@ -3,7 +3,7 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) +@ResponseStatus(code = HttpStatus.FORBIDDEN) public class NotAllowedException extends Exception { public NotAllowedException(String msg) { diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/OntologyNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyNotFoundException.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/OntologyNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyNotFoundException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/OrcidNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OrcidNotFoundException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/OrcidNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OrcidNotFoundException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/PaginationException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PaginationException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/PaginationException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PaginationException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/PersistenceException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PersistenceException.java similarity index 88% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/PersistenceException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PersistenceException.java index d267727483ba76a5e8765caccd68e49b1de79c55..92c1d6f4b9ed8fa7ab2e69e6d11871fe9ed176dd 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/PersistenceException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PersistenceException.java @@ -2,7 +2,6 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.server.ResponseStatusException; @ResponseStatus(code = HttpStatus.FORBIDDEN, reason = "Persistence error") public class PersistenceException extends Exception { diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryAlreadyPersistedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryAlreadyPersistedException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryAlreadyPersistedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryAlreadyPersistedException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryMalformedException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryMalformedException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/QueryNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotFoundException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/QueryNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotFoundException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/RealmNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RealmNotFoundException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/RealmNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RealmNotFoundException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/RemoteUnavailableException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RemoteUnavailableException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/RemoteUnavailableException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RemoteUnavailableException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/RoleNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RoleNotFoundException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/RoleNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RoleNotFoundException.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/RorNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RorNotFoundException.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/exception/RorNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RorNotFoundException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/SemanticEntityPersistException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityPersistException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/SemanticEntityPersistException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityPersistException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/SortException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SortException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/SortException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SortException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/SubjectNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SubjectNotFoundException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/SubjectNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SubjectNotFoundException.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/TableColumnNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableColumnNotFoundException.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/TableColumnNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableColumnNotFoundException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableMalformedException.java similarity index 94% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableMalformedException.java index 589682ec441a359386b0b99b4c212e01f42ea231..fb232e7155d519be931d0aaa1641a576480ca183 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableMalformedException.java @@ -3,8 +3,6 @@ package at.tuwien.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import java.io.IOException; - @ResponseStatus(code = HttpStatus.BAD_REQUEST) public class TableMalformedException extends Exception { diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableNameExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNameExistsException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableNameExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNameExistsException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNotFoundException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNotFoundException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/TupleDeleteException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TupleDeleteException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/TupleDeleteException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TupleDeleteException.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/UnitNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UnitNotFoundException.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/exception/UnitNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UnitNotFoundException.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/UriMalformedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UriMalformedException.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/UriMalformedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UriMalformedException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserAlreadyExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserAlreadyExistsException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserAlreadyExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserAlreadyExistsException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserAttributeNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserAttributeNotFoundException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserAttributeNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserAttributeNotFoundException.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserEmailAlreadyExistsException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserEmailAlreadyExistsException.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserEmailAlreadyExistsException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserEmailAlreadyExistsException.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserNotFoundException.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserNotFoundException.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ViewMalformedException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewMalformedException.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/exception/ViewMalformedException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewMalformedException.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewNotFoundException.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewNotFoundException.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/AccessMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/AccessMapper.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/mapper/AccessMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/AccessMapper.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/AmqpMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/AmqpMapper.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/mapper/AmqpMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/AmqpMapper.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/AuthenticationMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/AuthenticationMapper.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/mapper/AuthenticationMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/AuthenticationMapper.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/BannerMessageMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/BannerMessageMapper.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/mapper/BannerMessageMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/BannerMessageMapper.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java similarity index 96% rename from dbrepo-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java index fbaeb76ef1df394d517f354e44c49712d0095fa9..beae808eb0e78ded5c2d33f9d849b4d952a069b6 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ContainerMapper.java @@ -4,7 +4,6 @@ import at.tuwien.api.container.ContainerBriefDto; import at.tuwien.api.container.ContainerCreateRequestDto; import at.tuwien.api.container.ContainerDto; import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/DataCiteMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DataCiteMapper.java similarity index 97% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/DataCiteMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DataCiteMapper.java index f47f17eae96fb5ab897d81507ff915077ef46ada..0887a02f6468d0f704ef9ff0d34352b2148e31da 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/DataCiteMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DataCiteMapper.java @@ -4,7 +4,10 @@ import at.tuwien.api.datacite.doi.*; import at.tuwien.entities.database.License; import at.tuwien.entities.identifier.*; import at.tuwien.utils.EnumToStringConverter; -import org.mapstruct.*; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.Mappings; import org.springframework.context.annotation.Profile; import java.util.List; diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java similarity index 96% rename from dbrepo-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java index 6204acebfe8383e24a5e2671b043863b1bf54851..af40d0c248db8eb93cae67548843e6e6c21891ae 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java @@ -24,7 +24,7 @@ import java.text.Normalizer; import java.util.Locale; import java.util.regex.Pattern; -@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, ImageMapper.class, IdentifierMapper.class}, imports = {RandomStringUtils.class}) +@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, ImageMapper.class/*, IdentifierMapper.class*/}, imports = {RandomStringUtils.class}) public interface DatabaseMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class); @@ -58,6 +58,7 @@ public interface DatabaseMapper { @Mappings({ @Mapping(target = "id", source = "id"), @Mapping(target = "engine", source = "container.image", qualifiedByName = "engineMapping"), + @Mapping(target = "image", source = "container.image"), @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm"), @Mapping(target = "container", ignore = true), }) @@ -66,10 +67,16 @@ public interface DatabaseMapper { @Mappings({ @Mapping(target = "id", source = "id"), @Mapping(target = "image", source = "container.image"), - @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm") + @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm"), + @Mapping(target = "identifier.database", ignore = true) }) DatabaseDto databaseToDatabaseDto(Database data); + @Mappings({ + @Mapping(target = "identifier.database", ignore = true) + }) + Database databaseDtoToDatabase(DatabaseDto data); + @Mappings({ @Mapping(target = "internalName", expression = "java(nameToInternalName(data.getName()) + \"_\" + RandomStringUtils.randomAlphabetic(4).toLowerCase())"), }) diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/DocumentMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DocumentMapper.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/DocumentMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DocumentMapper.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/ExternalMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ExternalMapper.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/ExternalMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ExternalMapper.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java similarity index 97% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java index 3972cc4c55ce86c27cf4b17f2bc18b350428badd..d23a7c7ddb4d1667409a6f6a7d6461240e5d1806 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/IdentifierMapper.java @@ -10,6 +10,10 @@ import org.mapstruct.Named; @Mapper(componentModel = "spring") public interface IdentifierMapper { + Identifier identifierDtoToIdentifier(IdentifierDto data); + + IdentifierBriefDto identifierToIdentifierBriefDto(Identifier data); + @Mappings({ @Mapping(target = "database.identifier", ignore = true), }) @@ -33,8 +37,6 @@ public interface IdentifierMapper { RelatedIdentifierDto relatedIdentifierToRelatedIdentifierDto(RelatedIdentifier data); - Identifier identifierDtoToIdentifier(IdentifierDto data); - Creator creatorDtoToCreator(CreatorDto data); @Mappings({ diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ImageMapper.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ImageMapper.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/mapper/LicenseMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/LicenseMapper.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/mapper/LicenseMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/LicenseMapper.java diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java similarity index 100% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/OntologyMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/OntologyMapper.java similarity index 94% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/OntologyMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/OntologyMapper.java index 4d36f77a6765c6142b6883974eebbc504da092fa..d1e9c2dea711edd6ac7cbca841d510dac654b69b 100644 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/OntologyMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/OntologyMapper.java @@ -1,6 +1,9 @@ package at.tuwien.mapper; -import at.tuwien.api.database.table.columns.concepts.*; +import at.tuwien.api.database.table.columns.concepts.ConceptDto; +import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; +import at.tuwien.api.database.table.columns.concepts.UnitDto; +import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; import at.tuwien.api.semantics.OntologyBriefDto; import at.tuwien.api.semantics.OntologyCreateDto; import at.tuwien.api.semantics.OntologyDto; diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java similarity index 99% rename from dbrepo-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java index 8904724d55d4f6d98844c909e90eac74650e177c..70b5815d64e476b32c7fe1ae6372b7df25ffb8c0 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/QueryMapper.java @@ -25,10 +25,11 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.Named; -import org.mariadb.jdbc.MariaDbBlob; import org.springframework.transaction.annotation.Transactional; -import java.io.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.math.BigInteger; import java.sql.Date; import java.sql.*; diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/SemanticMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/SemanticMapper.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/SemanticMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/SemanticMapper.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/StoreMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/StoreMapper.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/mapper/StoreMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/StoreMapper.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java similarity index 98% rename from dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java index b18076def60787b96163995d1e20c31f1c027bea..3bb8901ddce774c48401c187e75d613378110175 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/TableMapper.java @@ -19,7 +19,10 @@ import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.*; +import at.tuwien.entities.database.table.columns.TableColumn; +import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.tuwien.entities.database.table.columns.TableColumnType; +import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.entities.database.table.constraints.Constraints; import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference; diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java similarity index 76% rename from dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java index cb6d20fd1090e83c6d9b86987e910f02be7cffcb..9ed605bf973130ecf80ff5132cf283a4531d96bc 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java @@ -1,10 +1,13 @@ package at.tuwien.mapper; +import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.auth.TokenIntrospectDto; import at.tuwien.api.user.GrantedAuthorityDto; import at.tuwien.api.user.UserBriefDto; import at.tuwien.api.user.UserDetailsDto; import at.tuwien.api.user.UserDto; +import at.tuwien.entities.user.Group; +import at.tuwien.entities.user.GroupMembership; import at.tuwien.entities.user.User; import at.tuwien.entities.user.UserAttribute; import org.mapstruct.Mapper; @@ -15,6 +18,7 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import java.util.Arrays; import java.util.Optional; +import java.util.UUID; import java.util.stream.Collectors; @Mapper(componentModel = "spring") @@ -22,6 +26,17 @@ public interface UserMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); + @Mappings({ + @Mapping(target = "id", expression = "java(data.getId().toString())") + }) + UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); + + default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { + final GrantedAuthority authority = new SimpleGrantedAuthority(data.getAuthority()); + log.trace("mapped granted authority {} to granted authority {}", data, authority); + return authority; + } + /* keep */ @Mappings({ @Mapping(target = "id", expression = "java(data.getId().toString())") @@ -34,6 +49,8 @@ public interface UserMapper { }) UserBriefDto userToUserBriefDto(User data); + UserBriefDto userDtoToUserBriefDto(UserDto data); + /* keep */ @Mappings({ @Mapping(target = "orcid", expression = "java(userToOrcid(data))") @@ -49,12 +66,6 @@ public interface UserMapper { return orcid.map(UserAttribute::getValue).orElse(null); } - /* keep */ - @Mappings({ - @Mapping(target = "id", expression = "java(data.getId().toString())") - }) - UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); - default UserDetailsDto tokenIntrospectDtoToUserDetailsDto(TokenIntrospectDto data) { return UserDetailsDto.builder() .id(data.getSub()) @@ -65,9 +76,22 @@ public interface UserMapper { .build(); } - default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { - final GrantedAuthority authority = new SimpleGrantedAuthority(data.getAuthority()); - log.trace("mapped granted authority {} to granted authority {}", data, authority); - return authority; + User signupRequestDtoToUser(SignupRequestDto data); + + default UserAttribute tripleToUserAttribute(UUID userId, String name, String value) { + return UserAttribute.builder() + .id(UUID.randomUUID()) + .userId(userId) + .name(name) + .value(value) + .build(); } + + default GroupMembership userGroupToGroupMembership(User user, Group group) { + return GroupMembership.builder() + .userId(user.getId()) + .groupId(group.getId()) + .build(); + } + } diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java similarity index 97% rename from dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java index 0b2facf3747b2e39ba294c9e79d7892a05e85fa6..a864436151ec128c4a3effd1416a3d5baff04da2 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ViewMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/ViewMapper.java @@ -10,7 +10,9 @@ import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.Named; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.text.Normalizer; import java.util.Locale; import java.util.regex.Pattern; diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java similarity index 71% rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java index 36204d8afab12df2246ae6985ab04b85b98b83db..8dbd1e1f36d90053228c06c72a5c49b9a45b5ca4 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java @@ -16,11 +16,18 @@ public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, void deleteByHdbidAndHuserid(Long databaseId, UUID userId); + /** + * Finds database access by given database id and user id. + * + * @param databaseId The database id. + * @param userId The user id. + * @return Non-empty optional if this database access exists, empty optional otherwise. + */ Optional<DatabaseAccess> findByHdbidAndHuserid(Long databaseId, UUID userId); List<DatabaseAccess> findByHdbid(Long databaseId); @Query("select a from DatabaseAccess a where a.hdbid = :databaseId and a.user.username = :username") - Optional<DatabaseAccess> findByDatabaseIdAndUsername(@Param("databaseId") Long databaseId, @Param("username") String username); + Optional<DatabaseAccess> findByDatabaseIdAndUsername(Long databaseId, String username); } diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java similarity index 65% rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java index 9949a9277072e6789488547a2857333a05451d49..301431e85fd7f3a19f1c7140745fbe7043063777 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java @@ -6,18 +6,27 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; +import java.util.UUID; @Repository public interface DatabaseRepository extends JpaRepository<Database, Long> { + List<Database> findReadAccess(UUID id); + + List<Database> findWriteAccess(UUID id); + + List<Database> findConfigureAccess(UUID id); + + Optional<Database> findPublicOrMine(Long databaseId, UUID id); + + Optional<Database> findPublic(Long databaseId); + @Query("select d from Database d where d.id = :databaseId and (d.isPublic = true or d.creator.username = :username)") Optional<Database> findPublicOrMine(@Param("databaseId") Long databaseId, @Param("username") String username); - @Query("select d from Database d where d.id = :databaseId and d.isPublic = true") - Optional<Database> findPublic(@Param("databaseId") Long databaseId); - @Query("select d from Database d where d.id = :databaseId") - Optional<Database> findByContainerIdAndDatabaseId(@Param("databaseId") Long databaseId); - + Optional<Database> findByDatabaseId(@Param("databaseId") Long databaseId); + } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/GroupMembershipRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/GroupMembershipRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/GroupMembershipRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/GroupMembershipRepository.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/GroupRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/GroupRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/GroupRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/GroupRepository.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierDescriptionRepository.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java similarity index 84% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java index 37ae148a864dd7fa52efbd21170b55df06973100..be21fa433f246fcb3940d63a1f1ebdd4a9935238 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java @@ -55,4 +55,14 @@ public interface IdentifierRepository extends JpaRepository<Identifier, Long> { */ Boolean existsByDatabaseIdAndQueryIdAndType(Long databaseId, Long queryId, IdentifierType type); + Optional<Identifier> findByDatabaseIdAndType(Long databaseId, IdentifierType type); + + Optional<Identifier> findDatabaseIdentifier(Long databaseId); + + Optional<Identifier> findSubsetIdentifier(Long databaseId, Long queryId); + + List<Identifier> findAllDatabaseIdentifiers(); + + List<Identifier> findAllSubsetIdentifiers(); + } diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/IdentifierTitleRepository.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageRepository.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ImageRepository.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/RealmRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/RealmRepository.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/RoleRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/RoleRepository.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableRepository.java similarity index 79% rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableRepository.java index e4a0bc33f06220c2e2cdf1e0e6525882569462bf..314c23ab0b8b02432a0d98a8622fc8e6f512bfe0 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/TableRepository.java @@ -3,6 +3,8 @@ package at.tuwien.repository.mdb; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -11,6 +13,11 @@ import java.util.Optional; @Repository public interface TableRepository extends JpaRepository<Table, Long> { + @Query(value = "select t from Table t where t.database.id = :databaseId and t.id = :tableId") + Optional<Table> find(@Param("databaseId") Long databaseId, @Param("tableId") Long tableId); + + Optional<Table> findByDatabaseIdAndId(Long databaseId, Long tableId); + /** * Finds all tables by database. * diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UnitRepository.java similarity index 100% rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UnitRepository.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UserRepository.java similarity index 91% rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UserRepository.java index 9296207e08c53002257f74ced06faddd5f65434a..f9ca9c65ca30a0a14564770188d48a76427bf9de 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/UserRepository.java @@ -18,4 +18,6 @@ public interface UserRepository extends JpaRepository<User, UUID> { */ Optional<User> findByUsername(String username); + Optional<User> findByEmail(String email); + } diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ViewRepository.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/mdb/ViewRepository.java diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java similarity index 100% rename from dbrepo-data-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java similarity index 100% rename from dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java similarity index 100% rename from dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java similarity index 100% rename from dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java similarity index 100% rename from dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/utils/EnumToStringConverter.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/utils/EnumToStringConverter.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/utils/EnumToStringConverter.java rename to dbrepo-metadata-service/repositories/src/main/java/at/tuwien/utils/EnumToStringConverter.java diff --git a/dbrepo-metadata-service/rest-service/pom.xml b/dbrepo-metadata-service/rest-service/pom.xml index 6f20602af8937cfa31188f8c63828567ca87bfac..024ea3282f562b78bccf8f0a48b12b261dc169a1 100644 --- a/dbrepo-metadata-service/rest-service/pom.xml +++ b/dbrepo-metadata-service/rest-service/pom.xml @@ -9,14 +9,34 @@ <version>1.3.0</version> </parent> - <artifactId>rest-service</artifactId> + <artifactId>dbrepo-metadata-service-rest-service</artifactId> <version>1.3.0</version> <name>dbrepo-metadata-service-rest</name> <dependencies> <dependency> <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-entities</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-querystore</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-services</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-test</artifactId> <version>${project.version}</version> </dependency> </dependencies> diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeConverter.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeConverter.java similarity index 100% rename from dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeConverter.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeConverter.java diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java similarity index 98% rename from dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java index 09d0db2a1ca2900d753e4a9765cae0b3bea22517..de3e7deb51f5044482c25f60caf3dea5fcfad341 100644 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java @@ -75,7 +75,7 @@ public class AccessEndpoint { accessService.find(databaseId, accessDto.getUsername()); log.error("Failed to give access to user with username {}, already has access", accessDto.getUsername()); throw new NotAllowedException("Failed to give access to user"); - } catch (AccessDeniedException e) { + } catch (NotAllowedException e) { /* ignore */ } accessService.create(databaseId, accessDto); @@ -111,7 +111,7 @@ public class AccessEndpoint { @NotBlank @PathVariable("username") String username, @Valid @RequestBody DatabaseModifyAccessDto accessDto, @NotNull Principal principal) - throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, AccessDeniedException, + throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, NotAllowedException, QueryMalformedException, DatabaseMalformedException { log.debug("endpoint modify access to database, databaseId={}, username={}, accessDto={}, principal={}", databaseId, username, accessDto, principal); accessService.find(databaseId, username); @@ -143,7 +143,7 @@ public class AccessEndpoint { }) public ResponseEntity<DatabaseAccessDto> find(@NotBlank @PathVariable("id") Long databaseId, @NotNull Principal principal) throws NotAllowedException, - AccessDeniedException { + NotAllowedException { log.debug("endpoint check access to database, databaseId={}, principal={}", databaseId, principal); final DatabaseAccess access = accessService.find(databaseId, principal.getName()); final DatabaseAccessDto dto = databaseMapper.databaseAccessToDatabaseAccessDto(access); @@ -183,7 +183,7 @@ public class AccessEndpoint { public ResponseEntity<?> revoke(@NotBlank @PathVariable("id") Long databaseId, @NotBlank @PathVariable("username") String username, @NotNull Principal principal) - throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, AccessDeniedException, + throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, NotAllowedException, QueryMalformedException, DatabaseMalformedException { log.debug("endpoint revoke access to database, databaseId={}, username={}, principal={}", databaseId, username, principal); accessService.find(databaseId, username); diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java similarity index 96% rename from dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index 08cd6928682d379b3de45cdcb344072027780f83..efed6b83313ce45075875e499ca4666851174eed 100644 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -9,6 +9,7 @@ import at.tuwien.exception.ContainerAlreadyExistsException; import at.tuwien.exception.ContainerNotFoundException; import at.tuwien.exception.ImageNotFoundException; import at.tuwien.mapper.ContainerMapper; +import at.tuwien.service.ContainerService; import at.tuwien.service.UserService; import at.tuwien.service.impl.ContainerServiceImpl; import io.micrometer.core.annotation.Timed; @@ -41,14 +42,11 @@ import java.util.stream.Collectors; @RequestMapping("/api/container") public class ContainerEndpoint { - private final UserService userService; private final ContainerMapper containerMapper; - private final ContainerServiceImpl containerService; + private final ContainerService containerService; @Autowired - public ContainerEndpoint(UserService userService, ContainerServiceImpl containerService, - ContainerMapper containerMapper) { - this.userService = userService; + public ContainerEndpoint(ContainerService containerService, ContainerMapper containerMapper) { this.containerMapper = containerMapper; this.containerService = containerService; } diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java similarity index 98% rename from dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index b0d1fa250070ddbdddd61bd874b3ae4f2826f8bc..fab166851caf7250c6fda00330bf916ba2cc52b5 100644 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -41,14 +41,14 @@ public class DatabaseEndpoint { private final UserService userService; private final AccessService accessService; private final DatabaseMapper databaseMapper; - private final MariaDbServiceImpl databaseService; + private final DatabaseService databaseService; private final QueryStoreService queryStoreService; private final MessageQueueService messageQueueService; private final DatabaseAccessRepository databaseAccessRepository; @Autowired public DatabaseEndpoint(DatabaseMapper databaseMapper, UserService userService, - MariaDbServiceImpl databaseService, QueryStoreService queryStoreService, + DatabaseService databaseService, QueryStoreService queryStoreService, MessageQueueService messageQueueService, AccessService accessService, DatabaseAccessRepository databaseAccessRepository) { this.userService = userService; @@ -256,7 +256,7 @@ public class DatabaseEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<DatabaseDto> findById(@NotNull @PathVariable Long id, Principal principal) - throws DatabaseNotFoundException, AccessDeniedException { + throws DatabaseNotFoundException, NotAllowedException { log.debug("endpoint find database, id={}", id); final Database database = databaseService.findById(id); final DatabaseDto dto = databaseMapper.databaseToDatabaseDto(database); diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java similarity index 99% rename from dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java index 60b0aea9fa02676122d337365b85068bcdca120e..51376dbb75b6c9689d569240cdc80aae88fb563f 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ExportEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.ExportResource; import at.tuwien.entities.database.Database; diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java similarity index 97% rename from dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java index a51a3c784ad9c0b997d9e1c19b673ea97665036b..10fa31a73a3b14468a390b554492599fdb630f75 100644 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java @@ -21,6 +21,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -29,9 +31,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; - import java.security.Principal; import java.util.List; import java.util.stream.Collectors; @@ -125,10 +124,11 @@ public class IdentifierEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<IdentifierDto> create(@NotNull @Valid @RequestBody IdentifierSaveDto data, - @NotNull @RequestHeader(name = "Authorization") String authorization, @NotNull Principal principal) throws IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, - RemoteUnavailableException, UserNotFoundException, DatabaseNotFoundException, IdentifierRequestException, NotAllowedException, ViewNotFoundException { + RemoteUnavailableException, UserNotFoundException, DatabaseNotFoundException, IdentifierRequestException, + NotAllowedException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { log.debug("endpoint create identifier, data={}, authorization=(hidden), principal={}", data, principal); if (data.getType().equals(IdentifierTypeDto.SUBSET) && (data.getQueryId() == null || data.getViewId() != null)) { log.error("Identifier of type subset need to have a qid and not a vid present"); @@ -149,7 +149,7 @@ public class IdentifierEndpoint { throw new NotAllowedException("Failed to create identifier: insufficient access"); } } - final Identifier identifier = identifierService.create(data, principal, authorization); + final Identifier identifier = identifierService.create(data, principal); return ResponseEntity.status(HttpStatus.CREATED) .body(identifierMapper.identifierToIdentifierDto(identifier)); } diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java similarity index 100% rename from dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java similarity index 100% rename from dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/MaintenanceEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java similarity index 98% rename from dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/MaintenanceEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java index 49fdfc37f472476403edfd3f7555fa244fe69fe6..3dd488acc8277bdcfa5d60b1011f200f435815c2 100644 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/MaintenanceEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MaintenanceEndpoint.java @@ -1,11 +1,9 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; -import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.maintenance.BannerMessageBriefDto; import at.tuwien.api.maintenance.BannerMessageCreateDto; import at.tuwien.api.maintenance.BannerMessageDto; import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.api.user.UserBriefDto; import at.tuwien.exception.BannerMessageNotFoundException; import at.tuwien.mapper.BannerMessageMapper; import at.tuwien.service.BannerMessageService; diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java similarity index 66% rename from dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java index 36d60d66b3073021c82f8bf66433db62325d7724..6c6edbaee4afa8bd665b05b6d19aa8c8295d2f2f 100644 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java @@ -2,9 +2,10 @@ package at.tuwien.endpoints; import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.semantics.*; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.exception.UserNotFoundException; +import at.tuwien.entities.semantics.Ontology; +import at.tuwien.exception.*; import at.tuwien.mapper.OntologyMapper; +import at.tuwien.service.EntityService; import at.tuwien.service.OntologyService; import io.micrometer.core.annotation.Timed; import io.swagger.v3.oas.annotations.Operation; @@ -14,6 +15,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -21,9 +24,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; - import java.security.Principal; import java.util.List; @@ -35,11 +35,13 @@ public class OntologyEndpoint { private final OntologyMapper ontologyMapper; private final OntologyService ontologyService; + private final EntityService entityService; @Autowired - public OntologyEndpoint(OntologyMapper ontologyMapper, OntologyService ontologyService) { + public OntologyEndpoint(OntologyMapper ontologyMapper, OntologyService ontologyService, EntityService entityService) { this.ontologyMapper = ontologyMapper; this.ontologyService = ontologyService; + this.entityService = entityService; } @GetMapping @@ -157,4 +159,64 @@ public class OntologyEndpoint { .build(); } + @GetMapping("/{id}/entity") + @PreAuthorize("hasAuthority('execute-semantic-query')") + @Timed(value = "semantics.find", description = "Time needed to find entities") + @Operation(summary = "Find entities", security = @SecurityRequirement(name = "bearerAuth")) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Found entities", + content = {@Content( + mediaType = "application/json", + array = @ArraySchema(schema = @Schema(implementation = EntityDto.class)))}), + @ApiResponse(responseCode = "400", + description = "Filter params are invalid", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "404", + description = "Could not find ontology", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "417", + description = "Generated query or uri is malformed", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + }) + public ResponseEntity<List<EntityDto>> find(@NotNull @PathVariable("id") Long id, + @RequestParam(name = "label", required = false) String label, + @RequestParam(name = "uri", required = false) String uri) + throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, + FilterBadRequestException { + log.debug("endpoint find entities by uri, id={}, label={}, uri={}", id, label, uri); + final Ontology ontology = ontologyService.find(id); + /* check */ + if ((label != null && uri != null) || (label == null && uri == null)) { + log.error("Failed to find entities: either label or uri must be defined"); + throw new FilterBadRequestException("Failed to find entities: either label or uri must be defined"); + } + if (uri != null && !uri.startsWith(ontology.getUri())) { + log.error("Failed to find entities: uri {} does not start with expected ontology uri {}", uri, ontology.getUri()); + throw new UriMalformedException("Failed to find entity: uri " + uri + " does not start with expected ontology uri " + ontology.getUri()); + } + if (ontology.getSparqlEndpoint() == null) { + log.error("Failed to find SPARQL endpoint for ontology with id {}", ontology.getId()); + throw new OntologyNotFoundException("Failed to find SPARQL endpoint for ontology with id " + ontology.getId()); + } + /* get */ + final List<EntityDto> dtos; + if (uri != null) { + dtos = entityService.findByUri(ontology, uri); + log.trace("find entities resulted in dtos {}", dtos); + return ResponseEntity.ok() + .body(dtos); + } + dtos = entityService.findByLabel(ontology, label); + log.trace("find entities resulted in dtos {}", dtos); + return ResponseEntity.ok() + .body(dtos); + } + } diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java similarity index 95% rename from dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java index 7560da55d309f975df9c4efea470f0bd4dc05788..337394c48c115b2eb857e632e73a05d5145ddf16 100644 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java @@ -19,6 +19,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; @@ -29,8 +31,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -91,8 +91,11 @@ public class PersistenceEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<?> find(@Valid @PathVariable("pid") Long pid, - @RequestHeader(HttpHeaders.ACCEPT) String accept) throws IdentifierNotFoundException, - QueryNotFoundException, RemoteUnavailableException, IdentifierRequestException { + @RequestHeader(HttpHeaders.ACCEPT) String accept, + @NotNull Principal principal) throws IdentifierNotFoundException, + QueryNotFoundException, RemoteUnavailableException, IdentifierRequestException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { log.debug("endpoint find identifier, pid={}, accept={}", pid, accept); final Identifier identifier = identifierService.find(pid); log.info("Found persistent identifier with id {}", identifier.getId()); @@ -109,7 +112,7 @@ public class PersistenceEndpoint { log.trace("accept header matches csv"); final InputStreamResource resource2; try { - resource2 = identifierService.exportResource(pid); + resource2 = identifierService.exportResource(pid, principal); log.debug("find identifier resulted in resource {}", resource2); return ResponseEntity.ok(resource2); } catch (IdentifierRequestException e) { @@ -183,10 +186,10 @@ public class PersistenceEndpoint { }) public ResponseEntity<IdentifierDto> update(@NotNull @PathVariable("id") Long id, @NotNull @Valid @RequestBody IdentifierSaveDto data, - @NotNull @RequestHeader(name = "Authorization") String authorization, @NotNull Principal principal) throws IdentifierNotFoundException, IdentifierRequestException, UserNotFoundException, NotAllowedException, - QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException { + QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { log.debug("endpoint update identifier, id={}, data={}", id, data); final Identifier identifier = identifierService.find(id); final User user = userService.findByUsername(principal.getName()); @@ -199,7 +202,7 @@ public class PersistenceEndpoint { } } /* check */ - final IdentifierDto dto = identifierMapper.identifierToIdentifierDto(identifierService.update(id, data, principal, authorization)); + final IdentifierDto dto = identifierMapper.identifierToIdentifierDto(identifierService.update(id, data, principal)); log.debug("update identifier resulted in dto={}", dto); return ResponseEntity.accepted() .body(dto); diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java similarity index 99% rename from dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java index 7c9c25ce62e4c49d784e659a80b65bd62ac2ec8e..119412473e9c642868c91afa2eeb19dfac9de726 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.ExportResource; import at.tuwien.SortType; diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java similarity index 52% rename from dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java index ce2f64c63807dfdcfdeab16a0f874f6514b8f158..bb2536451d7e27a237cf782876423f6671013241 100644 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/SemanticsEndpoint.java @@ -1,8 +1,19 @@ package at.tuwien.endpoints; -import at.tuwien.api.database.table.columns.concepts.*; +import at.tuwien.api.database.table.columns.concepts.ConceptDto; +import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; +import at.tuwien.api.database.table.columns.concepts.UnitDto; +import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; +import at.tuwien.api.error.ApiErrorDto; +import at.tuwien.api.semantics.EntityDto; +import at.tuwien.api.semantics.TableColumnEntityDto; +import at.tuwien.exception.DatabaseNotFoundException; +import at.tuwien.exception.QueryMalformedException; +import at.tuwien.exception.TableColumnNotFoundException; +import at.tuwien.exception.TableNotFoundException; import at.tuwien.mapper.OntologyMapper; import at.tuwien.mapper.SemanticMapper; +import at.tuwien.service.EntityService; import at.tuwien.service.SemanticService; import io.micrometer.core.annotation.Timed; import io.swagger.v3.oas.annotations.Operation; @@ -16,7 +27,6 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; @@ -33,12 +43,15 @@ public class SemanticsEndpoint { private final SemanticMapper semanticMapper; private final OntologyMapper ontologyMapper; private final SemanticService semanticService; + private final EntityService entityService; @Autowired - public SemanticsEndpoint(SemanticMapper semanticMapper, OntologyMapper ontologyMapper, SemanticService semanticService) { + public SemanticsEndpoint(SemanticMapper semanticMapper, OntologyMapper ontologyMapper, + SemanticService semanticService, EntityService entityService) { this.semanticMapper = semanticMapper; this.ontologyMapper = ontologyMapper; this.semanticService = semanticService; + this.entityService = entityService; } @GetMapping("/concept") @@ -125,4 +138,69 @@ public class SemanticsEndpoint { .body(dto); } + @GetMapping("/database/{databaseId}/table/{tableId}") + @Transactional(readOnly = true) + @PreAuthorize("hasAuthority('table-semantic-analyse')") + @Timed(value = "semantics.table.analyse", description = "Time needed to analyse table semantics") + @Operation(summary = "Suggest table semantics", security = @SecurityRequirement(name = "bearerAuth")) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Suggested table semantics successfully", + content = {@Content( + mediaType = "application/json", + array = @ArraySchema(schema = @Schema(implementation = TableColumnEntityDto.class)))}), + @ApiResponse(responseCode = "404", + description = "Could not find the table", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "417", + description = "Generated query is malformed", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + }) + public ResponseEntity<List<EntityDto>> analyseTable(@NotNull @PathVariable("databaseId") Long databaseId, + @NotNull @PathVariable("tableId") Long tableId) + throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException { + log.debug("endpoint analyse table semantics, databaseId={}, tableId={}", databaseId, tableId); + final List<EntityDto> dtos = entityService.suggestTableSemantics(databaseId, tableId); + log.trace("analyse table semantics resulted in dtos {}", dtos); + return ResponseEntity.ok() + .body(dtos); + } + + @GetMapping("/database/{databaseId}/table/{tableId}/column/{columnId}") + @Transactional(readOnly = true) + @PreAuthorize("hasAuthority('table-semantic-analyse')") + @Timed(value = "semantics.table.columnanalyse", description = "Time needed to analyse table column semantics") + @Operation(summary = "Suggest table column semantics", security = @SecurityRequirement(name = "bearerAuth")) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Suggested table column semantics successfully", + content = {@Content( + mediaType = "application/json", + array = @ArraySchema(schema = @Schema(implementation = TableColumnEntityDto.class)))}), + @ApiResponse(responseCode = "404", + description = "Could not find the table column", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "417", + description = "Generated query is malformed", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + }) + public ResponseEntity<List<TableColumnEntityDto>> analyseTableColumn(@NotNull @PathVariable("databaseId") Long databaseId, + @NotNull @PathVariable("tableId") Long tableId, + @NotNull @PathVariable("columnId") Long columnId) + throws QueryMalformedException, TableColumnNotFoundException { + log.debug("endpoint analyse table column semantics, databaseId={}, tableId={}, columnId={}", databaseId, tableId, columnId); + final List<TableColumnEntityDto> dtos = entityService.suggestTableColumnSemantics(databaseId, tableId, columnId); + log.trace("analyse table semantics resulted in dtos {}", dtos); + return ResponseEntity.ok() + .body(dtos); + } + } diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java similarity index 98% rename from dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java index dc5bec2102a0021f2b09ff9ff0894111ada92c4a..f638a95f4ab8aeb5216a64a23831df7f681419fa 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/StoreEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryDto; @@ -186,11 +186,9 @@ public class StoreEndpoint { final QueryDto dto = queryMapper.queryToQueryDto(query); final User creator = userService.findByUsername(query.getCreatedBy()); dto.setCreator(userMapper.userToUserDto(creator)); - try { - final Identifier identifier = identifierService.findByDatabaseIdAndQueryId(databaseId, queryId); - dto.setIdentifier(identifierMapper.identifierToIdentifierDto(identifier)); - } catch (IdentifierNotFoundException e) { - /* ignore */ + final List<Identifier> identifiers = identifierService.findByDatabaseIdAndQueryId(databaseId, queryId); + if (!identifiers.isEmpty()) { + dto.setIdentifier(identifierMapper.identifierToIdentifierDto(identifiers.get(0))); } log.trace("find query resulted in query {}", dto); return ResponseEntity.ok(dto); diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java similarity index 98% rename from dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java index 2ec824e75864f149bd77aee77739b54616c8da99..45c13dd6abc73565a47a1cb041822d7daa2e109a 100644 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java @@ -84,7 +84,7 @@ public class TableColumnEndpoint { @NotNull @RequestHeader("Authorization") String authorization) throws TableNotFoundException, TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, NotAllowedException, SemanticEntityPersistException, - SemanticEntityNotFoundException { + SemanticEntityNotFoundException, QueryMalformedException { log.debug("endpoint update table, id={}, tableId={}, principal={}", id, tableId, principal); if (!User.hasRole(principal, "modify-foreign-table-column-semantics")) { endpointValidator.validateOnlyAccess(id, principal, true); diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java similarity index 99% rename from dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java index f3e657b9777b21633714a54aac202332b3fee658..f5f816658b78da685c1f45ba0162fdc1841637a5 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableDataEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.SortType; import at.tuwien.api.database.query.ImportDto; diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java similarity index 100% rename from dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java similarity index 99% rename from dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java index 05cf4553c72b5d6d108a4ff909407f3b08392a8b..109eb757271897d68885ea6f446a312f3ff5a287 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableHistoryEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.api.error.ApiErrorDto; diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java similarity index 99% rename from dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java index 4f7ceb9ae7c5e6b9c09b87c14bbe8c34d602621b..500ccd9682577ca161a24e01e6891ffbc969e950 100644 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.error.ApiErrorDto; @@ -17,6 +17,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -25,9 +27,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; - import java.security.Principal; import java.util.List; import java.util.UUID; diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java similarity index 99% rename from dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java index f52197744a3a674c3346e30fea8c4f26978edfe8..c7367fe6045231018283cbc6a92178aad08fafdf 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java @@ -1,4 +1,4 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.api.database.ViewBriefDto; import at.tuwien.api.database.ViewCreateDto; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java index 94bc7246f5a34cc3eb397808b8b95bdcc941a904..97db5241464eb3b23c97828c5abacfa012c1224a 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java @@ -1,8 +1,7 @@ package at.tuwien.handlers; import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.IdentifierNotFoundException; -import at.tuwien.exception.InvalidPrefixException; +import at.tuwien.exception.*; import io.swagger.v3.oas.annotations.Hidden; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -40,4 +39,820 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); } + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(ContainerAlreadyExistsException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.container.exists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.GONE) + @ExceptionHandler(ContainerAlreadyRemovedException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyRemovedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.GONE) + .message(e.getLocalizedMessage()) + .code("error.container.alreadyremoved") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(ContainerAlreadyRunningException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyRunningException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.container.alreadyrunning") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(ContainerAlreadyStoppedException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerAlreadyStoppedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.container.alreadystopped") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(ContainerNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.container.notfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_GATEWAY) + @ExceptionHandler(ContainerNotRunningException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerNotRunningException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_GATEWAY) + .message(e.getLocalizedMessage()) + .code("error.container.notrunning") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(ContainerStillRunningException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerStillRunningException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.container.stillrunning") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(ImageAlreadyExistsException.class) + public ResponseEntity<ApiErrorDto> handle(ImageAlreadyExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.image.exists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(ImageInvalidException.class) + public ResponseEntity<ApiErrorDto> handle(ImageInvalidException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.image.invalid") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(ImageNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(ImageNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.image.notfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) + @ExceptionHandler(NotAllowedException.class) + public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.METHOD_NOT_ALLOWED) + .message(e.getLocalizedMessage()) + .code("error.container.notallowed") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.FORBIDDEN) + @ExceptionHandler(PersistenceException.class) + public ResponseEntity<ApiErrorDto> handle(PersistenceException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.FORBIDDEN) + .message(e.getLocalizedMessage()) + .code("error.container.storage") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(UserNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.container.usernotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(AmqpException.class) + public ResponseEntity<ApiErrorDto> handle(AmqpException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.database.amqp") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(BrokerMalformedException.class) + public ResponseEntity<ApiErrorDto> handle(BrokerMalformedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.database.broker") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) + @ExceptionHandler(BrokerVirtualHostCreationException.class) + public ResponseEntity<ApiErrorDto> handle(BrokerVirtualHostCreationException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_ACCEPTABLE) + .message(e.getLocalizedMessage()) + .code("error.database.virtualhostcreate") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) + @ExceptionHandler(BrokerVirtualHostGrantException.class) + public ResponseEntity<ApiErrorDto> handle(BrokerVirtualHostGrantException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.METHOD_NOT_ALLOWED) + .message(e.getLocalizedMessage()) + .code("error.database.virtualhostgrant") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) + @ExceptionHandler(ContainerConnectionException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerConnectionException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.SERVICE_UNAVAILABLE) + .message(e.getLocalizedMessage()) + .code("error.database.containerconnection") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.EXPECTATION_FAILED) + @ExceptionHandler(ContainerUnauthorizedException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerUnauthorizedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.EXPECTATION_FAILED) + .message(e.getLocalizedMessage()) + .code("error.database.containerunauthorized") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) + @ExceptionHandler(DatabaseConnectionException.class) + public ResponseEntity<ApiErrorDto> handle(DatabaseConnectionException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.METHOD_NOT_ALLOWED) + .message(e.getLocalizedMessage()) + .code("error.database.databaseconnection") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(DatabaseMalformedException.class) + public ResponseEntity<ApiErrorDto> handle(DatabaseMalformedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.database.databasemalformed") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(DatabaseNameExistsException.class) + public ResponseEntity<ApiErrorDto> handle(DatabaseNameExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.database.databasenameexists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(DatabaseNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(DatabaseNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.database.databasenotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_IMPLEMENTED) + @ExceptionHandler(ImageNotSupportedException.class) + public ResponseEntity<ApiErrorDto> handle(ImageNotSupportedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_IMPLEMENTED) + .message(e.getLocalizedMessage()) + .code("error.database.imagenotsupported") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(LicenseNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(LicenseNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.database.licensenotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(QueryMalformedException.class) + public ResponseEntity<ApiErrorDto> handle(QueryMalformedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.database.querymalformed") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(QueryStoreException.class) + public ResponseEntity<ApiErrorDto> handle(QueryStoreException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.database.querystore") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(SubjectNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(SubjectNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.database.subjectnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({ArbitraryPrimaryKeysException.class}) + public ResponseEntity<ApiErrorDto> handle(ArbitraryPrimaryKeysException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.table.primarykey") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.LOCKED) + @ExceptionHandler({DataProcessingException.class}) + public ResponseEntity<ApiErrorDto> handle(DataProcessingException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.LOCKED) + .message(e.getLocalizedMessage()) + .code("error.table.processing") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({FileStorageException.class}) + public ResponseEntity<ApiErrorDto> handle(FileStorageException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.table.storage") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({PaginationException.class}) + public ResponseEntity<ApiErrorDto> handle(PaginationException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.table.pagination") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({TableMalformedException.class}) + public ResponseEntity<ApiErrorDto> handle(TableMalformedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.table.tablemalformed") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler({TableNameExistsException.class}) + public ResponseEntity<ApiErrorDto> handle(TableNameExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.table.nameexists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({TableNotFoundException.class}) + public ResponseEntity<ApiErrorDto> handle(TableNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.table.tablenotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({ConceptNotFoundException.class}) + public ResponseEntity<ApiErrorDto> handle(ConceptNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.table.conceptnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({SemanticEntityNotFoundException.class}) + public ResponseEntity<ApiErrorDto> handle(SemanticEntityNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.table.semanticentitynotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY) + @ExceptionHandler({SemanticEntityPersistException.class}) + public ResponseEntity<ApiErrorDto> handle(SemanticEntityPersistException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.UNPROCESSABLE_ENTITY) + .message(e.getLocalizedMessage()) + .code("error.table.semanticentitypersist") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({UnitNotFoundException.class}) + public ResponseEntity<ApiErrorDto> handle(UnitNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.table.unitnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.EXPECTATION_FAILED) + @ExceptionHandler(ColumnParseException.class) + public ResponseEntity<ApiErrorDto> handle(ColumnParseException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.EXPECTATION_FAILED) + .message(e.getLocalizedMessage()) + .code("error.query.columnparse") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(HeaderInvalidException.class) + public ResponseEntity<ApiErrorDto> handle(HeaderInvalidException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.query.exportheader") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(QueryAlreadyPersistedException.class) + public ResponseEntity<ApiErrorDto> handle(QueryAlreadyPersistedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.query.alreadypersisted") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(QueryNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(QueryNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.query.notfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(SortException.class) + public ResponseEntity<ApiErrorDto> handle(SortException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.query.sort") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(TupleDeleteException.class) + public ResponseEntity<ApiErrorDto> handle(TupleDeleteException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.query.tupledelete") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.LOCKED) + @ExceptionHandler(ViewMalformedException.class) + public ResponseEntity<ApiErrorDto> handle(ViewMalformedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.LOCKED) + .message(e.getLocalizedMessage()) + .code("error.query.viewmalformed") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(ViewNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(ViewNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.query.viewnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) + @ExceptionHandler(ForeignUserException.class) + public ResponseEntity<ApiErrorDto> handle(ForeignUserException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.METHOD_NOT_ALLOWED) + .message(e.getLocalizedMessage()) + .code("error.user.foreignpermission") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(RealmNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(RealmNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.user.realmnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NO_CONTENT) + @ExceptionHandler(RemoteUnavailableException.class) + public ResponseEntity<ApiErrorDto> handle(RemoteUnavailableException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NO_CONTENT) + .message(e.getLocalizedMessage()) + .code("error.user.remoteunavailable") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(RoleNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(RoleNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.user.rolenotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(UserAlreadyExistsException.class) + public ResponseEntity<ApiErrorDto> handle(UserAlreadyExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.user.alreadyexists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(UserAttributeNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(UserAttributeNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.user.attributenotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.EXPECTATION_FAILED) + @ExceptionHandler(UserEmailAlreadyExistsException.class) + public ResponseEntity<ApiErrorDto> handle(UserEmailAlreadyExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.EXPECTATION_FAILED) + .message(e.getLocalizedMessage()) + .code("error.user.emailexists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(BannerMessageNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(BannerMessageNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.banner.notfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.FORBIDDEN) + @ExceptionHandler(AccessDeniedException.class) + public ResponseEntity<ApiErrorDto> handle(AccessDeniedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.FORBIDDEN) + .message(e.getLocalizedMessage()) + .code("error.identifier.accessdenied") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.CONFLICT) + @ExceptionHandler(IdentifierAlreadyExistsException.class) + public ResponseEntity<ApiErrorDto> handle(IdentifierAlreadyExistsException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.CONFLICT) + .message(e.getLocalizedMessage()) + .code("error.identifier.exists") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.PRECONDITION_FAILED) + @ExceptionHandler(IdentifierAlreadyPublishedException.class) + public ResponseEntity<ApiErrorDto> handle(IdentifierAlreadyPublishedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.PRECONDITION_FAILED) + .message(e.getLocalizedMessage()) + .code("error.identifier.published") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) + @ExceptionHandler(IdentifierPublishingNotAllowedException.class) + public ResponseEntity<ApiErrorDto> handle(IdentifierPublishingNotAllowedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_ACCEPTABLE) + .message(e.getLocalizedMessage()) + .code("error.identifier.publish") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(IdentifierRequestException.class) + public ResponseEntity<ApiErrorDto> handle(IdentifierRequestException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.identifier.requestinvalid") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(IdentifierUpdateBadFormException.class) + public ResponseEntity<ApiErrorDto> handle(IdentifierUpdateBadFormException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.identifier.updatebadform") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(OrcidNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(OrcidNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.identifier.orcidnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(RorNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(RorNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.identifier.rornotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(DoiNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(DoiNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.identifier.doinotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({FilterBadRequestException.class}) + public ResponseEntity<ApiErrorDto> handle(FilterBadRequestException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.BAD_REQUEST) + .message(e.getLocalizedMessage()) + .code("error.semantic.filter") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({OntologyNotFoundException.class}) + public ResponseEntity<ApiErrorDto> handle(OntologyNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.ontology.notfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.EXPECTATION_FAILED) + @ExceptionHandler({UriMalformedException.class}) + public ResponseEntity<ApiErrorDto> handle(UriMalformedException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.EXPECTATION_FAILED) + .message(e.getLocalizedMessage()) + .code("error.semantic.urimalformed") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + + @Hidden + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler({TableColumnNotFoundException.class}) + public ResponseEntity<ApiErrorDto> handle(TableColumnNotFoundException e, WebRequest request) { + final ApiErrorDto response = ApiErrorDto.builder() + .status(HttpStatus.NOT_FOUND) + .message(e.getLocalizedMessage()) + .code("error.semantic.tablecolumnnotfound") + .build(); + return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); + } + } diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java similarity index 55% rename from dbrepo-table-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java index 15a48e11ba2356969e17286ba3070865afa727e4..fd29d514de4c1601b770fba5bbf8c7240a5bb957 100644 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java @@ -1,14 +1,20 @@ package at.tuwien.validation; +import at.tuwien.SortType; +import at.tuwien.api.database.query.ExecuteStatementDto; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.columns.ColumnCreateDto; import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.tuwien.config.QueryConfig; import at.tuwien.entities.database.AccessType; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.identifier.Identifier; +import at.tuwien.entities.identifier.VisibilityType; import at.tuwien.entities.user.User; import at.tuwien.exception.*; +import at.tuwien.repository.mdb.IdentifierRepository; import at.tuwien.service.AccessService; import at.tuwien.service.DatabaseService; import at.tuwien.service.TableService; @@ -17,20 +23,25 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.security.Principal; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Log4j2 @Component public class EndpointValidator { + private final QueryConfig queryConfig; + private final IdentifierRepository identifierRepository; private final AccessService accessService; private final DatabaseService databaseService; private final TableService tableService; @Autowired - public EndpointValidator(AccessService accessService, DatabaseService databaseService, TableService tableService) { + public EndpointValidator(QueryConfig queryConfig, IdentifierRepository identifierRepository, + AccessService accessService, DatabaseService databaseService, TableService tableService) { + this.queryConfig = queryConfig; + this.identifierRepository = identifierRepository; this.accessService = accessService; this.databaseService = databaseService; this.tableService = tableService; @@ -164,4 +175,116 @@ public class EndpointValidator { } log.trace("principal has role '{}': access granted", role); } + + public void validateDataParams(Long page, Long size) throws PaginationException { + log.trace("validate data params, page={}, size={}", page, size); + if ((page == null && size != null) || (page != null && size == null)) { + log.error("Failed to validate page and/or size number, either both are present or none"); + throw new PaginationException("Failed to validate page and/or size number"); + } + if (page != null && page < 0) { + log.error("Failed to validate page number, is lower than zero"); + throw new PaginationException("Failed to validate page number"); + } + if (size != null && size <= 0) { + log.error("Failed to validate size number, is lower or equal than zero"); + throw new PaginationException("Failed to validate size number"); + } + } + + public void validateDataParams(Long page, Long size, SortType sortDirection, String sortColumn) + throws PaginationException, SortException { + log.trace("validate data params, page={}, size={}, sortDirection={}, sortColumn={}", page, size, + sortDirection, sortColumn); + validateDataParams(page, size); + if ((sortDirection == null && sortColumn != null) || (sortDirection != null && sortColumn == null)) { + log.error("Failed to validate sort direction and/or sort column, either both are present or none"); + throw new SortException("Failed to validate sort direction and/or sort column"); + } + } + + /** + * Do not allow aggregate functions and comments + * https://mariadb.com/kb/en/aggregate-functions/ + */ + public void validateForbiddenStatements(ExecuteStatementDto data) throws QueryMalformedException { + final List<String> words = new LinkedList<>(); + Arrays.stream(queryConfig.getNotSupportedKeywords()) + .forEach(keyword -> { + final Pattern pattern = Pattern.compile(keyword); + final Matcher matcher = pattern.matcher(data.getStatement()); + final boolean found = matcher.find(); + if (found) { + words.add(keyword); + } + }); + if (words.size() == 0) { + return; + } + log.error("Query contains forbidden keyword(s): {}", words); + throw new QueryMalformedException("Query contains forbidden keyword(s): " + Arrays.toString(words.toArray())); + } + + public void validateOnlyAccessOrPublic(Long databaseId, Principal principal) + throws DatabaseNotFoundException, NotAllowedException { + final Database database = databaseService.find(databaseId); + if (database.getIsPublic()) { + log.trace("database with id {} is public: no access needed", databaseId); + return; + } + log.trace("database with id {} is private", databaseId); + if (principal == null) { + log.error("Access not allowed: database with id {} is not public and no authorization provided", databaseId); + throw new NotAllowedException("Access not allowed: database with id " + databaseId + " is not public and no authorization provided"); + } + log.trace("principal is {}", principal); + final DatabaseAccess access = accessService.find(databaseId, principal.getName()); + log.trace("found access {}", access); + } + + public void validateOnlyAccessOrPublic(Long databaseId, Long queryId, Principal principal) + throws NotAllowedException, DatabaseNotFoundException { + final Optional<Identifier> optional = identifierRepository.findSubsetIdentifier(databaseId, queryId); + if (optional.isPresent()) { + final Identifier identifier = optional.get(); + log.trace("found identifier for query with id {}", queryId); + if (principal != null && identifier.getVisibility().equals(VisibilityType.SELF)) { + if (identifier.getCreator().getUsername().equals(principal.getName())) { + return; + } + log.error("Access not allowed: visibility is 'self' and user is not the creator"); + throw new NotAllowedException("Access not allowed: visibility is 'self' and you are not the creator"); + } + if (!identifier.getVisibility().equals(VisibilityType.EVERYONE)) { + log.error("Access not allowed: visibility is not 'everyone'"); + throw new NotAllowedException("Access not allowed: visibility is not 'everyone'"); + } + log.trace("identifier is public, validation passed"); + return; + } + validateOnlyAccessOrPublic(databaseId, principal); + } + + public void validateOnlyWriteOwnOrWriteAllAccess(Long databaseId, Long tableId, Principal principal) + throws DatabaseNotFoundException, TableNotFoundException, NotAllowedException { + final Table table = tableService.find(databaseId, tableId); + if (principal == null) { + log.error("Access not allowed: no authorization provided"); + throw new NotAllowedException("Access not allowed: no authorization provided"); + } + log.trace("principal is {}", principal); + final DatabaseAccess access = accessService.find(databaseId, principal.getName()); + log.trace("found access {}", access); + if (access.getType().equals(AccessType.WRITE_ALL)) { + log.debug("user {} has write-all access, skip.", principal.getName()); + return; + } + if (table.getOwner().getUsername().equals(principal.getName()) && access.getType().equals(AccessType.WRITE_OWN)) { + log.debug("user {} has write-own access to their own table, skip.", principal.getName()); + return; + } + log.error("Access not allowed: no write access for table with id {}", tableId); + throw new NotAllowedException("Access not allowed: no write access for table with id " + tableId); + } + } diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application-doi.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application-doi.yml similarity index 100% rename from dbrepo-identifier-service/rest-service/src/main/resources/application-doi.yml rename to dbrepo-metadata-service/rest-service/src/main/resources/application-doi.yml diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml index c4ee4f789753ae2c82003e6a88efadd2b9f2ba36..fdff72e980214bf1e16fc163ff2c91a5dd0791a9 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml @@ -47,8 +47,16 @@ logging: at.tuwien.: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug fda: - pid.base: https://example.com/pid/ - gateway.endpoint: http://localhost + pid: + base: https://example.com/pid/ + broker: + endpoint: http://localhost:15672 + jwt: + issuer: http://localhost/realms/dbrepo + public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB + consumers: 2 + unsupported: \*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,-- + website: http://localhost dbrepo: repository-name: TU Wien Database Repository base-url: https://dbrepo1.ec.tuwien.at/api/oai diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml index 1713628ea50567321d3834a8edc910eada04083f..c24d35dc18b7e9d862cdbef585bc36d138a3f266 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml @@ -2,7 +2,7 @@ app.version: '@project.version@' spring: main.banner-mode: off autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration + exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration datasource: url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" driver-class-name: org.mariadb.jdbc.Driver @@ -37,8 +37,6 @@ spring: host: search-db port: 9200 protocol: http - cloud: - loadbalancer.ribbon.enabled: false management: endpoints: web: @@ -62,8 +60,16 @@ logging: at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug fda: - pid.base: "${PID_BASE}" - gateway.endpoint: "${GATEWAY_ENDPOINT}" + pid: + base: "${PID_BASE}" + broker: + endpoint: "${BROKER_ENDPOINT}" + jwt: + issuer: "${JWT_ISSUER}" + public_key: "${JWT_PUBKEY}" + consumers: "${BROKER_CONSUMERS}" + unsupported: "${NOT_SUPPORTED_KEYWORDS}" + website: "${WEBSITE}" dbrepo: repository-name: "${REPOSITORY_NAME}" base-url: "${BASE_URL}" diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/config.properties b/dbrepo-metadata-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_01.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_01.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_01.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_01.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_02.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_02.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_02.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_02.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_03.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_03.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_03.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_03.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_04.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_04.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_04.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_04.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_05.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_05.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_05.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_05.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_06.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_06.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_06.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_06.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_07.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_07.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_07.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_07.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_08.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_08.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_08.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_08.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_09.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_09.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_09.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_09.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_10.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_10.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_10.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_10.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_11.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_11.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_11.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_11.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_12.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_12.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_12.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_12.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_13.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_13.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_13.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_13.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/csv/csv_14.csv b/dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_14.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/csv/csv_14.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/csv/csv_14.csv diff --git a/dbrepo-database-service/rest-service/src/main/resources/init/querystore.sql b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql similarity index 79% rename from dbrepo-database-service/rest-service/src/main/resources/init/querystore.sql rename to dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql index 9705d2f86cd0104460b912e0cb0e814689ed6233..1bf8b26c5580b343a7e75864931f2f8584932843 100644 --- a/dbrepo-database-service/rest-service/src/main/resources/init/querystore.sql +++ b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore.sql @@ -1,5 +1,5 @@ CREATE SEQUENCE `qs_queries_seq`; CREATE TABLE `qs_queries` ( `id` bigint not null primary key default nextval(`qs_queries_seq`), `created` datetime not null default now(), `executed` datetime not null default now(), `created_by` varchar(255) not null, `query` text not null, `query_normalized` text not null, `is_persisted` boolean not null, `query_hash` varchar(255) not null, `result_hash` varchar(255), `result_number` bigint ); CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255), OUT count BIGINT) BEGIN DECLARE _sql TEXT; SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), ') SEPARATOR \',\'), 256) AS hash, COUNT(*) AS count FROM `', name, '` INTO @hash, @count;') FROM `information_schema`.`columns` WHERE `table_schema` = DATABASE() AND `table_name` = name INTO _sql; PREPARE stmt FROM _sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET hash = @hash; SET count = @count; END; -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; +CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/resources/init/querystore_manual.sql b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql similarity index 96% rename from dbrepo-database-service/rest-service/src/main/resources/init/querystore_manual.sql rename to dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql index 4eacd36ebb23a52ee4ccf378a4cc8122db66df52..5580d0fd260b6ba4fddd24b411a6e74467d151d2 100644 --- a/dbrepo-database-service/rest-service/src/main/resources/init/querystore_manual.sql +++ b/dbrepo-metadata-service/rest-service/src/main/resources/init/querystore_manual.sql @@ -46,7 +46,7 @@ BEGIN ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) - SELECT _username, query, query, true, _queryhash, @hash, @count, executed + SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; @@ -68,7 +68,7 @@ BEGIN ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) - SELECT _username, query, query, true, _queryhash, @hash, @count, executed + SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; diff --git a/dbrepo-query-service/rest-service/src/main/resources/seed/air-small.csv b/dbrepo-metadata-service/rest-service/src/main/resources/seed/air-small.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/seed/air-small.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/seed/air-small.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/seed/infection-small.csv b/dbrepo-metadata-service/rest-service/src/main/resources/seed/infection-small.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/seed/infection-small.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/seed/infection-small.csv diff --git a/dbrepo-query-service/rest-service/src/main/resources/seed/weather-small.csv b/dbrepo-metadata-service/rest-service/src/main/resources/seed/weather-small.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/main/resources/seed/weather-small.csv rename to dbrepo-metadata-service/rest-service/src/main/resources/seed/weather-small.csv diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_apa.txt b/dbrepo-metadata-service/rest-service/src/main/resources/templates/cite_apa.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_apa.txt rename to dbrepo-metadata-service/rest-service/src/main/resources/templates/cite_apa.txt diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_bibtex.txt b/dbrepo-metadata-service/rest-service/src/main/resources/templates/cite_bibtex.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_bibtex.txt rename to dbrepo-metadata-service/rest-service/src/main/resources/templates/cite_bibtex.txt diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_ieee.txt b/dbrepo-metadata-service/rest-service/src/main/resources/templates/cite_ieee.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_ieee.txt rename to dbrepo-metadata-service/rest-service/src/main/resources/templates/cite_ieee.txt diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/templates/doi.xml b/dbrepo-metadata-service/rest-service/src/main/resources/templates/doi.xml similarity index 100% rename from dbrepo-identifier-service/rest-service/src/main/resources/templates/doi.xml rename to dbrepo-metadata-service/rest-service/src/main/resources/templates/doi.xml diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockAmqp.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockAmqp.java new file mode 100644 index 0000000000000000000000000000000000000000..22d717b4056b3c2508864a2de45757b574644934 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockAmqp.java @@ -0,0 +1,17 @@ +package at.tuwien.annotations; + +import at.tuwien.listener.impl.RabbitMqListenerImpl; +import com.rabbitmq.client.Channel; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.MockBeans; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@MockBeans({@MockBean(Channel.class), @MockBean(RabbitMqListenerImpl.class)}) +public @interface MockAmqp { +} diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java new file mode 100644 index 0000000000000000000000000000000000000000..37bd417ae4c1972661a371e23b0942b0143dc320 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/annotations/MockOpensearch.java @@ -0,0 +1,24 @@ +package at.tuwien.annotations; + +import at.tuwien.repository.sdb.*; +import org.mockito.Mock; +import org.opensearch.spring.boot.autoconfigure.OpenSearchRestClientAutoConfiguration; +import org.opensearch.spring.boot.autoconfigure.OpenSearchRestHighLevelClientAutoConfiguration; +import org.opensearch.spring.boot.autoconfigure.data.OpenSearchDataAutoConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.MockBeans; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@MockBeans({@MockBean(DatabaseIdxRepository.class), @MockBean(UnitIdxRepository.class), + @MockBean(ConceptIdxRepository.class), @MockBean(TableIdxRepository.class), @MockBean(TableColumnIdxRepository.class), + @MockBean(UserIdxRepository.class), @MockBean(ViewIdxRepository.class), @MockBean(IdentifierIdxRepository.class)}) +@EnableAutoConfiguration(exclude = {OpenSearchRestClientAutoConfiguration.class, OpenSearchRestHighLevelClientAutoConfiguration.class}) +public @interface MockOpensearch { +} diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/H2Utils.java similarity index 100% rename from dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/H2Utils.java index a1f0e6a838b1d003e3802671a042ce7bb87ea1cc..033d1ba280c7224f447ec99ded6850dbd38a38e9 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/H2Utils.java @@ -1,12 +1,12 @@ package at.tuwien.config; +import jakarta.persistence.EntityManager; import lombok.extern.log4j.Log4j2; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import jakarta.persistence.EntityManager; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java similarity index 67% rename from dbrepo-table-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java index b61c974e16f6f622932c97ea53521590a8d3d440..65b8004f0c81bdb5533fea8a99252a7c9133e001 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java @@ -1,10 +1,17 @@ package at.tuwien.config; +import at.tuwien.api.database.AccessTypeDto; +import at.tuwien.api.database.DatabaseGiveAccessDto; import at.tuwien.api.database.table.columns.ColumnTypeDto; import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.user.User; +import at.tuwien.exception.QueryMalformedException; +import at.tuwien.mapper.DatabaseMapper; +import at.tuwien.querystore.Query; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; @@ -22,6 +29,9 @@ import java.util.regex.Pattern; @Configuration public class MariaDbConfig { + @Autowired + private DatabaseMapper databaseMapper; + /** * Inserts a query into a created database with given hostname and database name. The method uses the JDBC in-out * notation <a href="#{@link}">{@link https://learn.microsoft.com/en-us/sql/connect/jdbc/using-sql-escape-sequences?view=sql-server-ver16#stored-procedure-calls}</a> @@ -53,67 +63,6 @@ public class MariaDbConfig { } } - public static Map<String, List<Object>> describeTableSchema(Table table, String username, String password) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + table.getDatabase().getContainer().getHost() + ":" + table.getDatabase().getContainer().getPort() + "/" + table.getDatabase().getInternalName(); - log.trace("connect to database {}", jdbc); - final Map<String, List<Object>> out = new HashMap<>(); - try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { - final String query = "SHOW COLUMNS FROM `" + table.getInternalName() + "`;"; - log.trace("prepare statement '{}'", query); - final PreparedStatement statement = connection.prepareStatement(query); - final ResultSet resultSet = statement.executeQuery(); - statement.close(); - while (resultSet.next()) { - if (resultSet.getString("Field").equals("id")) { - continue; - } - out.put(resultSet.getString("Field"), List.of(resultSet.getString("Type"), resultSet.getString("Null"), resultSet.getString("Key"))); - } - return out; - } - } - - public static ColumnTypeDto typetoColumnTypeDto(String data) throws Exception { - if (data.toUpperCase().startsWith("TINYINT(1)")) { - /* boolean in MySQL */ - return ColumnTypeDto.BOOL; - } - final Matcher matcher = Pattern.compile("([A-Z]+)") - .matcher(data.toUpperCase()); - if (!matcher.find()) { - log.error("Failed to map type: does not match expected format"); - throw new Exception("Failed to map type: does not match expected format"); - } - final String type = matcher.group(1); - try { - return ColumnTypeDto.valueOf(type); - } catch (IllegalArgumentException e) { - if (type.startsWith("TINYINT")) { - /* boolean in MySQL */ - return ColumnTypeDto.BOOL; - } else if (type.startsWith("BOOL")) { - /* boolean */ - return ColumnTypeDto.BOOL; - } else if (type.startsWith("DOUBLE")) { - /* double precision */ - return ColumnTypeDto.DOUBLE; - } else if (type.startsWith("INT")) { - /* integer synonym */ - return ColumnTypeDto.INT; - } else if (type.startsWith("DEC")) { - /* decimal synonym */ - return ColumnTypeDto.DECIMAL; - } else if (type.startsWith("ENUM")) { - return ColumnTypeDto.ENUM; - } else if (type.startsWith("SET")) { - return ColumnTypeDto.SET; - } - } - log.error("Failed to map data {} and type {}", data, type); - throw new Exception("Failed to map data " + data + " and type " + type); - } - public static void createDatabase(Container container, String database) throws SQLException { final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); log.trace("connect to database {}", jdbc); @@ -161,19 +110,6 @@ public class MariaDbConfig { } } - public static boolean tableExists(Database database, String tableName) - throws SQLException { - final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); - log.trace("connect to database {}", jdbc); - try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { - final Statement statement = connection.createStatement(); - final String query = "SHOW TABLES LIKE '" + tableName + "';"; - log.trace("execute query {}", query); - final ResultSet result = statement.executeQuery(query); - return result.next(); - } - } - public static void dropDatabase(Container container, String database) throws SQLException { final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); @@ -187,6 +123,24 @@ public class MariaDbConfig { } } + public void mockGrantUserPermissions(Container container, Database database, User user) throws SQLException, + QueryMalformedException { + final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort() + "/" + database.getInternalName(); + log.trace("connect to database {}", jdbc); + try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { + final DatabaseGiveAccessDto access = DatabaseGiveAccessDto.builder() + .username(user.getUsername()) + .type(AccessTypeDto.WRITE_ALL) + .build(); + final PreparedStatement statement1 = databaseMapper.rawGrantUserAccessQuery(connection, access); + statement1.executeUpdate(); + final PreparedStatement statement2 = databaseMapper.rawGrantUserProcedure(connection, user); + statement2.executeUpdate(); + final PreparedStatement statement3 = databaseMapper.rawFlushPrivileges(connection); + statement3.executeUpdate(); + } + } + public static List<String> getUsernames(String hostname, String database, String username, String password) throws SQLException { final String jdbc = "jdbc:mariadb://" + hostname + "/" + database; @@ -277,4 +231,163 @@ public class MariaDbConfig { public static Long mockSystemQueryInsert(Database database, String query) throws SQLException { return mockSystemQueryInsert(database, query, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword()); } + + public static void insertQueryStore(Database database, Query query, String username) throws SQLException { + final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); + log.trace("connect to database {}", jdbc); + try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { + final PreparedStatement prepareStatement = connection.prepareStatement( + "INSERT INTO qs_queries (created_by, query, query_normalized, is_persisted, query_hash, result_hash, result_number, created, executed) VALUES (?,?,?,?,?,?,?,?,?)"); + prepareStatement.setString(1, username); + prepareStatement.setString(2, query.getQuery()); + prepareStatement.setString(3, query.getQuery()); + prepareStatement.setBoolean(4, query.getIsPersisted()); + prepareStatement.setString(5, query.getQueryHash()); + prepareStatement.setString(6, query.getResultHash()); + prepareStatement.setLong(7, query.getResultNumber()); + prepareStatement.setTimestamp(8, Timestamp.from(query.getCreated())); + prepareStatement.setTimestamp(9, Timestamp.from(query.getExecuted())); + log.trace("prepared statement: {}", prepareStatement); + prepareStatement.executeUpdate(); + } + } + + public static List<Map<String, Object>> listQueryStore(Database database) throws SQLException { + final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); + log.trace("connect to database {}", jdbc); + try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { + final Statement statement = connection.createStatement(); + final ResultSet result = statement.executeQuery( + "SELECT created_by, query, query_normalized, is_persisted, query_hash, result_hash, result_number, created, executed FROM qs_queries"); + final List<Map<String, Object>> rows = new LinkedList<>(); + while (result.next()) { + rows.add(new HashMap<>() {{ + put("created_by", result.getString(1)); + put("query", result.getString(2)); + put("query_normalized", result.getString(3)); + put("is_persisted", result.getBoolean(4)); + put("query_hash", result.getString(5)); + put("result_hash", result.getString(6)); + put("result_number", result.getLong(7)); + put("created", result.getTimestamp(8)); + put("executed", result.getTimestamp(9)); + }}); + } + return rows; + } + } + + public static List<Map<String, String>> selectQuery(Database database, String query, String... columns) + throws SQLException { + final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); + log.trace("connect to database {}", jdbc); + final List<Map<String, String>> rows = new LinkedList<>(); + try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { + final Statement statement = connection.createStatement(); + final ResultSet result = statement.executeQuery(query); + while (result.next()) { + final Map<String, String> row = new HashMap<>(); + for (String column : columns) { + row.put(column, result.getString(column)); + } + rows.add(row); + } + } + return rows; + } + + public static void execute(Database database, String query) + throws SQLException { + final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); + log.trace("connect to database {}", jdbc); + try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { + final Statement statement = connection.createStatement(); + statement.executeUpdate(query); + } + } + + public static void execute(Container container, String query) + throws SQLException { + final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort(); + log.trace("connect to database {}", jdbc); + try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) { + final Statement statement = connection.createStatement(); + statement.executeUpdate(query); + } + } + + public static Map<String, List<Object>> describeTableSchema(Table table, String username, String password) + throws SQLException { + final String jdbc = "jdbc:mariadb://" + table.getDatabase().getContainer().getHost() + ":" + table.getDatabase().getContainer().getPort() + "/" + table.getDatabase().getInternalName(); + log.trace("connect to database {}", jdbc); + final Map<String, List<Object>> out = new HashMap<>(); + try (Connection connection = DriverManager.getConnection(jdbc, username, password)) { + final String query = "SHOW COLUMNS FROM `" + table.getInternalName() + "`;"; + log.trace("prepare statement '{}'", query); + final PreparedStatement statement = connection.prepareStatement(query); + final ResultSet resultSet = statement.executeQuery(); + statement.close(); + while (resultSet.next()) { + if (resultSet.getString("Field").equals("id")) { + continue; + } + out.put(resultSet.getString("Field"), List.of(resultSet.getString("Type"), resultSet.getString("Null"), resultSet.getString("Key"))); + } + return out; + } + } + + public static ColumnTypeDto typetoColumnTypeDto(String data) throws Exception { + if (data.toUpperCase().startsWith("TINYINT(1)")) { + /* boolean in MySQL */ + return ColumnTypeDto.BOOL; + } + final Matcher matcher = Pattern.compile("([A-Z]+)") + .matcher(data.toUpperCase()); + if (!matcher.find()) { + log.error("Failed to map type: does not match expected format"); + throw new Exception("Failed to map type: does not match expected format"); + } + final String type = matcher.group(1); + try { + return ColumnTypeDto.valueOf(type); + } catch (IllegalArgumentException e) { + if (type.startsWith("TINYINT")) { + /* boolean in MySQL */ + return ColumnTypeDto.BOOL; + } else if (type.startsWith("BOOL")) { + /* boolean */ + return ColumnTypeDto.BOOL; + } else if (type.startsWith("DOUBLE")) { + /* double precision */ + return ColumnTypeDto.DOUBLE; + } else if (type.startsWith("INT")) { + /* integer synonym */ + return ColumnTypeDto.INT; + } else if (type.startsWith("DEC")) { + /* decimal synonym */ + return ColumnTypeDto.DECIMAL; + } else if (type.startsWith("ENUM")) { + return ColumnTypeDto.ENUM; + } else if (type.startsWith("SET")) { + return ColumnTypeDto.SET; + } + } + log.error("Failed to map data {} and type {}", data, type); + throw new Exception("Failed to map data " + data + " and type " + type); + } + + public static boolean tableExists(Database database, String tableName) + throws SQLException { + final String jdbc = "jdbc:mariadb://" + database.getContainer().getHost() + ":" + database.getContainer().getPort() + "/" + database.getInternalName(); + log.trace("connect to database {}", jdbc); + try (Connection connection = DriverManager.getConnection(jdbc, database.getContainer().getPrivilegedUsername(), database.getContainer().getPrivilegedPassword())) { + final Statement statement = connection.createStatement(); + final String query = "SHOW TABLES LIKE '" + tableName + "';"; + log.trace("execute query {}", query); + final ResultSet result = statement.executeQuery(query); + return result.next(); + } + } + } diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java similarity index 100% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/ObjectMapperConfig.java similarity index 73% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/ObjectMapperConfig.java index a5c64eaa04daa81a13bbc0b0eac75cdaa70aaff9..6cbf682c8d26d93fef6884a45159a8f238e6f953 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/ObjectMapperConfig.java @@ -1,31 +1,26 @@ package at.tuwien.config; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import java.util.Date; import java.util.TimeZone; -@Slf4j @Configuration -public class JacksonConfig { +public class ObjectMapperConfig { @Bean @Primary - public ObjectMapper objectMapper() throws JsonProcessingException { + public ObjectMapper testObjectMapper() { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); return objectMapper; } diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/RabbitMqConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/RabbitMqConfig.java similarity index 100% rename from dbrepo-metadata-db/test/src/main/java/at/tuwien/config/RabbitMqConfig.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/RabbitMqConfig.java diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java similarity index 92% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java index 26387c1d36dde84dc4ad7c03c0e60fde05d8cf41..6f26be13b3eeb5b6dd32ea92cc2a94fa35751c28 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java @@ -1,11 +1,12 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.database.DatabaseAccessDto; import at.tuwien.api.database.DatabaseGiveAccessDto; import at.tuwien.api.database.DatabaseModifyAccessDto; -import at.tuwien.endpoints.AccessEndpoint; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.user.User; @@ -13,9 +14,7 @@ import at.tuwien.exception.*; import at.tuwien.mapper.AccessMapper; import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.AccessService; -import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -39,14 +38,10 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class AccessEndpointUnitTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - @MockBean private AccessService accessService; @@ -85,7 +80,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database-access"}) public void create_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseNotFoundException, DatabaseMalformedException, AccessDeniedException { + DatabaseNotFoundException, DatabaseMalformedException, NotAllowedException { /* mock */ doNothing() @@ -111,14 +106,14 @@ public class AccessEndpointUnitTest extends BaseUnitTest { public void find_hasRoleNoAccess_fails() { /* test */ - assertThrows(AccessDeniedException.class, () -> { + assertThrows(NotAllowedException.class, () -> { generic_find(DATABASE_1_ID, DATABASE_1, null, USER_2_USERNAME, USER_2_ID, USER_2_PRINCIPAL); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"check-database-access"}) - public void find_hasRoleHasAccess_succeeds() throws AccessDeniedException, NotAllowedException { + public void find_hasRoleHasAccess_succeeds() throws NotAllowedException, NotAllowedException { /* test */ generic_find(DATABASE_1_ID, DATABASE_1, DATABASE_1_USER_1_READ_ACCESS, USER_1_USERNAME, USER_1_ID, USER_1_PRINCIPAL); @@ -147,7 +142,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { .thenReturn(Optional.of(USER_4)); /* test */ - assertThrows(AccessDeniedException.class, () -> { + assertThrows(NotAllowedException.class, () -> { generic_update(DATABASE_1_ID, DATABASE_1, null, USER_4_USERNAME, USER_1_PRINCIPAL); }); } @@ -168,7 +163,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"update-database-access"}) - public void update_succeeds() throws UserNotFoundException, AccessDeniedException, NotAllowedException, + public void update_succeeds() throws UserNotFoundException, NotAllowedException, NotAllowedException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { /* mock */ @@ -205,7 +200,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"delete-database-access"}) public void revoke_succeeds() throws UserNotFoundException, NotAllowedException, - QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, AccessDeniedException { + QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, NotAllowedException { /* mock */ doNothing() @@ -223,7 +218,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { protected void generic_create(Long databaseId, Database database, DatabaseAccess access, String username, User user, Principal principal) throws UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, - AccessDeniedException { + NotAllowedException { final DatabaseGiveAccessDto request = DatabaseGiveAccessDto.builder() .username(username) .type(AccessTypeDto.READ) @@ -240,7 +235,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { .thenReturn(access); } else { log.trace("mock no access for user with username {} for database with id {}", username, databaseId); - doThrow(AccessDeniedException.class) + doThrow(NotAllowedException.class) .when(accessService) .find(databaseId, username); } @@ -252,7 +247,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { } protected void generic_find(Long databaseId, Database database, DatabaseAccess access, - String username, UUID userId, Principal principal) throws AccessDeniedException, + String username, UUID userId, Principal principal) throws NotAllowedException, NotAllowedException { /* mock */ @@ -264,7 +259,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { .thenReturn(access); } else { log.trace("mock no access for user with username {} for database with id {}", username, databaseId); - doThrow(AccessDeniedException.class) + doThrow(NotAllowedException.class) .when(accessService) .find(databaseId, username); } @@ -280,7 +275,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { } protected void generic_update(Long databaseId, Database database, DatabaseAccess access, - String username, Principal principal) throws AccessDeniedException, + String username, Principal principal) throws NotAllowedException, NotAllowedException, UserNotFoundException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { final DatabaseModifyAccessDto request = DatabaseModifyAccessDto.builder() .type(AccessTypeDto.READ) @@ -295,7 +290,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { .thenReturn(access); } else { log.trace("mock no access for user with username {} for database with id {}", username, databaseId); - doThrow(AccessDeniedException.class) + doThrow(NotAllowedException.class) .when(accessService) .find(databaseId, username); } @@ -307,7 +302,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { } protected void generic_revoke(Long databaseId, DatabaseAccess access, String username, - Principal principal) throws AccessDeniedException, NotAllowedException, + Principal principal) throws NotAllowedException, NotAllowedException, UserNotFoundException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { /* mock */ @@ -317,7 +312,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { .thenReturn(access); } else { log.trace("mock no access for user with username {} for database with id {}", username, databaseId); - doThrow(AccessDeniedException.class) + doThrow(NotAllowedException.class) .when(accessService) .find(databaseId, username); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java index 53e31637b638cf0111e598a699032e52bbe88416..c44719e16cf7374e07b0b7db2796b0e15f0c99a3 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java @@ -1,7 +1,9 @@ package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.IdentifierIdxRepository; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -21,11 +23,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest +@MockAmqp +@MockOpensearch public class ActuatorComponentTest extends BaseUnitTest { - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private MockMvc mockMvc; @@ -36,13 +37,6 @@ public class ActuatorComponentTest extends BaseUnitTest { .andExpect(status().isOk()); } - @Test - public void actuatorStatus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - @Test public void actuatorLiveness_succeeds() throws Exception { this.mockMvc.perform(get("/actuator/health/liveness")) diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java similarity index 98% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java index 6fd4b87bd1af7a38294b9b3d66a9bb5d86101fa0..e83440a2403afd8863df87cf009eebdcdfbea397 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java @@ -1,10 +1,11 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.container.ContainerBriefDto; import at.tuwien.api.container.ContainerCreateRequestDto; import at.tuwien.api.container.ContainerDto; -import at.tuwien.endpoints.ContainerEndpoint; import at.tuwien.entities.container.Container; import at.tuwien.exception.*; import at.tuwien.repository.mdb.ImageRepository; @@ -35,11 +36,10 @@ import static org.mockito.Mockito.when; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class ContainerEndpointUnitTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private ContainerServiceImpl containerService; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java similarity index 97% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java index 47a91ec31ce3ef63c059ffc363f84903b34f9c98..9f7a0ba1334f172e105c0a065bc41cfeef2c8cd0 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java @@ -1,8 +1,9 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.*; -import at.tuwien.endpoints.DatabaseEndpoint; import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; @@ -17,7 +18,6 @@ import at.tuwien.service.ContainerService; import at.tuwien.service.MessageQueueService; import at.tuwien.service.QueryStoreService; import at.tuwien.service.impl.MariaDbServiceImpl; -import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -42,11 +42,10 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class DatabaseEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - @MockBean private UserRepository userRepository; @@ -329,7 +328,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser - public void findById_anonymous_succeeds() throws AccessDeniedException, DatabaseNotFoundException { + public void findById_anonymous_succeeds() throws NotAllowedException, DatabaseNotFoundException { /* test */ findById_generic(DATABASE_1_ID, DATABASE_1, null); @@ -347,7 +346,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"find-database"}) - public void findById_hasRole_succeeds() throws AccessDeniedException, DatabaseNotFoundException { + public void findById_hasRole_succeeds() throws NotAllowedException, DatabaseNotFoundException { /* pre-condition */ assertTrue(DATABASE_3_PUBLIC); @@ -358,7 +357,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"find-database"}) - public void findById_hasRoleForeign_succeeds() throws AccessDeniedException, DatabaseNotFoundException { + public void findById_hasRoleForeign_succeeds() throws NotAllowedException, DatabaseNotFoundException { /* pre-condition */ assertTrue(DATABASE_3_PUBLIC); @@ -369,7 +368,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"find-database"}) - public void findById_ownerSeesAccessRights_succeeds() throws AccessDeniedException, DatabaseNotFoundException { + public void findById_ownerSeesAccessRights_succeeds() throws NotAllowedException, DatabaseNotFoundException { /* mock */ when(accessService.list(DATABASE_1_ID)) @@ -484,7 +483,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { } public DatabaseDto findById_generic(Long databaseId, Database database, Principal principal) - throws DatabaseNotFoundException, AccessDeniedException { + throws DatabaseNotFoundException, NotAllowedException { /* mock */ if (database != null) { diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java similarity index 97% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java index a14de0594b6e4fc94c5f8cda1b831b797c4ff61e..c3a2c82c8605a5bae9d6f46053a88c804a53d081 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ExportEndpointUnitTest.java @@ -1,7 +1,9 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; import at.tuwien.ExportResource; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; @@ -40,20 +42,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class ExportEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @MockBean private QueryService queryService; diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java similarity index 94% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java index c7d774799dc6c3fc09de344b2a833581f33c3b4e..fd9bcda5ae340183d125719d9146e47a8c9389b2 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java @@ -1,11 +1,12 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.identifier.IdentifierDescriptionDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierTitleDto; import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.endpoints.IdentifierEndpoint; import at.tuwien.exception.NotAllowedException; import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.IdentifierIdxRepository; @@ -33,10 +34,13 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class IdentifierEndpointIntegrationTest extends BaseUnitTest { - - @MockBean - private IdentifierIdxRepository identifierIdxRepository; + @Autowired + private ViewRepository viewRepository; + @Autowired + private TableRepository tableRepository; @Autowired private IdentifierRepository identifierRepository; @@ -79,6 +83,8 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { databaseRepository.save(DATABASE_2_SIMPLE); databaseRepository.save(DATABASE_3_SIMPLE); databaseRepository.save(DATABASE_4_SIMPLE); + TABLE_2.setColumns(TABLE_2_COLUMNS); + tableRepository.save(TABLE_2); } @Test @@ -204,7 +210,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { public void list_viewId_succeeds() { /* mock */ - identifierRepository.saveAll(List.of(IDENTIFIER_1, IDENTIFIER_2, IDENTIFIER_3, IDENTIFIER_4, IDENTIFIER_5, IDENTIFIER_6)); + identifierRepository.saveAll(List.of(IDENTIFIER_1_SIMPLE, IDENTIFIER_2_SIMPLE, IDENTIFIER_3_SIMPLE, IDENTIFIER_4_SIMPLE, IDENTIFIER_5_SIMPLE, IDENTIFIER_6_SIMPLE)); /* test */ final List<IdentifierDto> reponse = generic_list(null, null, VIEW_1_ID, null); @@ -216,7 +222,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { public void list_viewType_succeeds() { /* mock */ - identifierRepository.saveAll(List.of(IDENTIFIER_1, IDENTIFIER_2, IDENTIFIER_3, IDENTIFIER_4, IDENTIFIER_5, IDENTIFIER_6)); + identifierRepository.saveAll(List.of(IDENTIFIER_1_SIMPLE, IDENTIFIER_2_SIMPLE, IDENTIFIER_3_SIMPLE, IDENTIFIER_4_SIMPLE, IDENTIFIER_5_SIMPLE, IDENTIFIER_6_SIMPLE)); /* test */ final List<IdentifierDto> reponse = generic_list(null, null, null, IdentifierTypeDto.VIEW); @@ -274,7 +280,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { /* test */ assertThrows(AccessDeniedException.class, () -> { - identifierEndpoint.create(IDENTIFIER_2_DTO_REQUEST, "ABC", USER_4_PRINCIPAL); + identifierEndpoint.create(IDENTIFIER_2_DTO_REQUEST, USER_4_PRINCIPAL); }); } @@ -289,7 +295,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { /* test */ assertThrows(NotAllowedException.class, () -> { - identifierEndpoint.create(IDENTIFIER_3_DTO_REQUEST, "ABC", USER_1_PRINCIPAL); + identifierEndpoint.create(IDENTIFIER_3_DTO_REQUEST, USER_1_PRINCIPAL); }); } diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java similarity index 84% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java index 0b5e179679530ab6fc3c35efea312fada717774b..58c044ee41b8dd1616a8da0d546f0a797c5b5d72 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java @@ -1,20 +1,24 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.identifier.*; import at.tuwien.config.EndpointConfig; -import at.tuwien.endpoints.IdentifierEndpoint; -import at.tuwien.endpoints.PersistenceEndpoint; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.user.User; import at.tuwien.exception.*; -import at.tuwien.gateway.QueryServiceGateway; -import at.tuwien.repository.mdb.*; +import at.tuwien.repository.mdb.DatabaseAccessRepository; +import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.mdb.IdentifierRepository; +import at.tuwien.repository.mdb.UserRepository; import at.tuwien.repository.sdb.IdentifierIdxRepository; import at.tuwien.service.AccessService; import at.tuwien.service.IdentifierService; +import at.tuwien.service.QueryService; +import at.tuwien.service.StoreService; import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -43,6 +47,8 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class IdentifierEndpointUnitTest extends BaseUnitTest { @MockBean @@ -61,10 +67,13 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { private UserRepository userRepository; @MockBean - private AccessRepository accessRepository; + private DatabaseAccessRepository accessRepository; @MockBean - private QueryServiceGateway queryServiceGateway; + private StoreService storeService; + + @MockBean + private QueryService queryService; @MockBean private IdentifierIdxRepository identifierIdxRepository; @@ -81,7 +90,9 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_json_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException { + RemoteUnavailableException, IdentifierRequestException, UserNotFoundException, QueryStoreException, + TableMalformedException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, FileStorageException { final String accept = "application/json"; /* mock */ @@ -89,7 +100,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, null); assertEquals(HttpStatus.OK, response.getStatusCode()); final IdentifierDto body = (IdentifierDto) response.getBody(); assertNotNull(body); @@ -108,12 +119,14 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_xml_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final InputStreamResource resource = new InputStreamResource(FileUtils.openInputStream( new File("src/test/resources/xml/datacite-example-dataset-v4.xml"))); /* test */ - final ResponseEntity<?> response = generic_find("text/xml", resource); + final ResponseEntity<?> response = generic_find("text/xml", resource, null); assertEquals(HttpStatus.OK, response.getStatusCode()); final InputStreamResource body = (InputStreamResource) response.getBody(); assertNotNull(body); @@ -124,12 +137,14 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_csv_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IOException, IdentifierRequestException { + RemoteUnavailableException, IOException, IdentifierRequestException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final InputStreamResource resource = new InputStreamResource(FileUtils.openInputStream( new File("src/test/resources/csv/testdata.csv"))); /* test */ - final ResponseEntity<?> response = generic_find("text/csv", resource); + final ResponseEntity<?> response = generic_find("text/csv", resource, null); assertEquals(HttpStatus.OK, response.getStatusCode()); final InputStreamResource body = (InputStreamResource) response.getBody(); assertNotNull(body); @@ -140,10 +155,12 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_httpRedirect_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException { + RemoteUnavailableException, IdentifierRequestException, UserNotFoundException, QueryStoreException, + TableMalformedException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, FileStorageException { /* test */ - final ResponseEntity<?> response = generic_find(null, null); + final ResponseEntity<?> response = generic_find(null, null, null); assertEquals(HttpStatus.MOVED_PERMANENTLY, response.getStatusCode()); assertNotNull(response.getHeaders().get("Location")); assertEquals(endpointConfig.getWebsiteUrl() + "/database/" @@ -165,7 +182,8 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { public void create_hasRoleDatabase_succeeds() throws IdentifierAlreadyExistsException, UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, IdentifierRequestException, NotAllowedException, - ViewNotFoundException, at.tuwien.exception.AccessDeniedException { + ViewNotFoundException, at.tuwien.exception.AccessDeniedException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { /* mock */ when(accessRepository.findByHdbidAndHuserid(DATABASE_1_ID, USER_1_ID)) @@ -200,7 +218,8 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { public void create_hasRoleReadAccessQuery_succeeds() throws IdentifierAlreadyExistsException, UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, IdentifierRequestException, NotAllowedException, - at.tuwien.exception.AccessDeniedException, ViewNotFoundException { + at.tuwien.exception.AccessDeniedException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { /* test */ generic_create(DATABASE_2_ID, DATABASE_2, DATABASE_2_USER_1_READ_ACCESS, IDENTIFIER_2_DTO_REQUEST, IDENTIFIER_2, USER_2_PRINCIPAL, USER_2_ID, USER_2_USERNAME, USER_2); @@ -270,7 +289,8 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { String username, User user) throws QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, DatabaseNotFoundException, IdentifierPublishingNotAllowedException, IdentifierRequestException, NotAllowedException, - at.tuwien.exception.AccessDeniedException, ViewNotFoundException { + at.tuwien.exception.AccessDeniedException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { /* mock */ when(databaseRepository.findById(databaseId)) @@ -290,16 +310,16 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { .when(accessService) .find(databaseId, userId); } - when(queryServiceGateway.find(databaseId, data, "ABC")) - .thenReturn(QUERY_1_DTO); - when(identifierService.create(data, principal, "ABC")) + when(storeService.findOne(databaseId, data.getQueryId(), principal)) + .thenReturn(QUERY_1); + when(identifierService.create(data, principal)) .thenReturn(identifier); when(identifierRepository.save(any(Identifier.class))) .thenReturn(identifier) .thenReturn(identifier); /* test */ - final ResponseEntity<IdentifierDto> response = identifierEndpoint.create(data, "ABC", principal); + final ResponseEntity<IdentifierDto> response = identifierEndpoint.create(data, principal); assertEquals(HttpStatus.CREATED, response.getStatusCode()); final IdentifierDto body = response.getBody(); assertNotNull(body); @@ -310,22 +330,24 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { assertEquals(identifier.getResultNumber(), body.getResultNumber()); } - protected ResponseEntity<?> generic_find(String accept, InputStreamResource resource) + protected ResponseEntity<?> generic_find(String accept, InputStreamResource resource, Principal principal) throws IdentifierNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierRequestException { + IdentifierRequestException, UserNotFoundException, QueryStoreException, TableMalformedException, + DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException, + FileStorageException { /* mock */ when(identifierService.find(IDENTIFIER_1_ID)) .thenReturn(IDENTIFIER_1); if (resource != null) { - when(identifierService.exportResource(IDENTIFIER_1_ID)) + when(identifierService.exportResource(IDENTIFIER_1_ID, principal)) .thenReturn(resource); when(identifierService.exportMetadata(IDENTIFIER_1_ID)) .thenReturn(resource); } /* test */ - return persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + return persistenceEndpoint.find(IDENTIFIER_1_ID, accept, principal); } } diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointIntegrationTest.java similarity index 92% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointIntegrationTest.java index a2ab7d85a36a93483a5b17a9a56e82cf360c4ba9..863cc9ae22b61fb1ef39bab5b6f0c5091aedb597 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointIntegrationTest.java @@ -1,7 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; -import at.tuwien.endpoints.ImageEndpoint; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.exception.ImageAlreadyExistsException; import at.tuwien.exception.ImageInvalidException; import at.tuwien.exception.ImageNotFoundException; @@ -22,11 +23,10 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class ImageEndpointIntegrationTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private RealmRepository realmRepository; diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java similarity index 98% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java index 93172e3bf7a08eeb96cf7ea5db16759e1e800e96..2a9d7df55d2b4486456940333c148c7532ed96de 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java @@ -1,11 +1,12 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.container.image.ImageBriefDto; import at.tuwien.api.container.image.ImageChangeDto; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.api.container.image.ImageDto; -import at.tuwien.endpoints.ImageEndpoint; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.exception.*; import at.tuwien.repository.mdb.UserRepository; @@ -34,11 +35,10 @@ import static org.mockito.Mockito.*; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class ImageEndpointUnitTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private ImageServiceImpl imageService; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java similarity index 92% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java index bcc2fafc1eb1146f377eaf2c2973e860f2ec4598..ca411ddd75bc10828b0de3843110a4399f272801 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java @@ -1,8 +1,9 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.LicenseDto; -import at.tuwien.endpoints.LicenseEndpoint; import at.tuwien.repository.mdb.LicenseRepository; import at.tuwien.repository.sdb.DatabaseIdxRepository; import com.rabbitmq.client.Channel; @@ -25,14 +26,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class LicenseEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private LicenseRepository licenseRepository; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java similarity index 98% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java index 2270b2e7aada6f3908b481ca674b25fb54a94bc6..6c4ee9444df60d4472a2b744ba283e2f83ee27b6 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java @@ -1,6 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.maintenance.BannerMessageBriefDto; import at.tuwien.api.maintenance.BannerMessageCreateDto; import at.tuwien.api.maintenance.BannerMessageDto; @@ -33,11 +35,10 @@ import static org.mockito.Mockito.*; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class MaintenanceEndpointUnitTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @MockBean private BannerMessageService bannerMessageService; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java index e79afb7c690ed72a104ad90d9909ce1a6e23a403..56ea331b0cc438cd651e0f54ab666b113a7c9531 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java @@ -1,6 +1,8 @@ package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.config.MetadataConfig; import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.IdentifierIdxRepository; @@ -25,11 +27,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest +@MockAmqp +@MockOpensearch public class MetadataEndpointComponentTest extends BaseUnitTest { - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private MetadataConfig metadataConfig; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java index 38af9a9b66fca48c2092d7215e675d2c21d90f14..a0b7121aa146f10419eccfd73c1deb7280bbb204 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.oaipmh.OaiListIdentifiersParameters; import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.repository.mdb.*; @@ -25,14 +27,13 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class MetadataEndpointUnitTest extends BaseUnitTest { @MockBean private IdentifierRepository identifierRepository; - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private MetadataEndpoint metadataEndpoint; diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java similarity index 67% rename from dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java index ba2485698e17258ae3ff6e0c3102397fd0e070ac..bce4cf5d178361ff6b6ea3a4537f1ee894c2dae8 100644 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java @@ -1,17 +1,16 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; -import at.tuwien.api.semantics.OntologyBriefDto; -import at.tuwien.api.semantics.OntologyCreateDto; -import at.tuwien.api.semantics.OntologyDto; -import at.tuwien.api.semantics.OntologyModifyDto; -import at.tuwien.endpoints.OntologyEndpoint; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; +import at.tuwien.api.semantics.*; import at.tuwien.entities.semantics.Ontology; import at.tuwien.entities.user.User; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.sdb.*; +import at.tuwien.exception.*; +import at.tuwien.repository.sdb.ConceptIdxRepository; +import at.tuwien.repository.sdb.UnitIdxRepository; +import at.tuwien.service.EntityService; import at.tuwien.service.OntologyService; import at.tuwien.service.UserService; import lombok.extern.log4j.Log4j2; @@ -39,19 +38,18 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class OntologyEndpointUnitTest extends BaseUnitTest { @MockBean private OntologyService ontologyService; @MockBean - private UserService userService; - - @MockBean - private UnitIdxRepository unitIdxRepository; + private EntityService entityService; @MockBean - private ConceptIdxRepository conceptIdxRepository; + private UserService userService; @Autowired private OntologyEndpoint ontologyEndpoint; @@ -207,6 +205,78 @@ public class OntologyEndpointUnitTest extends BaseUnitTest { delete_generic(ONTOLOGY_1_ID, ONTOLOGY_1); } + @Test + @WithAnonymousUser + public void find_anonymous_fails() { + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, null); + }); + } + + @Test + @WithMockUser(username = USER_4_USERNAME, authorities = {}) + public void find_noRole_fails() { + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, null); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) + public void find_hasRoleInvalidParams_succeeds() { + + /* test */ + assertThrows(FilterBadRequestException.class, () -> { + find_generic(ONTOLOGY_2_ID, "Apache Jena", "http://www.wikidata.org/entity/Q1686799", ONTOLOGY_2, null); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) + public void find_hasRoleNotOntologyUri_succeeds() { + + /* test */ + assertThrows(UriMalformedException.class, () -> { + find_generic(ONTOLOGY_2_ID, null, "https://wikidata.org/entity/Q1686799", ONTOLOGY_2, null); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) + public void find_hasRoleLabel_succeeds() throws UriMalformedException, QueryMalformedException, + OntologyNotFoundException, FilterBadRequestException { + final EntityDto entityDto = EntityDto.builder() + .label("Apache Jena") + .uri("http://www.wikidata.org/entity/Q1686799") + .build(); + + /* test */ + final List<EntityDto> response = find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, entityDto); + final EntityDto entity0 = response.get(0); + assertEquals("Apache Jena", entity0.getLabel()); + assertEquals("http://www.wikidata.org/entity/Q1686799", entity0.getUri()); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) + public void find_hasRoleUri_succeeds() throws UriMalformedException, QueryMalformedException, + OntologyNotFoundException, FilterBadRequestException { + final EntityDto entityDto = EntityDto.builder() + .label("Apache Jena") + .uri("http://www.wikidata.org/entity/Q1686799") + .build(); + + /* test */ + final List<EntityDto> response = find_generic(ONTOLOGY_2_ID, null, "http://www.wikidata.org/entity/Q1686799", ONTOLOGY_2, entityDto); + final EntityDto entity0 = response.get(0); + assertEquals("Apache Jena", entity0.getLabel()); + assertEquals("http://www.wikidata.org/entity/Q1686799", entity0.getUri()); + } + /* ################################################################################################### */ /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ @@ -309,4 +379,36 @@ public class OntologyEndpointUnitTest extends BaseUnitTest { final ResponseEntity<?> response = ontologyEndpoint.delete(ontologyId); assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); } + + public List<EntityDto> find_generic(Long ontologyId, String label, String uri, Ontology ontology, EntityDto entityDto) + throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, FilterBadRequestException { + + /* mock */ + if (ontology != null) { + when(ontologyService.find(ontologyId)) + .thenReturn(ontology); + } else { + doThrow(OntologyNotFoundException.class) + .when(ontologyService) + .find(ontologyId); + } + if (entityDto != null) { + when(entityService.findByLabel(ontology, label)) + .thenReturn(List.of(entityDto)); + when(entityService.findByUri(ontology, uri)) + .thenReturn(List.of(entityDto)); + } else { + when(entityService.findByLabel(ontology, label)) + .thenReturn(List.of()); + when(entityService.findByUri(ontology, uri)) + .thenReturn(List.of()); + } + + /* test */ + final ResponseEntity<List<EntityDto>> response = ontologyEndpoint.find(ontologyId, label, uri); + assertEquals(HttpStatus.OK, response.getStatusCode()); + final List<EntityDto> body = response.getBody(); + assertNotNull(body); + return body; + } } diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java similarity index 82% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java index e89cda19dc4dc5525974c37b45808fe44d33459f..c392b61f64864822630f60c22254dd3ed22e0868 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/PersistenceEndpointUnitTest.java @@ -1,11 +1,12 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.identifier.BibliographyTypeDto; import at.tuwien.api.identifier.CreatorDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.endpoints.PersistenceEndpoint; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.user.User; import at.tuwien.exception.*; @@ -47,11 +48,10 @@ import static org.mockito.Mockito.*; @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class PersistenceEndpointUnitTest extends BaseUnitTest { - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @MockBean private AccessService accessService; @@ -67,21 +67,12 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Autowired private PersistenceEndpoint persistenceEndpoint; - @Bean - @Primary - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - return objectMapper; - } - @Test @WithAnonymousUser public void find_json0_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "application/json"; final IdentifierDto compare = objectMapper.readValue(FileUtils.readFileToString(new File("src/test/resources/json/metadata0.json"), StandardCharsets.UTF_8), IdentifierDto.class); @@ -90,7 +81,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_4); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final IdentifierDto body = (IdentifierDto) response.getBody(); assertNotNull(body); @@ -113,7 +104,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_json1_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "application/json"; final IdentifierDto compare = objectMapper.readValue(FileUtils.readFileToString(new File("src/test/resources/json/metadata1.json"), StandardCharsets.UTF_8), IdentifierDto.class); @@ -122,7 +115,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final IdentifierDto body = (IdentifierDto) response.getBody(); assertNotNull(body); @@ -165,7 +158,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_csv_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/csv"; final InputStreamResource compare = new InputStreamResource(FileUtils.openInputStream(new File("src/test/resources/csv/keyboard.csv"))); final InputStreamResource mock = new InputStreamResource(FileUtils.openInputStream(new File("src/test/resources/csv/keyboard.csv"))); @@ -173,11 +168,11 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { /* mock */ when(identifierService.find(IDENTIFIER_1_ID)) .thenReturn(IDENTIFIER_1); - when(identifierService.exportResource(IDENTIFIER_1_ID)) + when(identifierService.exportResource(IDENTIFIER_1_ID, USER_1_PRINCIPAL)) .thenReturn(mock); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final InputStreamResource body = (InputStreamResource) response.getBody(); assertNotNull(body); @@ -187,7 +182,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @Disabled("not testable with xml") public void find_xml0_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/xml"; final InputStreamResource compare = new InputStreamResource(FileUtils.openInputStream(new File("src/test/resources/xml/metadata0.xml"))); @@ -196,7 +193,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final InputStreamResource body = (InputStreamResource) response.getBody(); assertNotNull(body); @@ -206,7 +203,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @Disabled("not testable with xml") public void find_xml1_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/xml"; final InputStreamResource compare = new InputStreamResource(FileUtils.openInputStream(new File("src/test/resources/xml/metadata1.xml"))); @@ -215,7 +214,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final InputStreamResource body = (InputStreamResource) response.getBody(); assertNotNull(body); @@ -226,7 +225,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliography_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_apa1.txt"), StandardCharsets.UTF_8); @@ -238,7 +239,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -248,7 +249,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyApa0_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=apa"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_apa0.txt"), StandardCharsets.UTF_8); @@ -260,7 +263,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_4); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -270,7 +273,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyApa1_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=apa"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_apa1.txt"), StandardCharsets.UTF_8); @@ -282,7 +287,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -292,7 +297,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyApa2_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=apa"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_apa2.txt"), StandardCharsets.UTF_8); @@ -304,7 +311,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_2); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -314,7 +321,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyApa3_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=apa"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_apa3.txt"), StandardCharsets.UTF_8); @@ -326,7 +335,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_3); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_3_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_3_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -336,7 +345,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyApa4_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=apa"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_apa4.txt"), StandardCharsets.UTF_8); @@ -348,7 +359,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1_WITH_DOI); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -358,7 +369,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyIeee0_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=ieee"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_ieee0.txt"), StandardCharsets.UTF_8); @@ -370,7 +383,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_4); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -380,7 +393,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyIeee1_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=ieee"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_ieee1.txt"), StandardCharsets.UTF_8); @@ -392,7 +407,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -402,7 +417,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyIeee2_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=ieee"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_ieee2.txt"), StandardCharsets.UTF_8); @@ -414,7 +431,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_2); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -424,7 +441,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyIeee3_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=ieee"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_ieee3.txt"), StandardCharsets.UTF_8); @@ -436,7 +455,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1_WITH_DOI); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -446,7 +465,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyBibtex0_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=bibtex"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_bibtex0.txt"), StandardCharsets.UTF_8); @@ -458,7 +479,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_4); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_4_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -468,7 +489,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyBibtex1_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=bibtex"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_bibtex1.txt"), StandardCharsets.UTF_8); @@ -480,7 +503,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -490,7 +513,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyBibtex2_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=bibtex"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_bibtex2.txt"), StandardCharsets.UTF_8); @@ -502,7 +527,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_2); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_2_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -512,7 +537,9 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser public void find_bibliographyBibtex3_succeeds() throws IdentifierNotFoundException, QueryNotFoundException, - RemoteUnavailableException, IdentifierRequestException, IOException { + RemoteUnavailableException, IdentifierRequestException, IOException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { final String accept = "text/bibliography; style=bibtex"; final String compare = FileUtils.readFileToString(new File("src/test/resources/bibliography/style_bibtex3.txt"), StandardCharsets.UTF_8); @@ -524,7 +551,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { .thenReturn(IDENTIFIER_1_WITH_DOI); /* test */ - final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept); + final ResponseEntity<?> response = persistenceEndpoint.find(IDENTIFIER_1_ID, accept, USER_1_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -546,7 +573,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { public void update_noRole_fails() { /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + assertThrows(AccessDeniedException.class, () -> { generic_update(IDENTIFIER_3_ID, IDENTIFIER_3, IDENTIFIER_3_DTO_UPDATE_REQUEST, USER_4_USERNAME, USER_4, USER_4_PRINCIPAL); }); } @@ -555,7 +582,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_3_USERNAME, authorities = {"modify-identifier-metadata"}) public void update_hasRoleNoAccess_succeeds() throws UserNotFoundException, NotAllowedException, IdentifierNotFoundException, IdentifierRequestException, QueryNotFoundException, DatabaseNotFoundException, - RemoteUnavailableException { + RemoteUnavailableException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { /* test */ generic_update(IDENTIFIER_3_ID, IDENTIFIER_3, IDENTIFIER_3_DTO_UPDATE_REQUEST, USER_3_USERNAME, USER_3, USER_3_PRINCIPAL); @@ -565,7 +592,8 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_3_USERNAME, authorities = {"modify-identifier-metadata"}) public void update_hasRoleHasAccess_succeeds() throws IdentifierNotFoundException, IdentifierRequestException, UserNotFoundException, at.tuwien.exception.AccessDeniedException, NotAllowedException, - QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException { + QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { /* mock */ when(accessService.find(IDENTIFIER_3_DATABASE_ID, USER_3_ID)) @@ -580,7 +608,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { public void delete_anonymous_fails() { /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + assertThrows(AccessDeniedException.class, () -> { this.generic_delete(IDENTIFIER_1_ID, IDENTIFIER_1); }); } @@ -614,11 +642,11 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { protected void generic_update(Long id, Identifier identifier, IdentifierSaveDto data, String username, User user, Principal principal) throws IdentifierNotFoundException, IdentifierRequestException, UserNotFoundException, NotAllowedException, QueryNotFoundException, DatabaseNotFoundException, - RemoteUnavailableException { + RemoteUnavailableException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { /* mock */ if (identifier != null) { - when(identifierService.update(id, data, principal, "Bearer abc")) + when(identifierService.update(id, data, principal)) .thenReturn(identifier); when(identifierService.find(id)) .thenReturn(identifier); @@ -637,7 +665,7 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { } /* test */ - final ResponseEntity<IdentifierDto> response = persistenceEndpoint.update(id, data, "Bearer abc", principal); + final ResponseEntity<IdentifierDto> response = persistenceEndpoint.update(id, data, principal); assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); final IdentifierDto body = response.getBody(); assertNotNull(body); diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java similarity index 99% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java index 7abfb0d1d58150dfe95c5137942f2bbb9ce1bd48..c01e3dbf4f7b7f7c3459e2edda6aefcbec4ee586 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java @@ -1,8 +1,10 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; import at.tuwien.ExportResource; import at.tuwien.SortType; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.ExecuteStatementDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.entities.database.Database; @@ -45,20 +47,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class QueryEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @MockBean private DatabaseAccessRepository databaseAccessRepository; diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java similarity index 65% rename from dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java index d98245334f2e107d97303cb38a6098b1b1413cb7..bc2e87c693c854f6597d97a81fb43fb10dfa4d51 100644 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java @@ -1,15 +1,24 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.columns.concepts.ConceptDto; import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; import at.tuwien.api.database.table.columns.concepts.UnitDto; import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; -import at.tuwien.endpoints.SemanticsEndpoint; +import at.tuwien.api.semantics.EntityDto; +import at.tuwien.api.semantics.TableColumnEntityDto; import at.tuwien.entities.database.table.columns.TableColumnConcept; import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.repository.sdb.*; +import at.tuwien.exception.DatabaseNotFoundException; +import at.tuwien.exception.QueryMalformedException; +import at.tuwien.exception.TableColumnNotFoundException; +import at.tuwien.exception.TableNotFoundException; +import at.tuwien.repository.sdb.ConceptIdxRepository; +import at.tuwien.repository.sdb.UnitIdxRepository; +import at.tuwien.service.EntityService; import at.tuwien.service.SemanticService; import lombok.extern.log4j.Log4j2; import org.apache.jena.sys.JenaSystem; @@ -36,16 +45,15 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class SemanticsEndpointUnitTest extends BaseUnitTest { @MockBean private SemanticService semanticService; @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; + private EntityService entityService; @Autowired private SemanticsEndpoint semanticsEndpoint; @@ -143,6 +151,62 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { saveUnit_generic(UNIT_1_SAVE_DTO, UNIT_1); } + @Test + @WithAnonymousUser + public void analyseTable_anonymous_fails() { + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); + }); + } + + @Test + @WithMockUser(username = USER_4_USERNAME) + public void findAll_noRole_fails() { + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"table-semantic-analyse"}) + public void findAll_hasRole_succeeds() throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException { + + /* test */ + analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); + } + + @Test + @WithAnonymousUser + public void analyseTableColumn_anonymous_fails() { + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + }); + } + + @Test + @WithMockUser(username = USER_4_USERNAME) + public void analyseTableColumn_noRole_fails() { + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"table-semantic-analyse"}) + public void analyseTableColumn_hasRole_succeeds() throws QueryMalformedException, TableColumnNotFoundException { + + /* test */ + analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); + } + /* ################################################################################################### */ /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ @@ -212,4 +276,31 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest { final UnitDto body = response.getBody(); assertNotNull(body); } + + public void analyseTable_generic(Long databaseId, Long tableId) throws TableNotFoundException, QueryMalformedException, DatabaseNotFoundException { + + /* mock */ + when(entityService.suggestTableSemantics(databaseId, tableId)) + .thenReturn(List.of()); + + /* test */ + final ResponseEntity<List<EntityDto>> response = semanticsEndpoint.analyseTable(databaseId, tableId); + assertEquals(HttpStatus.OK, response.getStatusCode()); + final List<EntityDto> body = response.getBody(); + assertNotNull(body); + } + + public void analyseTableColumn_generic(Long databaseId, Long tableId, Long columnId) throws QueryMalformedException, + TableColumnNotFoundException { + + /* mock */ + when(entityService.suggestTableColumnSemantics(databaseId, tableId, columnId)) + .thenReturn(List.of()); + + /* test */ + final ResponseEntity<List<TableColumnEntityDto>> response = semanticsEndpoint.analyseTableColumn(databaseId, tableId, columnId); + assertEquals(HttpStatus.OK, response.getStatusCode()); + final List<TableColumnEntityDto> body = response.getBody(); + assertNotNull(body); + } } diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java index 3239e19c722e915367dd7c4fb08ad60bf2f87ed3..4f9fe461b0366f23cca23a13c1bfe33f23c21ba3 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/StoreEndpointUnitTest.java @@ -1,6 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.database.query.QueryPersistDto; @@ -39,20 +41,10 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class StoreEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @Autowired private StoreEndpoint storeEndpoint; diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SwaggerComponentTest.java similarity index 90% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SwaggerComponentTest.java index 4b267b356b1ec113b6ab93643b8f904d27a837d2..c19bd4bc018cb102665690188d3ab575bff44cfb 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SwaggerComponentTest.java @@ -1,6 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.repository.sdb.DatabaseIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -20,11 +22,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest +@MockAmqp +@MockOpensearch public class SwaggerComponentTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private MockMvc mockMvc; diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java similarity index 95% rename from dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java index 6789367fe4608f06a09e258df2979efdac72a1e0..d3fbf783c6ce95e64301db291478e68c83081023 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java @@ -1,9 +1,10 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.endpoints.TableColumnEndpoint; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.Table; @@ -41,23 +42,10 @@ import static org.mockito.Mockito.when; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableColumnEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - @MockBean private AccessService accessService; @@ -104,7 +92,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleHasOwnWriteAccess_succeeds() throws TableNotFoundException, NotAllowedException, TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, - SemanticEntityPersistException, SemanticEntityNotFoundException { + SemanticEntityPersistException, SemanticEntityNotFoundException, QueryMalformedException { /* test */ generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, COLUMN_8_2_WITH_SEMANTICS, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); @@ -144,7 +132,8 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleForeignHasAllWriteAccess_succeeds() throws TableNotFoundException, NotAllowedException, TableMalformedException, DatabaseNotFoundException, - ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException { + ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, + QueryMalformedException { /* test */ generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, COLUMN_8_2_WITH_SEMANTICS, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_2_USERNAME, USER_2_PRINCIPAL, DATABASE_3_USER_2_WRITE_ALL_ACCESS); @@ -188,7 +177,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleHasOwnWriteAccess_succeeds() throws TableNotFoundException, NotAllowedException, TableMalformedException, DatabaseNotFoundException, ContainerNotFoundException, - SemanticEntityPersistException, SemanticEntityNotFoundException { + SemanticEntityPersistException, SemanticEntityNotFoundException, QueryMalformedException { /* test */ generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, COLUMN_1_4_WITH_SEMANTICS, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); @@ -228,7 +217,8 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleForeignHasAllWriteAccess_succeeds() throws TableNotFoundException, NotAllowedException, TableMalformedException, DatabaseNotFoundException, - ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException { + ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, + QueryMalformedException { /* test */ generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, COLUMN_1_4_WITH_SEMANTICS, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_2_USERNAME, USER_2_PRINCIPAL, DATABASE_1_USER_2_WRITE_ALL_ACCESS); @@ -243,7 +233,8 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest { ColumnSemanticsUpdateDto data, String username, Principal principal, DatabaseAccess access) throws DatabaseNotFoundException, NotAllowedException, TableNotFoundException, TableMalformedException, - ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException { + ContainerNotFoundException, SemanticEntityPersistException, SemanticEntityNotFoundException, + QueryMalformedException { /* mock */ if (database != null) { diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java index e0fa757aebf8bb1ed4f04e9bf7cd568d61dd8668..9d559676a5acabf77e4e8875e044940c5f3beb74 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableDataEndpointUnitTest.java @@ -1,7 +1,9 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; import at.tuwien.SortType; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.ImportDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDto; @@ -43,20 +45,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableDataEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @MockBean private QueryServiceImpl queryService; diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java similarity index 88% rename from dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java index b84d7376e1f7120aaea30988d3640555243c608c..da60844123a313fb2025680da3d604a38268f896 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java @@ -1,13 +1,14 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.config.MariaDbConfig; -import at.tuwien.endpoints.TableEndpoint; import at.tuwien.exception.*; +import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.ConceptIdxRepository; import at.tuwien.repository.sdb.TableColumnIdxRepository; import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.UnitIdxRepository; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; @@ -32,23 +33,10 @@ import java.sql.SQLException; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableEndpointIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - @Autowired private ImageRepository imageRepository; diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java similarity index 96% rename from dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java index 7a92671f0b4a49f9ab4b06e070454f896797916b..f4b9eaf1293bb73c85225b4dc1d5889f3289070e 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java @@ -1,10 +1,11 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.TableDto; -import at.tuwien.endpoints.TableEndpoint; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.database.table.Table; @@ -43,23 +44,10 @@ import static org.mockito.Mockito.*; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - @MockBean private DatabaseService databaseService; @@ -121,7 +109,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { public void create_publicAnonymous_fails() { /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + assertThrows(AccessDeniedException.class, () -> { generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, null, null, null); }); } @@ -151,7 +139,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { public void create_publicNoRole_fails() { /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + assertThrows(AccessDeniedException.class, () -> { generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS); }); } @@ -313,7 +301,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { public void create_privateAnonymous_fails() { /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + assertThrows(AccessDeniedException.class, () -> { generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, null, null, null); }); } @@ -343,7 +331,7 @@ public class TableEndpointUnitTest extends BaseUnitTest { public void create_privateNoRole_fails() { /* test */ - assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + assertThrows(AccessDeniedException.class, () -> { generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS); }); } diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java similarity index 94% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java index faa550be6b5b366890c49b5e2bf318e6aa4852a5..43be785375f93122985a2a3189638cdb381cf4d6 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableHistoryEndpointUnitTest.java @@ -1,6 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; @@ -37,23 +39,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableHistoryEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - - @MockBean - private QueryService queryService; - @MockBean private DatabaseService databaseService; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java similarity index 98% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java index 572ad17769a3987ae9159ce58c0eb6e2207b6d92..267da029d8249ff159e47185b3c580f9af7872c3 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java @@ -1,6 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.*; import at.tuwien.entities.user.Realm; @@ -31,17 +33,17 @@ import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; @Log4j2 @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class UserEndpointUnitTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @MockBean private UserService userService; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointUnitTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointUnitTest.java index e8e461f4036352487b3d9938e78aca170a7e7133..45ea13be12879a040ac15731717719294bbc21d1 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointUnitTest.java @@ -1,6 +1,8 @@ -package at.tuwien.endpoint; +package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.ViewBriefDto; import at.tuwien.api.database.ViewCreateDto; import at.tuwien.api.database.ViewDto; @@ -39,20 +41,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class ViewEndpointUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @MockBean private QueryService queryService; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java similarity index 81% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java index f981dd1bfbc241ddfaf03d5271677c4fd18ae3d5..92846d8e0bb7a9a3c21c7ddcf704797f2471c396 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java @@ -1,6 +1,8 @@ package at.tuwien.gateway; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.exception.BrokerVirtualHostCreationException; import at.tuwien.exception.BrokerVirtualHostGrantException; import at.tuwien.repository.sdb.DatabaseIdxRepository; @@ -27,14 +29,10 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class BrokerServiceGatewayTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean @Qualifier("brokerRestTemplate") private RestTemplate restTemplate; @@ -48,7 +46,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.POST), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -61,7 +59,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.POST), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -76,7 +74,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -89,7 +87,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -102,7 +100,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -117,7 +115,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -130,7 +128,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -143,7 +141,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -158,7 +156,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ @@ -171,7 +169,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { .build(); /* mock */ - when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(mock); /* test */ diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java similarity index 95% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java index 04555d4d451f7e5e972da1011148c9ea09c277f5..d5f32c75142ec87c8dd2c3b73774c83655bb9dbc 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java @@ -1,6 +1,8 @@ package at.tuwien.handlers; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.repository.sdb.DatabaseIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -24,11 +26,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class ApiExceptionHandlerTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Test public void handle_succeeds() throws ClassNotFoundException { final List<Method> handlers = Arrays.asList(ApiExceptionHandler.class.getMethods()); diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java index ffc666439140fad1bb84d800783344048bf26dc5..b5e70850ca7b65ded5d5a2716f4a865ec6294711 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.listener; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.amqp.ConsumerDto; import at.tuwien.config.AmqpConfig; import at.tuwien.config.RabbitMqConfig; @@ -40,11 +42,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockOpensearch public class RabbitMqListenerIntegrationTest extends BaseUnitTest { - @MockBean - private ViewIdxRepository viewIdxRepository; - @Autowired private Channel channel; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java similarity index 93% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java index 6837591ea64b6fbfc2de4b90e1073786a34d1f21..df991d55863fdbfef622d9cc715858d2411a89ed 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java @@ -1,6 +1,8 @@ package at.tuwien.mapper; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.user.UserBriefDto; import at.tuwien.repository.sdb.DatabaseIdxRepository; @@ -18,14 +20,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class DatabaseMapperTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private DatabaseMapper databaseMapper; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java similarity index 90% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java index cfc59b037cf361484ca7dba7683bec500932cba9..f4304d570226edd34dcfcd59a7c6e4a3e217f807 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java @@ -1,6 +1,8 @@ package at.tuwien.mapper; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.database.table.columns.TableColumnType; @@ -22,17 +24,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class QueryMapperTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - @Autowired private QueryMapper queryMapper; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java similarity index 78% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java index 21b7c976499ef744ee73073b128b6c56104cc4bd..8e2533709c89caa3ff89b7f15f303bc7bea938b7 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java @@ -1,11 +1,16 @@ package at.tuwien.mapper; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.listener.impl.RabbitMqListenerImpl; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.time.Instant; import java.time.LocalDateTime; @@ -15,14 +20,10 @@ import java.time.format.DateTimeFormatter; import static org.junit.jupiter.api.Assertions.assertEquals; @Log4j2 +@MockAmqp +@MockOpensearch public class StoreMapperTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - private final DateTimeFormatter mariaDbFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.SSS]") .withZone(ZoneId.of("UTC")); diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java similarity index 83% rename from dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java index d1acac0063534365f5e3d42351e26045c6b7a485..3a736c8feac82b7e4ba0a763fa0f3a4eb240e126 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.mapper; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.repository.sdb.ConceptIdxRepository; import at.tuwien.repository.sdb.TableColumnIdxRepository; import at.tuwien.repository.sdb.TableIdxRepository; @@ -21,29 +23,15 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; @Log4j2 @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableMapperUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - @Autowired private TableMapper tableMapper; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java similarity index 89% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java index 9cabbafa84ca63422d711e6cf65d8eae7a682388..73f9a670b45a38e3c5b79d937d0e6531aaf2005f 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java @@ -1,6 +1,8 @@ package at.tuwien.mapper; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.user.User; import at.tuwien.repository.sdb.UserIdxRepository; import lombok.extern.log4j.Log4j2; @@ -13,11 +15,10 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; @Log4j2 @SpringBootTest +@MockAmqp +@MockOpensearch public class UserMapperTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @Test public void equals_fails() { diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java similarity index 93% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java index e14fb1eb42e0a898f1852cf3e4db547ea1d42d02..6143fe1974e67b9308cab97a70398a2d7f23ad79 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.repository; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.Database; import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.DatabaseIdxRepository; @@ -21,18 +23,13 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; @Log4j2 -@Testcontainers @SpringBootTest @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class DatabaseRepositoryUnitTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - @Autowired private UserRepository userRepository; @@ -58,13 +55,13 @@ public class DatabaseRepositoryUnitTest extends BaseUnitTest { return; } realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - userRepository.save(USER_2); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_1); - databaseRepository.save(DATABASE_2); + userRepository.save(USER_1_SIMPLE); + userRepository.save(USER_2_SIMPLE); + imageRepository.save(IMAGE_1_SIMPLE); + containerRepository.save(CONTAINER_1_SIMPLE); + containerRepository.save(CONTAINER_2_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + databaseRepository.save(DATABASE_2_SIMPLE); } @Test diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java similarity index 93% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java index f85db0d206a9b69b01aef2e43b7387513360837e..350c95264644710fad7bc6274b44266670e80f05 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java @@ -1,10 +1,11 @@ package at.tuwien.repository; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.ViewCreateDto; import at.tuwien.api.database.ViewDto; import at.tuwien.config.MariaDbConfig; -import at.tuwien.entities.database.Database; import at.tuwien.exception.*; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.listener.impl.RabbitMqListenerImpl; @@ -37,7 +38,6 @@ import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.when; @Log4j2 @@ -45,26 +45,15 @@ import static org.mockito.Mockito.when; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp public class ViewIdxRepositoryIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @Autowired private UserRepository userRepository; @Autowired private DatabaseRepository databaseRepository; - @Autowired - private ViewRepository viewRepository; - @Autowired private RealmRepository realmRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java similarity index 92% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java index 9c57afe31e949565c5e0d87cdf196dc1f3387b0a..2b796e0be39f373f868fc732e5834889da676fbd 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.repository; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.View; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.listener.impl.RabbitMqListenerImpl; @@ -27,20 +29,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class ViewRepositoryIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - - @MockBean - private ViewIdxRepository viewIdxRepository; - @Autowired private ImageRepository imageRepository; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java similarity index 96% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java index 30f31bb2316424c4c86c737436c4a751ad061b87..244253a8ce1bc70c7c86e20b5a610a4a725b0a86 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.database.DatabaseGiveAccessDto; import at.tuwien.api.database.DatabaseModifyAccessDto; @@ -9,8 +11,6 @@ import at.tuwien.entities.database.AccessType; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.ExtendWith; @@ -19,7 +19,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.testcontainers.containers.MariaDBContainer; @@ -39,14 +38,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class AccessServiceIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private ImageRepository imageRepository; @@ -177,7 +172,7 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { @MethodSource("update_succeeds_parameters") protected void update_succeeds(String test, Long databaseId, AccessTypeDto accessTypeDto, AccessType access, String username) throws UserNotFoundException, NotAllowedException, - QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, AccessDeniedException { + QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, NotAllowedException { final DatabaseModifyAccessDto request = DatabaseModifyAccessDto.builder() .type(accessTypeDto) .build(); diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java similarity index 86% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java index 7fdd3aa1fa90f4cee343d0e5b43d1471ac2be827..87b8d4215c6da3f223e6f2a602888c6364731372 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java @@ -1,17 +1,16 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.database.DatabaseModifyAccessDto; import at.tuwien.entities.database.AccessType; import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.AccessDeniedException; import at.tuwien.exception.NotAllowedException; import at.tuwien.repository.mdb.DatabaseAccessRepository; import at.tuwien.repository.mdb.DatabaseRepository; import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; -import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -30,14 +29,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class AccessServiceUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private DatabaseRepository databaseRepository; @@ -51,7 +46,7 @@ public class AccessServiceUnitTest extends BaseUnitTest { private AccessService accessService; @Test - public void list_succeeds() throws AccessDeniedException { + public void list_succeeds() throws NotAllowedException { /* mock */ when(databaseAccessRepository.findByHdbid(DATABASE_1_ID)) @@ -63,7 +58,7 @@ public class AccessServiceUnitTest extends BaseUnitTest { } @Test - public void list_empty_succeeds() throws AccessDeniedException { + public void list_empty_succeeds() throws NotAllowedException { /* mock */ when(databaseAccessRepository.findByHdbid(DATABASE_1_ID)) @@ -75,7 +70,7 @@ public class AccessServiceUnitTest extends BaseUnitTest { } @Test - public void find_succeeds() throws AccessDeniedException { + public void find_succeeds() throws NotAllowedException { /* mock */ when(databaseAccessRepository.findByDatabaseIdAndUsername(DATABASE_1_ID, USER_1_USERNAME)) @@ -94,7 +89,7 @@ public class AccessServiceUnitTest extends BaseUnitTest { .thenReturn(Optional.empty()); /* test */ - assertThrows(AccessDeniedException.class, () -> { + assertThrows(NotAllowedException.class, () -> { accessService.find(DATABASE_1_ID, USER_1_USERNAME); }); } diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java similarity index 95% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java index 132257159b1168cbbe96259b512b2e00c1da6569..58693643cf7532397b2c5012aabbca1451ee5e00 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.maintenance.BannerMessageCreateDto; import at.tuwien.api.maintenance.BannerMessageTypeDto; import at.tuwien.api.maintenance.BannerMessageUpdateDto; @@ -23,18 +25,18 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; @Log4j2 @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class BannerMessageServiceIntegrationTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @Autowired private BannerMessageRepository bannerMessageRepository; diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java similarity index 85% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index 4194e82731199ad2ea1a2153d8bb245874c5b374..33da5f4952a0b25f4de7a24f9a98acae0d9d397f 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.container.ContainerCreateRequestDto; import at.tuwien.entities.container.Container; import at.tuwien.exception.*; @@ -8,14 +10,12 @@ import at.tuwien.repository.mdb.ContainerRepository; import at.tuwien.repository.mdb.ImageRepository; import at.tuwien.repository.mdb.RealmRepository; import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -28,11 +28,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class ContainerServiceIntegrationTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private ContainerRepository containerRepository; @@ -57,6 +56,29 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { imageRepository.save(IMAGE_1_SIMPLE); } + @Test + public void find_succeeds() throws ContainerNotFoundException { + + containerRepository.save(CONTAINER_1); + + /* test */ + final Container response = containerService.find(CONTAINER_1_ID); + assertEquals(CONTAINER_1_ID, response.getId()); + assertEquals(CONTAINER_1_NAME, response.getName()); + assertEquals(CONTAINER_1_INTERNALNAME, response.getInternalName()); + } + + @Test + public void find_fails() { + + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + containerService.find(CONTAINER_2_ID); + }); + } + @Test public void create_succeeds() throws ImageNotFoundException, ContainerAlreadyExistsException, UserNotFoundException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java similarity index 89% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java index 60251377f0716efe89f996768ad6bf5db3cd3f59..7d16fef0f8c4940716c44d4cf1ec79124caf0046 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java @@ -1,10 +1,11 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.datacite.DataCiteBody; import at.tuwien.api.datacite.DataCiteData; import at.tuwien.api.datacite.doi.DataCiteDoi; -import at.tuwien.api.identifier.IdentifierSaveDto; import at.tuwien.config.DataCiteConfig; import at.tuwien.config.EndpointConfig; import at.tuwien.entities.identifier.Identifier; @@ -33,13 +34,16 @@ import org.springframework.web.client.RestTemplate; import java.security.Principal; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest(properties = "spring.profiles.active:local,doi") +@MockAmqp +@MockOpensearch public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest { @MockBean(answer = Answers.RETURNS_MOCKS) @@ -48,9 +52,6 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest { @MockBean(answer = Answers.RETURNS_MOCKS) private EndpointConfig endpointConfig; - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private LicenseRepository licenseRepository; @@ -92,16 +93,16 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest { userRepository.save(USER_1); imageRepository.save(IMAGE_1); containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1); + databaseRepository.save(DATABASE_1_SIMPLE); } @Test public void create_database_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, - IdentifierRequestException, ViewNotFoundException { + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - final String bearer = "Bearer abcxyz"; final DataCiteBody<DataCiteDoi> response = new DataCiteBody<>(new DataCiteData<>(null, "dois", new DataCiteDoi(IDENTIFIER_1_DOI_NOT_NULL))); @@ -112,7 +113,7 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest { when(restTemplateBuilder.build()).thenReturn(restTemplate); /* test */ - Identifier result = dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal, bearer); + Identifier result = dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal); assertTrue(identifierRepository.existsById(result.getId())); assertEquals(IDENTIFIER_1_DOI_NOT_NULL, result.getDoi()); } diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java similarity index 86% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java index bb6762027aaead138ef8fbedd9620ad768a81d9d..10e0306693a2a05638317aa5db15ec310d5214c2 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.datacite.DataCiteBody; import at.tuwien.api.datacite.DataCiteData; import at.tuwien.api.datacite.doi.DataCiteDoi; @@ -42,6 +44,8 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest(properties = "spring.profiles.active:local,doi") +@MockAmqp +@MockOpensearch public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @MockBean(answer = Answers.RETURNS_MOCKS) @@ -50,9 +54,6 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @MockBean(answer = Answers.RETURNS_MOCKS) private EndpointConfig endpointConfig; - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private LicenseRepository licenseRepository; @@ -94,21 +95,22 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { userRepository.save(USER_1); imageRepository.save(IMAGE_1); containerRepository.save(CONTAINER_1_SIMPLE); - databaseRepository.save(DATABASE_1); + databaseRepository.save(DATABASE_1_SIMPLE); } @Test public void create_database_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, - IdentifierRequestException, ViewNotFoundException { + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final String bearer = "Bearer abcxyz"; final DataCiteBody<DataCiteDoi> response = new DataCiteBody<>(new DataCiteData<>(null, "dois", new DataCiteDoi(IDENTIFIER_1_DOI_NOT_NULL))); /* mock */ - when(identifierService.create(any(IdentifierSaveDto.class), eq(principal), eq(bearer))) + when(identifierService.create(any(IdentifierSaveDto.class), eq(principal))) .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1)); when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), any(ParameterizedTypeReference.class))) @@ -116,7 +118,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { when(restTemplateBuilder.build()).thenReturn(restTemplate); /* test */ - Identifier result = dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal, bearer); + Identifier result = dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal); assertTrue(identifierRepository.existsById(result.getId())); assertEquals(IDENTIFIER_1_DOI_NOT_NULL, result.getDoi()); } @@ -125,12 +127,12 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { public void create_invalidMetadata_fails() throws IdentifierAlreadyExistsException, UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, - IdentifierRequestException, ViewNotFoundException { + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - final String bearer = "Bearer abcxyz"; /* mock */ - when(identifierService.create(any(IdentifierSaveDto.class), eq(principal), eq(bearer))) + when(identifierService.create(any(IdentifierSaveDto.class), eq(principal))) .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1)); when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), any(ParameterizedTypeReference.class))) @@ -139,7 +141,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(IdentifierRequestException.class, () -> { - dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal, bearer); + dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal); }); assertEquals(0, identifierRepository.count()); } @@ -148,12 +150,12 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { public void create_restClientException_fails() throws IdentifierAlreadyExistsException, UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierPublishingNotAllowedException, - IdentifierRequestException, ViewNotFoundException { + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - final String bearer = "Bearer abcxyz"; /* mock */ - when(identifierService.create(any(IdentifierSaveDto.class), eq(principal), eq(bearer))) + when(identifierService.create(any(IdentifierSaveDto.class), eq(principal))) .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1)); when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), any(ParameterizedTypeReference.class))) @@ -162,19 +164,20 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(InternalError.class, () -> { - dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal, bearer); + dataCiteIdentifierService.create(IDENTIFIER_1_DTO_REQUEST, principal); }); assertEquals(0, identifierRepository.count()); } @Test public void update_existing_succeeds() throws IdentifierRequestException, UserNotFoundException, - QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException { + QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException, + QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { final DataCiteBody<DataCiteDoi> response = new DataCiteBody<>(new DataCiteData<>(null, "dois", new DataCiteDoi(IDENTIFIER_1_DOI_NOT_NULL))); /* mock */ - when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class), anyString())) + when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class))) .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1_WITH_DOI)); when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), any(ParameterizedTypeReference.class), eq(IDENTIFIER_1_DOI_NOT_NULL))) @@ -182,17 +185,18 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { when(restTemplateBuilder.build()).thenReturn(restTemplate); /* test */ - Identifier result = dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL, "abc"); + Identifier result = dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); assertTrue(identifierRepository.existsById(IDENTIFIER_1_ID)); assertEquals(IDENTIFIER_1_DOI_NOT_NULL, result.getDoi()); } @Test public void update_invalidMetadata_fails() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException { + DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { /* mock */ - when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class), anyString())) + when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class))) .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1_WITH_DOI)); when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), any(ParameterizedTypeReference.class), eq(IDENTIFIER_1_DOI_NOT_NULL))) @@ -201,17 +205,18 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(IdentifierRequestException.class, () -> { - dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL, "abc"); + dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); }); assertEquals(0, identifierRepository.count()); } @Test public void update_restClientException_fails() throws UserNotFoundException, QueryNotFoundException, - DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException { + DatabaseNotFoundException, RemoteUnavailableException, IdentifierNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { /* mock */ - when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class), anyString())) + when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierSaveDto.class), any(Principal.class))) .thenAnswer((i) -> identifierRepository.save(IDENTIFIER_1_WITH_DOI)); when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), any(ParameterizedTypeReference.class), eq(IDENTIFIER_1_DOI_NOT_NULL))) @@ -220,7 +225,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(InternalError.class, () -> { - dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL, "abc"); + dataCiteIdentifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); }); assertEquals(0, identifierRepository.count()); } diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java similarity index 96% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java index 9c3fc2956e18746b0554d4730ca74f3b2c30cbfc..74a6d4e2d83d8af1928e43731038971a89157e69 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseDto; import at.tuwien.config.MariaDbConfig; @@ -35,11 +37,10 @@ import static org.mockito.Mockito.when; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class DatabaseServiceComponentTest extends BaseUnitTest { - @MockBean - private Channel channel; - @MockBean private UserRepository userRepository; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java similarity index 93% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 485e83d733bad2009b606f3acabdbb58bf362d25..9fe07441057320555f7cf4ee8b7231e10cad4a08 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.database.DatabaseModifyVisibilityDto; @@ -36,11 +38,10 @@ import static org.mockito.Mockito.when; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class DatabaseServiceIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - @MockBean private DatabaseIdxRepository databaseIdxRepository; @@ -83,6 +84,23 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_3); } + @Test + public void find_succeeds() throws DatabaseNotFoundException { + + /* test */ + final Database response = databaseService.find(DATABASE_1_ID); + assertEquals(DATABASE_1_ID, response.getId()); + } + + @Test + public void find_fails() { + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + databaseService.find(9999L); + }); + } + @Test public void create_succeeds() throws Exception { @@ -195,7 +213,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { DatabaseNotFoundException, ImageNotSupportedException, DatabaseMalformedException, SQLException { /* mock */ - databaseRepository.save(DATABASE_1); + databaseRepository.save(DATABASE_1_SIMPLE); MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); /* test */ @@ -209,7 +227,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { .build(); /* mock */ - databaseRepository.save(DATABASE_1); + databaseRepository.save(DATABASE_1_SIMPLE); /* test */ final Database response = databaseService.visibility(DATABASE_1_ID, request); @@ -224,7 +242,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* mock */ MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - databaseRepository.save(DATABASE_1); + databaseRepository.save(DATABASE_1_SIMPLE); /* test */ final Database response = databaseService.transfer(DATABASE_1_ID, request); diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java similarity index 96% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java index a9fcf4e3f41b84f5154d9c1fd3e8a440547d37cf..f9c76ae4c5cf0f20c0851236c851e9f0a542892e 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.entities.container.Container; import at.tuwien.entities.container.image.ContainerImage; @@ -34,17 +36,10 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class DatabaseServiceUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private RabbitMqServiceImpl rabbitMqService; - @Autowired private MariaDbServiceImpl databaseService; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java index 90c36b0e65eafa18e9db2c357e13f4dec30458fa..5279541a4030fdc20f294d718894b2e24706a03a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java @@ -1,75 +1,122 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.api.database.query.QueryDto; +import at.tuwien.api.identifier.IdentifierSaveDto; import at.tuwien.entities.identifier.Identifier; +import at.tuwien.entities.identifier.IdentifierDescription; import at.tuwien.entities.identifier.IdentifierTitle; -import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.entities.identifier.RelatedIdentifier; +import at.tuwien.exception.*; import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.IdentifierIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.opensearch.testcontainers.OpensearchContainer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.RestTemplate; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.when; @Log4j2 -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@Testcontainers @ExtendWith(SpringExtension.class) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@SpringBootTest +@MockAmqp public class IdentifierServiceIntegrationTest extends BaseUnitTest { @MockBean - private IdentifierIdxRepository identifierIdxRepository; + private StoreService storeService; + + @MockBean + private RestTemplate restTemplate; @Autowired - private ImageRepository imageRepository; + private LicenseRepository licenseRepository; @Autowired - private ContainerRepository containerRepository; + private IdentifierService identifierService; @Autowired - private LicenseRepository licenseRepository; + private IdentifierRepository identifierRepository; + + @Autowired + private IdentifierIdxRepository identifierIdxRepository; + + @Autowired + private ContainerRepository containerRepository; @Autowired private DatabaseRepository databaseRepository; + @Autowired + private ImageRepository imageRepository; + @Autowired private UserRepository userRepository; @Autowired - private RealmRepository realmRepository; + private ViewRepository viewRepository; @Autowired - private IdentifierRepository identifierRepository; + private TableRepository tableRepository; @Autowired - private IdentifierService identifierService; + private RealmRepository realmRepository; + + @Container + private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); + + @DynamicPropertySource + static void elasticsearchProperties(DynamicPropertyRegistry registry) { + final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); + registry.add("spring.opensearch.host", () -> "127.0.0.1"); + registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); + registry.add("spring.opensearch.username", opensearchContainer::getUsername); + registry.add("spring.opensearch.password", opensearchContainer::getPassword); + } @BeforeEach public void beforeEach() { - /* metadata database */ imageRepository.save(IMAGE_1_SIMPLE); realmRepository.save(REALM_DBREPO); licenseRepository.save(LICENSE_1); userRepository.save(USER_1_SIMPLE); + userRepository.save(USER_2_SIMPLE); + userRepository.save(USER_3_SIMPLE); + userRepository.save(USER_4_SIMPLE); containerRepository.save(CONTAINER_1_SIMPLE); databaseRepository.save(DATABASE_1_SIMPLE); - identifierRepository.save(IDENTIFIER_1); + containerRepository.save(CONTAINER_2_SIMPLE); + databaseRepository.save(DATABASE_2_SIMPLE); } @Test public void findAll_succeeds() { + identifierRepository.save(IDENTIFIER_1); + /* test */ final List<Identifier> response = identifierService.findAll(); assertEquals(1, response.size()); @@ -79,6 +126,8 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @Transactional public void find_succeeds() throws IdentifierNotFoundException { + identifierRepository.save(IDENTIFIER_1); + /* test */ final Identifier response = identifierService.find(IDENTIFIER_1_ID); assertEquals(IDENTIFIER_1_ID, response.getId()); @@ -99,7 +148,301 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { /* test */ assertThrows(IdentifierNotFoundException.class, () -> { - identifierService.find(IDENTIFIER_2_ID); + identifierService.find(IDENTIFIER_1_ID); + }); + } + + @Test + public void findAll_forDatabase_succeeds() { + + identifierRepository.save(IDENTIFIER_1); + + /* test */ + final List<Identifier> response = identifierService.findAll(DATABASE_1_ID); + assertEquals(1, response.size()); + } + + @Test + public void findAll_forDatabaseEmpty_succeeds() { + + /* test */ + final List<Identifier> response = identifierService.findAll(DATABASE_1_ID); + assertEquals(0, response.size()); + } + + @Test + public void create_subsetRelatedIdentifiers_succeeds() + throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, + QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { + final String bearer = "Bearer abcxyz"; + + /* mock */ + when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), eq(QueryDto.class))) + .thenReturn(ResponseEntity.ok(QUERY_2_DTO)); + when(storeService.findOne(DATABASE_2_ID, IDENTIFIER_2_QUERY_ID, USER_2_PRINCIPAL)) + .thenReturn(QUERY_2); + identifierRepository.save(IDENTIFIER_1_SIMPLE); + + /* test */ + final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_2_PRINCIPAL); + assertEquals(IDENTIFIER_2_ID, response.getId()); + assertNotNull(response.getTitles()); + assertEquals(1, response.getTitles().size()); + final IdentifierTitle title0 = response.getTitles().get(0); + assertEquals(IDENTIFIER_2_TITLE_1_TITLE, title0.getTitle()); + assertEquals(IDENTIFIER_2_TITLE_1_LANG, title0.getLanguage()); + assertEquals(IDENTIFIER_2_TITLE_1_TYPE, title0.getTitleType()); + assertNotNull(response.getDescriptions()); + assertEquals(1, response.getDescriptions().size()); + final IdentifierDescription description0 = response.getDescriptions().get(0); + assertEquals(IDENTIFIER_2_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); + assertEquals(IDENTIFIER_2_DESCRIPTION_1_LANG, description0.getLanguage()); + assertEquals(IDENTIFIER_2_DESCRIPTION_1_TYPE, description0.getDescriptionType()); + assertEquals(IDENTIFIER_2_DOI, response.getDoi()); + assertEquals(IDENTIFIER_2_PUBLISHER, response.getPublisher()); + assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); + assertNull(response.getLanguage()); + assertEquals(IDENTIFIER_2_PUBLICATION_YEAR, response.getPublicationYear()); + assertEquals(IDENTIFIER_2_PUBLICATION_MONTH, response.getPublicationMonth()); + assertEquals(IDENTIFIER_2_PUBLICATION_DAY, response.getPublicationDay()); + final List<RelatedIdentifier> relatedIdentifiers = response.getRelatedIdentifiers(); + assertEquals(1, relatedIdentifiers.size()); + final RelatedIdentifier relatedIdentifier1 = relatedIdentifiers.get(0); + assertEquals(RELATED_IDENTIFIER_2_ID, relatedIdentifier1.getId()); + assertEquals(RELATED_IDENTIFIER_2_TYPE, relatedIdentifier1.getType()); + assertEquals(RELATED_IDENTIFIER_2_RELATION_TYPE, relatedIdentifier1.getRelation()); + assertEquals(RELATED_IDENTIFIER_2_VALUE, relatedIdentifier1.getValue()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_2_ID)); + } + + @Test + public void create_succeeds() throws DatabaseNotFoundException, UserNotFoundException, + IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, + RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { + final String bearer = "Bearer abcxyz"; + + /* test */ + final Identifier response = identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_1_ID, response.getId()); + assertNotNull(response.getTitles()); + final List<IdentifierTitle> titles = response.getTitles(); + assertEquals(2, titles.size()); + final IdentifierTitle title0 = titles.get(0); + assertEquals(IDENTIFIER_1_TITLE_1_ID, title0.getId()); + assertEquals(IDENTIFIER_1_TITLE_1_TITLE, title0.getTitle()); + assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); + assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); + final IdentifierTitle title1 = titles.get(1); + assertEquals(IDENTIFIER_1_TITLE_2_ID, title1.getId()); + assertEquals(IDENTIFIER_1_TITLE_2_TITLE, title1.getTitle()); + assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); + assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); + assertNotNull(response.getDescriptions()); + assertEquals(1, response.getDescriptions().size()); + final List<IdentifierDescription> descriptions = response.getDescriptions(); + final IdentifierDescription description0 = descriptions.get(0); + assertEquals(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); + assertEquals(IDENTIFIER_1_DESCRIPTION_1_LANG, description0.getLanguage()); + assertEquals(IDENTIFIER_1_DESCRIPTION_1_TYPE, description0.getDescriptionType()); + assertNotNull(response.getCreators()); + assertEquals(1, response.getCreators().size()); + assertNotNull(response.getFunders()); + assertEquals(1, response.getFunders().size()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); + } + + @Test + public void create_noRelatedTitleDescription_succeeds() throws DatabaseNotFoundException, UserNotFoundException, + IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, + RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { + final String bearer = "Bearer abcxyz"; + + /* mock */ + containerRepository.save(CONTAINER_3_SIMPLE); + containerRepository.save(CONTAINER_4_SIMPLE); + databaseRepository.save(DATABASE_3_SIMPLE); + databaseRepository.save(DATABASE_4_SIMPLE); + identifierRepository.save(IDENTIFIER_1_SIMPLE); + identifierRepository.save(IDENTIFIER_2_SIMPLE); + identifierRepository.save(IDENTIFIER_3_SIMPLE); + identifierIdxRepository.save(IDENTIFIER_1_DTO); + identifierIdxRepository.save(IDENTIFIER_2_DTO); + identifierIdxRepository.save(IDENTIFIER_3_DTO); + + /* test */ + final Identifier response = identifierService.create(IDENTIFIER_4_DTO_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_4_ID, response.getId()); + assertNotNull(response.getTitles()); + assertEquals(0, response.getTitles().size()); + assertNotNull(response.getDescriptions()); + assertEquals(0, response.getDescriptions().size()); + assertNotNull(response.getCreators()); + assertEquals(1, response.getCreators().size()); + assertNotNull(response.getFunders()); + assertEquals(0, response.getFunders().size()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_4_ID)); + } + + @Test + public void create_subsetHasDatabaseIdentifier_succeeds() throws DatabaseNotFoundException, UserNotFoundException, + IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, + RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { + + /* mock */ + containerRepository.save(CONTAINER_3_SIMPLE); + containerRepository.save(CONTAINER_4_SIMPLE); + databaseRepository.save(DATABASE_3_SIMPLE); + databaseRepository.save(DATABASE_4_SIMPLE); + identifierRepository.save(IDENTIFIER_1_SIMPLE); + identifierRepository.save(IDENTIFIER_2_SIMPLE); + identifierRepository.save(IDENTIFIER_3_SIMPLE); + identifierRepository.save(IDENTIFIER_4_SIMPLE); + identifierIdxRepository.save(IDENTIFIER_1_DTO); + identifierIdxRepository.save(IDENTIFIER_2_DTO); + identifierIdxRepository.save(IDENTIFIER_3_DTO); + identifierIdxRepository.save(IDENTIFIER_4_DTO); + when(storeService.findOne(DATABASE_1_ID, QUERY_1_ID, USER_1_PRINCIPAL)) + .thenReturn(QUERY_1); + + /* test */ + final Identifier response = identifierService.create(IDENTIFIER_5_DTO_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabaseId()); + assertEquals(IDENTIFIER_5_DATABASE_ID, response.getDatabase().getId()); + assertEquals(IDENTIFIER_5_QUERY, response.getQuery()); + assertEquals(IDENTIFIER_5_QUERY_HASH, response.getQueryHash()); + assertEquals(IDENTIFIER_5_RESULT_HASH, response.getResultHash()); + assertEquals(0, response.getTitles().size()); + assertEquals(0, response.getDescriptions().size()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_5_ID)); + } + + @Test + public void create_viewIdentifier_succeeds() throws DatabaseNotFoundException, UserNotFoundException, + IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, + RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException { + final String authorization = "Bearer abcxyz"; + + /* mock */ + containerRepository.save(CONTAINER_3_SIMPLE); + containerRepository.save(CONTAINER_4_SIMPLE); + databaseRepository.save(DATABASE_3_SIMPLE); + databaseRepository.save(DATABASE_4_SIMPLE); + tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE)); + viewRepository.save(VIEW_1); + identifierRepository.save(IDENTIFIER_1_SIMPLE); + identifierRepository.save(IDENTIFIER_2_SIMPLE); + identifierRepository.save(IDENTIFIER_3_SIMPLE); + identifierRepository.save(IDENTIFIER_4_SIMPLE); + identifierRepository.save(IDENTIFIER_5_SIMPLE); + identifierIdxRepository.save(IDENTIFIER_1_DTO); + identifierIdxRepository.save(IDENTIFIER_2_DTO); + identifierIdxRepository.save(IDENTIFIER_3_DTO); + identifierIdxRepository.save(IDENTIFIER_4_DTO); + identifierIdxRepository.save(IDENTIFIER_5_DTO); + + /* test */ + final Identifier response = identifierService.create(IDENTIFIER_6_DTO_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_6_DATABASE_ID, response.getDatabaseId()); + assertEquals(IDENTIFIER_6_DATABASE_ID, response.getDatabase().getId()); + assertEquals(IDENTIFIER_6_QUERY, response.getQuery()); + assertEquals(IDENTIFIER_6_QUERY_HASH, response.getQueryHash()); + assertEquals(IDENTIFIER_6_RESULT_HASH, response.getResultHash()); + assertEquals(0, response.getTitles().size()); + assertEquals(0, response.getDescriptions().size()); + assertEquals(1, response.getLicenses().size()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_6_ID)); + } + + @Test + public void update_database_succeeds() throws UserNotFoundException, QueryNotFoundException, + DatabaseNotFoundException, RemoteUnavailableException, IdentifierRequestException, + IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { + + /* mock */ + identifierRepository.save(IDENTIFIER_1_SIMPLE); + + /* test */ + final Identifier response = identifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO_UPDATE_REQUEST, USER_1_PRINCIPAL); + assertEquals(IDENTIFIER_1_ID, response.getId()); + assertEquals(IDENTIFIER_1_DATABASE_ID, response.getDatabaseId()); + final List<IdentifierTitle> titles = response.getTitles(); + assertEquals(2, titles.size()); + final IdentifierTitle title0 = titles.get(0); + assertEquals(IDENTIFIER_1_TITLE_1_ID, title0.getId()); + assertEquals(IDENTIFIER_1_TITLE_1_TITLE_MODIFY, title0.getTitle()); // <<<<<< + assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); + assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); + final IdentifierTitle title1 = titles.get(1); + assertEquals(IDENTIFIER_1_TITLE_2_ID, title1.getId()); + assertEquals(IDENTIFIER_1_TITLE_2_TITLE_MODIFY, title1.getTitle()); + assertEquals(IDENTIFIER_1_TITLE_2_LANG, title1.getLanguage()); + assertEquals(IDENTIFIER_1_TITLE_2_TYPE, title1.getTitleType()); + assertEquals(IDENTIFIER_1_PUBLICATION_YEAR, response.getPublicationYear()); + assertEquals(IDENTIFIER_1_PUBLICATION_MONTH, response.getPublicationMonth()); + assertEquals(IDENTIFIER_1_PUBLICATION_DAY, response.getPublicationDay()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); + } + + @Test + @Transactional + public void update_subset_succeeds() throws UserNotFoundException, QueryNotFoundException, + DatabaseNotFoundException, RemoteUnavailableException, IdentifierRequestException, + IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { + + /* mock */ + identifierRepository.save(IDENTIFIER_1_SIMPLE); + identifierRepository.save(IDENTIFIER_2_SIMPLE); + when(storeService.findOne(eq(IDENTIFIER_2_DATABASE_ID), eq(IDENTIFIER_2_QUERY_ID), any())) + .thenReturn(QUERY_2); + + /* test */ + final Identifier response = identifierService.update(IDENTIFIER_2_ID, IDENTIFIER_2_DTO_UPDATE_REQUEST, USER_2_PRINCIPAL); + assertEquals(IDENTIFIER_2_ID, response.getId()); + assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabase().getId()); + assertEquals(1, response.getTitles().size()); + assertEquals(1, identifierRepository.findAll().stream().map(Identifier::getTitles).flatMap(List::stream).toList().size()); + assertEquals(IDENTIFIER_2_PUBLICATION_YEAR, response.getPublicationYear()); + assertEquals(IDENTIFIER_2_PUBLICATION_MONTH, response.getPublicationMonth()); + assertEquals(IDENTIFIER_2_PUBLICATION_DAY, response.getPublicationDay()); + /* open search database */ + assertTrue(identifierIdxRepository.existsById(IDENTIFIER_2_ID)); + } + + @Test + public void delete_succeeds() throws IdentifierNotFoundException { + + /* mock */ + identifierRepository.save(IDENTIFIER_1_SIMPLE); + identifierIdxRepository.save(IDENTIFIER_1_DTO); + + /* test */ + identifierService.delete(IDENTIFIER_1_ID); + assertTrue(userRepository.findById(IDENTIFIER_1_CREATED_BY).isPresent()) /* no cascade of delete */; + /* open search database */ + assertFalse(identifierIdxRepository.existsById(IDENTIFIER_1_ID)); + } + + @Test + public void delete_notFound_fails() { + + /* mock */ + identifierRepository.save(IDENTIFIER_1_SIMPLE); + + /* test */ + assertThrows(IdentifierNotFoundException.class, () -> { + identifierService.delete(IDENTIFIER_2_ID); }); } diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java similarity index 97% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java index b5961bdc9736aaa3d288acd7277ee358f213c9d4..3ced0a81a46e1d82d5a6424566c3e715e024bd3a 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.identifier.BibliographyTypeDto; import at.tuwien.api.identifier.IdentifierDto; @@ -9,8 +11,8 @@ import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.IdentifierType; import at.tuwien.entities.identifier.NameIdentifierSchemeType; import at.tuwien.exception.*; -import at.tuwien.repository.sdb.IdentifierIdxRepository; import at.tuwien.repository.mdb.IdentifierRepository; +import at.tuwien.repository.sdb.IdentifierIdxRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,6 +36,8 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class IdentifierServiceUnitTest extends BaseUnitTest { @MockBean @@ -175,8 +179,8 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { public void create_database_succeeds() throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException, - IdentifierRequestException, ViewNotFoundException { - final String bearer = "Bearer abcxyz"; + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { /* mock */ when(databaseService.find(DATABASE_1_ID)) @@ -192,13 +196,12 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { /* test */ - identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL, bearer); + identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); } @Test public void create_existsSubset_fails() throws DatabaseNotFoundException { - final String bearer = "Bearer abcxyz"; /* mock */ when(databaseService.find(DATABASE_2_ID)) @@ -209,13 +212,12 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(IdentifierAlreadyExistsException.class, () -> { - identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_1_PRINCIPAL, bearer); + identifierService.create(IDENTIFIER_2_DTO_REQUEST, USER_1_PRINCIPAL); }); } @Test public void create_existsDatabase_fails() throws DatabaseNotFoundException { - final String bearer = "Bearer abcxyz"; /* mock */ when(databaseService.find(DATABASE_1_ID)) @@ -226,7 +228,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(IdentifierAlreadyExistsException.class, () -> { - identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL, bearer); + identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL); }); } @@ -413,7 +415,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { /* test */ assertThrows(IdentifierRequestException.class, () -> { - identifierService.exportResource(IDENTIFIER_4_ID); + identifierService.exportResource(IDENTIFIER_4_ID, USER_1_PRINCIPAL); }); } diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java similarity index 96% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java index 6e37ca6490cb94cef8457084a6318aa72d9f2e05..cee2f67be96ed19d0dd2c8035e631acc628474d2 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.exception.ImageAlreadyExistsException; import at.tuwien.exception.ImageNotFoundException; @@ -28,11 +30,10 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class ImageServiceIntegrationTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private ImageServiceImpl imageService; diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java similarity index 98% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java index b96f3583f393fa1c4da2dcc1e4f60e579d8ce5f5..cc80c82790acfa52de2c251d3e85e0708df7bb4a 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.container.image.ImageChangeDto; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.entities.container.image.ContainerImage; @@ -27,11 +29,10 @@ import static org.mockito.Mockito.*; @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class ImageServiceUnitTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private ImageRepository imageRepository; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java similarity index 94% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java index a3fcf17cba39c87cd3771dd61360c9a8465c85ab..3d70823bf9da4ec5ea016f6fa689c70a7ff2bc0f 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.License; import at.tuwien.exception.LicenseNotFoundException; import at.tuwien.repository.mdb.LicenseRepository; @@ -27,14 +29,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @Testcontainers @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class LicenseServiceIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private LicenseRepository licenseRepository; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java similarity index 90% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java index 7c044c1023c29c75aa527e35a15c535597ddf324..f834287b8a36020dc30975d68eeb292c22164e75 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java @@ -1,13 +1,14 @@ + package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.amqp.PermissionDto; import at.tuwien.exception.AmqpException; import at.tuwien.exception.BrokerVirtualHostCreationException; import at.tuwien.exception.BrokerVirtualHostGrantException; -import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.repository.sdb.DatabaseIdxRepository; +import at.tuwien.repository.mdb.TableRepository; import at.tuwien.service.impl.RabbitMqServiceImpl; import at.tuwien.utils.AmqpUtils; import com.rabbitmq.client.Channel; @@ -26,7 +27,6 @@ import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import java.util.List; -import java.util.Set; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; @@ -36,44 +36,37 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) +@MockOpensearch public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @MockBean - private DatabaseIdxRepository databaseIdxRepository; + private TableRepository tableRepository; @MockBean private DatabaseRepository databaseRepository; - @Autowired - private BrokerServiceGateway brokerServiceGateway; - - @Autowired - private Channel channel; - @Autowired private RabbitMqServiceImpl messageQueueService; @Autowired private AmqpUtils amqpUtils; + @Autowired + private Channel channel; + @Container private static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:3-management-alpine") - .withUser("fda", "fda", Set.of("administrator")) .withVhost("dbrepo"); @DynamicPropertySource static void rabbitMQProperties(DynamicPropertyRegistry registry) { - registry.add("fda.gateway.endpoint", () -> "http://" + ipAddress() + ":15672"); + registry.add("fda.broker.endpoint", rabbitMQContainer::getHttpUrl); registry.add("spring.rabbitmq.host", rabbitMQContainer::getHost); registry.add("spring.rabbitmq.port", rabbitMQContainer::getAmqpPort); registry.add("spring.rabbitmq.username", rabbitMQContainer::getAdminUsername); registry.add("spring.rabbitmq.password", rabbitMQContainer::getAdminPassword); } - static String ipAddress() { - return rabbitMQContainer.getContainerInfo().getNetworkSettings().getNetworks().get("bridge").getIpAddress(); - } - @Test public void createExchange_succeeds() throws AmqpException { @@ -155,11 +148,14 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { /* mock */ when(databaseRepository.findAll()) .thenReturn(List.of(DATABASE_1)); + when(tableRepository.findAll()) + .thenReturn(List.of(TABLE_1, TABLE_2)); /* test */ assertFalse(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); messageQueueService.init(); assertTrue(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); + assertTrue(amqpUtils.queueExists(TABLE_1_QUEUE_NAME)); } /* ################################################################################################### */ @@ -170,7 +166,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { /* mock */ amqpUtils.createUser(USER_1_USERNAME, USER_1_RABBITMQ_CREATE_DTO); - amqpUtils.setPermissions("http://" + ipAddress() + ":15672", REALM_DBREPO_NAME, USER_1_USERNAME, USER_1_RABBITMQ_GRANT_DTO); + amqpUtils.setPermissions(REALM_DBREPO_NAME, USER_1_USERNAME, USER_1_RABBITMQ_GRANT_DTO); /* test */ messageQueueService.updatePermissions(USER_1); diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java similarity index 94% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java index 042d676eba71fc942ab6c7e7ca2dc5c677881700..abff6e0cc3b792ad3140edbda5dbadb59a77cea3 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.exception.AmqpException; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.repository.mdb.DatabaseRepository; @@ -24,11 +26,10 @@ import static org.mockito.Mockito.doThrow; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class MessageQueueServiceUnitTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @MockBean private DatabaseRepository databaseRepository; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java index d1ff50a50cfc4992df5fdca8af83927e2b2aa16c..a2781c575136933c0228e7ae2412a4bd7ef26314 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.identifier.Identifier; import at.tuwien.oaipmh.OaiErrorType; import at.tuwien.oaipmh.OaiListIdentifiersParameters; @@ -27,11 +29,10 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class MetadataServiceIntegrationTest extends BaseUnitTest { - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @Autowired private ImageRepository imageRepository; diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java similarity index 88% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java index 3dd124f81e8ce81a5f6dfe201d43f13596f6c008..7d999d17714dc597eee50b9ef84b17b9ee482211 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java @@ -1,12 +1,17 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.crossref.CrossrefDto; import at.tuwien.api.orcid.OrcidDto; import at.tuwien.api.ror.RorDto; import at.tuwien.api.user.external.ExternalMetadataDto; import at.tuwien.api.user.external.affiliation.ExternalAffiliationDto; -import at.tuwien.exception.*; +import at.tuwien.exception.DoiNotFoundException; +import at.tuwien.exception.OrcidNotFoundException; +import at.tuwien.exception.RemoteUnavailableException; +import at.tuwien.exception.RorNotFoundException; import at.tuwien.gateway.CrossrefGateway; import at.tuwien.gateway.OrcidGateway; import at.tuwien.gateway.RorGateway; @@ -25,21 +30,21 @@ import java.io.File; import java.io.IOException; import java.util.Arrays; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class MetadataServiceUnitTest extends BaseUnitTest { @MockBean private IdentifierRepository identifierRepository; - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @MockBean private OrcidGateway orcidGateway; @@ -60,7 +65,7 @@ public class MetadataServiceUnitTest extends BaseUnitTest { RorNotFoundException, IOException, DoiNotFoundException { final OrcidDto orcid = objectMapper .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .readValue(new File("src/test/resources/orcid_jdoe.json"), OrcidDto.class); + .readValue(new File("src/test/resources/json/orcid_jdoe.json"), OrcidDto.class); /* mock */ when(orcidGateway.findByUrl(USER_1_ORCID_URL)) @@ -91,7 +96,7 @@ public class MetadataServiceUnitTest extends BaseUnitTest { RorNotFoundException, IOException, DoiNotFoundException { final CrossrefDto doi = objectMapper .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .readValue(new File("src/test/resources/doi_ec.json"), CrossrefDto.class); + .readValue(new File("src/test/resources/json/doi_ec.json"), CrossrefDto.class); /* mock */ when(crossrefGateway.findById(FUNDER_1_IDENTIFIER_ID_ONLY)) @@ -124,7 +129,7 @@ public class MetadataServiceUnitTest extends BaseUnitTest { RorNotFoundException, IOException, DoiNotFoundException { final RorDto ror = objectMapper .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .readValue(new File("src/test/resources/ror_tuw.json"), RorDto.class); + .readValue(new File("src/test/resources/json/ror_tuw.json"), RorDto.class); /* mock */ when(rorGateway.findById(anyString())) diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java similarity index 93% rename from dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java index 494be608fa3a714a1ffe8f3f3b9bab4021e55793..ee290b755870979c58bac856453f5c6c5e8c8f28 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.exception.ImageNotFoundException; import at.tuwien.repository.mdb.ImageRepository; import at.tuwien.repository.mdb.UserRepository; @@ -22,11 +24,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class PersistenceIntegrationTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - @Autowired private ImageServiceImpl imageService; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java index 2ade17a98cae9f246db39112da013782c651a8db..70806bde80d0b6fc543a06abbd1085ce59beaf5b 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java @@ -2,6 +2,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.ExportResource; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.ExecuteStatementDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDto; @@ -37,7 +39,10 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoUnit; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; import static org.junit.jupiter.api.Assertions.*; @@ -48,20 +53,10 @@ import static org.junit.jupiter.api.Assertions.*; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class QueryServiceIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @Autowired private DatabaseRepository databaseRepository; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java similarity index 96% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java index 57f622eeb3540f4c77f48e700e6241ff678f7a4d..14ae56a9670e004c595e2d8bfc66f0edc3dbf9d6 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.config.MariaDbConfig; import at.tuwien.exception.*; import at.tuwien.repository.mdb.*; @@ -30,14 +32,10 @@ import java.sql.SQLException; @SpringBootTest @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class QueryStoreServiceIntegrationTest extends BaseUnitTest { - @MockBean - private DatabaseIdxRepository databaseIdxRepository; - - @MockBean - private Channel channel; - @Autowired private RealmRepository realmRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java similarity index 97% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java index bded1a1289436dabe34f09dbae9e9e8af2516557..2e074dec070bb164884b8c25678b1021ec3b70b7 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java @@ -2,9 +2,14 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.amqp.RabbitMqConsumer; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.amqp.ConsumerDto; import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.config.*; +import at.tuwien.config.AmqpConfig; +import at.tuwien.config.MariaDbConfig; +import at.tuwien.config.MariaDbContainerConfig; +import at.tuwien.config.RabbitMqConfig; import at.tuwien.exception.AmqpException; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.listener.impl.RabbitMqListenerImpl; @@ -48,6 +53,7 @@ import static org.mockito.Mockito.when; @Testcontainers @SpringBootTest @ExtendWith(SpringExtension.class) +@MockOpensearch public class QueueServiceIntegrationTest extends BaseUnitTest { @MockBean @@ -56,9 +62,6 @@ public class QueueServiceIntegrationTest extends BaseUnitTest { @MockBean private TableRepository tableRepository; - @MockBean - private ViewIdxRepository viewIdxRepository; - @MockBean private RabbitMqConsumer rabbitMqConsumer; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java similarity index 94% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java index f4a00ba858fa735f53e5bf58604048d83b105a68..0337b4b0640db6c189909bc33df425edec0e7fa7 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.user.Realm; import at.tuwien.exception.RealmNotFoundException; import at.tuwien.repository.mdb.RealmRepository; @@ -24,11 +26,10 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class RealmServiceIntegrationTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @Autowired private RealmRepository realmRepository; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java similarity index 95% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java index 1fb85f7b76063ad464017191318bb85043b87fc0..024e1eef9aad8b02fd287e640fd8f4c97f11433d 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.user.Role; import at.tuwien.exception.RoleNotFoundException; import at.tuwien.repository.mdb.RoleRepository; @@ -25,11 +27,10 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class RoleServiceIntegrationTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @Autowired private UserRepository userRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java index 89a25f45e657044bde131adffe8f932f21958842..5b3cc99f42a64d3804943f3854fb5c2bf61c4a6e 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.query.ExecuteStatementDto; import at.tuwien.api.database.query.QueryPersistDto; import at.tuwien.api.database.query.QueryResultDto; @@ -41,20 +43,10 @@ import static org.junit.jupiter.api.Assertions.*; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class StoreServiceIntegrationModifyTest extends BaseUnitTest { - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private Channel channel; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @Autowired private TableRepository tableRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java similarity index 96% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java index be59d6b0056020e37ac0436ab172122d9ae6f0e2..6a87569d7e050ba889ca764abc37b42080f4daec 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.exception.*; @@ -41,17 +43,10 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @EnableAutoConfiguration(exclude= RabbitAutoConfiguration.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class StoreServiceIntegrationReadTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - @MockBean private TableRepository tableRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java similarity index 77% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java index 77f5551da34bbedc11a4802907b2bc00deb42493..950044d5b2950a43d230b7345189be51fde1c696 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java @@ -1,14 +1,16 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.config.MariaDbConfig; -import at.tuwien.config.MariaDbContainerConfig; +import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.ViewIdxRepository; +import at.tuwien.repository.sdb.*; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeAll; @@ -33,30 +35,19 @@ import java.util.List; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; - @Log4j2 @Testcontainers @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@EnableAutoConfiguration(exclude= RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableServiceIntegrationReadTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - - @MockBean + @Autowired private TableRepository tableRepository; @Autowired @@ -78,37 +69,75 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { private TableService tableService; @Container - private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); - - @BeforeAll - public static void beforeAll() throws SQLException { - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - } + @Autowired + private MariaDBContainer<?> mariaDBContainer; @BeforeEach - public void beforeEach() { - /* metadata db */ + public void beforeEach() throws SQLException { imageRepository.save(IMAGE_1); realmRepository.save(REALM_DBREPO); userRepository.save(USER_1_SIMPLE); userRepository.save(USER_2_SIMPLE); containerRepository.save(CONTAINER_1_SIMPLE); + containerRepository.save(CONTAINER_2_SIMPLE); databaseRepository.save(DATABASE_1_SIMPLE); tableRepository.save(TABLE_1_SIMPLE); tableRepository.save(TABLE_2_SIMPLE); tableRepository.save(TABLE_3_SIMPLE); tableRepository.save(TABLE_7_SIMPLE); + MariaDbConfig.dropAllDatabases(CONTAINER_1); + MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); + } + + @Test + public void findAll_succeeds() throws DatabaseNotFoundException { + + /* test */ + final List<Table> response = tableService.findAll(DATABASE_1_ID); + assertEquals(4, response.size()); + } + + @Test + public void findAll_fails() { + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + tableService.findAll(DATABASE_2_ID); + }); + } + + @Test + public void findById_succeeds() throws TableNotFoundException, DatabaseNotFoundException{ + + /* test */ + final Table response = tableService.findById(DATABASE_1_ID, TABLE_1_ID); + assertEquals(TABLE_1_ID, response.getId()); + assertEquals(TABLE_1_NAME, response.getName()); + assertEquals(TABLE_1_INTERNALNAME, response.getInternalName()); + } + + @Test + public void findById_tableNotFound_fails() { + + /* test */ + assertThrows(TableNotFoundException.class, () -> { + tableService.findById(DATABASE_1_ID, 99999L); + }); + } + + @Test + public void findById_databaseNotFound_fails() { + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + tableService.findById(99999L, TABLE_3_ID); + }); } @Test public void findHistory_anonymous_succeeds() throws UserNotFoundException, TableNotFoundException, QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException { - /* mock */ - when(tableRepository.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final List<TableHistoryDto> response = tableService.findHistory(DATABASE_1_ID, TABLE_1_ID, null); assertEquals(1, response.size()); @@ -121,10 +150,6 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { public void findHistory_anonymous2_succeeds() throws UserNotFoundException, TableNotFoundException, QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException { - /* mock */ - when(tableRepository.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final List<TableHistoryDto> response = tableService.findHistory(DATABASE_1_ID, TABLE_1_ID, null); assertEquals(1, response.size()); @@ -137,10 +162,6 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { public void findHistory_researcher_succeeds() throws UserNotFoundException, TableNotFoundException, QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException { - /* mock */ - when(tableRepository.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final List<TableHistoryDto> response = tableService.findHistory(DATABASE_1_ID, TABLE_1_ID, USER_1_PRINCIPAL); assertEquals(1, response.size()); @@ -153,10 +174,6 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { public void findHistory_developer_succeeds() throws UserNotFoundException, TableNotFoundException, QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException { - /* mock */ - when(tableRepository.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final List<TableHistoryDto> response = tableService.findHistory(DATABASE_1_ID, TABLE_1_ID, USER_2_PRINCIPAL); assertEquals(1, response.size()); @@ -169,10 +186,6 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { public void findHistory_dataSteward_succeeds() throws UserNotFoundException, TableNotFoundException, QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException { - /* mock */ - when(tableRepository.find(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final List<TableHistoryDto> response = tableService.findHistory(DATABASE_1_ID, TABLE_1_ID, USER_3_PRINCIPAL); assertEquals(1, response.size()); diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java similarity index 98% rename from dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java index 389847aed91bba53fe4a7f325ee5542936fb6db9..7887379dae80c6b3bf8f99c183594e6f330ecc9d 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java @@ -2,6 +2,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.TableDto; import at.tuwien.api.database.table.columns.ColumnCreateDto; @@ -12,10 +14,10 @@ import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.*; import at.tuwien.mapper.TableMapper; +import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.ConceptIdxRepository; import at.tuwien.repository.sdb.TableColumnIdxRepository; import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.UnitIdxRepository; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; @@ -51,17 +53,10 @@ import static org.mockito.Mockito.when; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableServiceIntegrationWriteTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - @MockBean private TableIdxRepository tableidxRepository; @@ -78,7 +73,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { private DatabaseRepository databaseRepository; @Autowired - private at.tuwien.repository.mdb.TableRepository tableRepository; + private TableRepository tableRepository; @Autowired private TableService tableService; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java similarity index 90% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java index eeaf5f389e5ac5e76d881e11c2ab28ce702d9a17..50950cfbc506de2d83ea9e8a5d9cbbd61ee1fae2 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.DatabaseNotFoundException; import at.tuwien.exception.TableNotFoundException; @@ -33,20 +35,10 @@ import static org.mockito.Mockito.when; @EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class TableServiceUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @Autowired private TableService tableService; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java similarity index 96% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java index 7ac8f6b527506484f8ead144bf3ea9fda55d4cc8..4efd9fc8e946a344838e7bc7c5a7c7ee39265f68 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java @@ -1,6 +1,8 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.user.UserAttribute; import at.tuwien.exception.UserAttributeNotFoundException; import at.tuwien.repository.mdb.UserAttributeRepository; @@ -27,11 +29,10 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class UserAttributeServiceIntegrationTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @Autowired private UserRepository userRepository; diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java similarity index 90% rename from dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java index d3f4219416b303b5021bf8e92bafd3494e6f3a98..5f86ca2204a5989eb26cd00bafd84a83e02ea6b0 100644 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java @@ -1,17 +1,21 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.user.UserPasswordDto; import at.tuwien.api.user.UserThemeSetDto; import at.tuwien.api.user.UserUpdateDto; import at.tuwien.entities.user.User; import at.tuwien.entities.user.UserAttribute; -import at.tuwien.exception.*; +import at.tuwien.exception.UserAlreadyExistsException; +import at.tuwien.exception.UserAttributeNotFoundException; +import at.tuwien.exception.UserEmailAlreadyExistsException; +import at.tuwien.exception.UserNotFoundException; import at.tuwien.repository.mdb.RealmRepository; import at.tuwien.repository.mdb.RoleRepository; import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.UserIdxRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,7 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -36,11 +39,10 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class UserServiceIntegrationTest extends BaseUnitTest { - @MockBean - private UserIdxRepository userIdxRepository; - @Autowired private UserRepository userRepository; @@ -60,6 +62,24 @@ public class UserServiceIntegrationTest extends BaseUnitTest { roleRepository.save(ROLE_DEFAULT_RESEARCHER_ROLES); } + @Test + public void findByUsername_succeeds() throws UserNotFoundException { + + /* test */ + final User response = userService.findByUsername(USER_1_USERNAME); + assertEquals(USER_1_ID, response.getId()); + assertEquals(USER_1_USERNAME, response.getUsername()); + } + + @Test + public void findByUsername_fails() { + + /* test */ + assertThrows(UserNotFoundException.class, () -> { + userService.findByUsername(USER_2_USERNAME); + }); + } + @Test public void findAll_succeeds() { diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java similarity index 91% rename from dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java index d81b759744069c5831c661c888feba2c15b4128f..13ad878a8fb0a9f1126266c4801eae7e09da7f29 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java @@ -1,8 +1,10 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.user.User; -import at.tuwien.exception.*; +import at.tuwien.exception.UserNotFoundException; import at.tuwien.repository.mdb.UserRepository; import at.tuwien.repository.sdb.IdentifierIdxRepository; import org.junit.jupiter.api.Test; @@ -20,11 +22,10 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest +@MockAmqp +@MockOpensearch public class UserServiceUnitTest extends BaseUnitTest { - @MockBean - private IdentifierIdxRepository identifierIdxRepository; - @MockBean private UserRepository userRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java similarity index 96% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java index 272779a2bb71c7574c9c443c86b888cfa3cc299d..803bdc44c0c922dc5670a956cb53492f4bd75c9b 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java @@ -1,8 +1,9 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.ViewCreateDto; -import at.tuwien.api.database.ViewDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.entities.database.View; @@ -48,22 +49,9 @@ import static org.junit.jupiter.api.Assertions.assertNull; @EnableAutoConfiguration(exclude= RabbitAutoConfiguration.class) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp public class ViewServiceIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - /* keep */ - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - /* keep */ - @MockBean - private BrokerServiceGateway brokerServiceGateway; - - @Autowired - private ViewIdxRepository viewIdxRepository; - @Autowired private DatabaseRepository databaseRepository; diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java similarity index 94% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java index 801f7a5bad690ff2411d8c046fc8da76641c3bba..44d023d87b8ddc6595883c1047a6d04d81c497b4 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java @@ -1,11 +1,12 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.api.database.ViewCreateDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.listener.impl.RabbitMqListenerImpl; @@ -41,20 +42,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class ViewServicePersistenceIntegrationTest extends BaseUnitTest { - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - @Autowired private DatabaseRepository databaseRepository; diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/utils/AmqpUtils.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java similarity index 79% rename from dbrepo-metadata-db/test/src/main/java/at/tuwien/utils/AmqpUtils.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java index afa93e9de772e50e2f2f99aa6c17c7e46ebeb456..22ee9436920a2317dbac578ce32cdad02290c3b8 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/utils/AmqpUtils.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java @@ -1,13 +1,11 @@ package at.tuwien.utils; -import at.tuwien.api.amqp.CreateUserDto; -import at.tuwien.api.amqp.ExchangeDto; -import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; -import at.tuwien.api.amqp.PermissionDto; +import at.tuwien.api.amqp.*; import lombok.extern.log4j.Log4j2; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -17,7 +15,6 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -import java.net.URI; import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; @@ -83,8 +80,8 @@ public class AmqpUtils { } } - public void setPermissions(String endpoint, String vhost, String username, GrantVirtualHostPermissionsDto data) { - final URI url = URI.create(endpoint + "/api/permissions/" + vhost + "/" + username); + public void setPermissions(String vhost, String username, GrantVirtualHostPermissionsDto data) { + final String url = "/api/permissions/" + vhost + "/" + username; log.debug("set user permissions: {}", url); log.trace("body: {}", data); final MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); @@ -96,4 +93,22 @@ public class AmqpUtils { } } + public boolean queueExists(String queue) { + final ResponseEntity<QueueDto[]> response = restTemplate.exchange("/api/queues/{1}/", HttpMethod.GET, new HttpEntity<>(null), QueueDto[].class, "/"); + if (!response.getStatusCode().equals(HttpStatus.OK)) { + log.error("Failed to find queue, code is {}", response.getStatusCode()); + throw new RuntimeException("Failed to find queue"); + } + assert response.getBody() != null; + final List<String> names = Arrays.stream(response.getBody()) + .map(QueueDto::getName) + .collect(Collectors.toList()); + if (names.stream().filter(n -> n.equals(queue)).count() != 1) { + log.error("Failed to find queue {} in queues {}", queue, names); + return false; + } + log.info("Found queue {} in queues {}", queue, names); + return true; + } + } diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java similarity index 98% rename from dbrepo-query-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java index d1a14173c2927b3f157472f56559c3fb4abfa00f..6ea244795211c2b568b6a0e09e36b8ece87bf118 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java @@ -2,6 +2,8 @@ package at.tuwien.validator; import at.tuwien.BaseUnitTest; import at.tuwien.SortType; +import at.tuwien.annotations.MockAmqp; +import at.tuwien.annotations.MockOpensearch; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.VisibilityType; @@ -23,18 +25,17 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.Optional; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@MockAmqp +@MockOpensearch public class EndpointValidatorUnitTest extends BaseUnitTest { - @MockBean - private Channel channel; - @MockBean private DatabaseService databaseService; @@ -44,9 +45,6 @@ public class EndpointValidatorUnitTest extends BaseUnitTest { @MockBean private IdentifierRepository identifierRepository; - @MockBean - private ViewIdxRepository viewIdxRepository; - @MockBean private TableService tableService; diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties index dedb45afcbc41153471c011be726fba7c5451fcc..72324c813e9a123babce15fdf742f814373ad06e 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties @@ -1,12 +1,8 @@ # enable local spring profile -spring.profiles.active=local +spring.profiles.active=local,junit # disable discovery -spring.cloud.discovery.enabled = false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled = false -spring.cloud.config.enabled = false +spring.cloud.discovery.enabled=false # internal datasource spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value @@ -18,5 +14,24 @@ spring.sql.init.mode=always spring.sql.init.schema-locations=classpath*:init/schema.sql spring.jpa.hibernate.ddl-auto=create -fda.mapping.path: /tmp -fda.table.path: /tmp \ No newline at end of file +# logging +logging.level.root=error +logging.level.at.tuwien.=trace +logging.level.org.hibernate.SQL=debug +logging.level.org.hibernate.type=trace + +# rabbitmq +fda.broker.endpoint=http://localhost:15672 +spring.rabbitmq.host=localhost +spring.rabbitmq.virtual-host=/ +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest + +# datacite +fda.datacite.url: https://api.test.datacite.org/ +fda.datacite.prefix: 10.12345 +fda.datacite.username: test-user +fda.datacite.password: test-password + +# consumers +fda.consumers=2 \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa0.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa0.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa0.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa0.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa1.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa1.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa1.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa1.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa2.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa2.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa2.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa2.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa3.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa3.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa3.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa3.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa4.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa4.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_apa4.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_apa4.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex0.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex0.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex0.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex0.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex1.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex1.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex1.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex1.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex2.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex2.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex2.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex2.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex3.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex3.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_bibtex3.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_bibtex3.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee0.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee0.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee0.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee0.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee1.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee1.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee1.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee1.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee2.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee2.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee2.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee2.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee3.txt b/dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee3.txt similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee3.txt rename to dbrepo-metadata-service/rest-service/src/test/resources/bibliography/style_ieee3.txt diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/csv/keyboard.csv b/dbrepo-metadata-service/rest-service/src/test/resources/csv/keyboard.csv similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/csv/keyboard.csv rename to dbrepo-metadata-service/rest-service/src/test/resources/csv/keyboard.csv diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/csv/testdata.csv b/dbrepo-metadata-service/rest-service/src/test/resources/csv/testdata.csv similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/csv/testdata.csv rename to dbrepo-metadata-service/rest-service/src/test/resources/csv/testdata.csv diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/musicology.sql b/dbrepo-metadata-service/rest-service/src/test/resources/init/musicology.sql similarity index 100% rename from dbrepo-data-service/rest-service/src/test/resources/init/musicology.sql rename to dbrepo-metadata-service/rest-service/src/test/resources/init/musicology.sql diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/users.sql b/dbrepo-metadata-service/rest-service/src/test/resources/init/users.sql similarity index 100% rename from dbrepo-data-service/rest-service/src/test/resources/init/users.sql rename to dbrepo-metadata-service/rest-service/src/test/resources/init/users.sql diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/weather.sql b/dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql similarity index 91% rename from dbrepo-data-service/rest-service/src/test/resources/init/weather.sql rename to dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql index 05976e23e48dd83f763a0acbf841223e7e879d43..6c1b14187daafdbe0022548c445e86688ea9f5d3 100644 --- a/dbrepo-data-service/rest-service/src/test/resources/init/weather.sql +++ b/dbrepo-metadata-service/rest-service/src/test/resources/init/weather.sql @@ -45,9 +45,9 @@ VALUES ('2022-12-24 17:00:00', 10.0), ('2022-12-24 21:00:00', 10.0), ('2022-12-24 22:00:00', null); -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## +-- ##################################################################################################################### +-- ## TEST CASE PRE-REQUISITE ## +-- ##################################################################################################################### CREATE VIEW junit2 AS ( diff --git a/dbrepo-query-service/rest-service/src/test/resources/init/zoo.sql b/dbrepo-metadata-service/rest-service/src/test/resources/init/zoo.sql similarity index 97% rename from dbrepo-query-service/rest-service/src/test/resources/init/zoo.sql rename to dbrepo-metadata-service/rest-service/src/test/resources/init/zoo.sql index 6da21fb1b3b0a13349df72b00ed63ed04bb582e1..6279d887cc22e7112e663eb87242e9b7092b4a7f 100644 --- a/dbrepo-query-service/rest-service/src/test/resources/init/zoo.sql +++ b/dbrepo-metadata-service/rest-service/src/test/resources/init/zoo.sql @@ -167,11 +167,9 @@ VALUES (1, 5), (4, 4), (5, 100); -/* -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## -*/ +-- ##################################################################################################################### +-- ## TEST CASE PRE-REQUISITE ## +-- ##################################################################################################################### CREATE VIEW mock_view AS ( @@ -196,6 +194,3 @@ SELECT `id`, `class_type` FROM `zoo` WHERE `class_type` = 1); - - -COMMIT; diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/doi_ec.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/doi_ec.json similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/doi_ec.json rename to dbrepo-metadata-service/rest-service/src/test/resources/json/doi_ec.json diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/json/metadata0.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata0.json similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/json/metadata0.json rename to dbrepo-metadata-service/rest-service/src/test/resources/json/metadata0.json diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/json/metadata1.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/metadata1.json similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/json/metadata1.json rename to dbrepo-metadata-service/rest-service/src/test/resources/json/metadata1.json diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/orcid_jdoe.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/orcid_jdoe.json similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/orcid_jdoe.json rename to dbrepo-metadata-service/rest-service/src/test/resources/json/orcid_jdoe.json diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/ror_tuw.json b/dbrepo-metadata-service/rest-service/src/test/resources/json/ror_tuw.json similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/ror_tuw.json rename to dbrepo-metadata-service/rest-service/src/test/resources/json/ror_tuw.json diff --git a/dbrepo-query-service/rest-service/src/test/resources/weather/location.csv b/dbrepo-metadata-service/rest-service/src/test/resources/weather/location.csv similarity index 100% rename from dbrepo-query-service/rest-service/src/test/resources/weather/location.csv rename to dbrepo-metadata-service/rest-service/src/test/resources/weather/location.csv diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/xml/datacite-example-dataset-v4.xml b/dbrepo-metadata-service/rest-service/src/test/resources/xml/datacite-example-dataset-v4.xml similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/xml/datacite-example-dataset-v4.xml rename to dbrepo-metadata-service/rest-service/src/test/resources/xml/datacite-example-dataset-v4.xml diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/xml/metadata0.xml b/dbrepo-metadata-service/rest-service/src/test/resources/xml/metadata0.xml similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/xml/metadata0.xml rename to dbrepo-metadata-service/rest-service/src/test/resources/xml/metadata0.xml diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/xml/metadata1.xml b/dbrepo-metadata-service/rest-service/src/test/resources/xml/metadata1.xml similarity index 100% rename from dbrepo-identifier-service/rest-service/src/test/resources/xml/metadata1.xml rename to dbrepo-metadata-service/rest-service/src/test/resources/xml/metadata1.xml diff --git a/dbrepo-metadata-service/services/pom.xml b/dbrepo-metadata-service/services/pom.xml index 47ffbca20359ffd188390ec4781463b969df0048..5fd908ca79cd63351f4b969da505711dd151c60f 100644 --- a/dbrepo-metadata-service/services/pom.xml +++ b/dbrepo-metadata-service/services/pom.xml @@ -9,11 +9,37 @@ <version>1.3.0</version> </parent> - <artifactId>services</artifactId> + <artifactId>dbrepo-metadata-service-services</artifactId> <version>1.3.0</version> <name>dbrepo-metadata-service-services</name> - <dependencies /> + <dependencies> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-oai</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-querystore</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-entities</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-repositories</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> <build> <plugins> diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/amqp/RabbitMqConsumer.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/amqp/RabbitMqConsumer.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/amqp/RabbitMqConsumer.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/amqp/RabbitMqConsumer.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/AmqpConfig.java similarity index 88% rename from dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/config/AmqpConfig.java index 0d2f0d1c1a3f23e16a63b67cad036e2340af36d2..85d481b8f2d96e910f565a1e08dc8a7a4f74fb85 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/AmqpConfig.java @@ -4,7 +4,7 @@ import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import lombok.Getter; -import lombok.extern.slf4j.Slf4j; +import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,8 +12,8 @@ import org.springframework.context.annotation.Configuration; import java.io.IOException; import java.util.concurrent.TimeoutException; -@Slf4j @Getter +@Log4j2 @Configuration public class AmqpConfig { @@ -51,8 +51,8 @@ public class AmqpConfig { } @Bean - public Channel getChannel() throws IOException, TimeoutException { - final Connection connection = connectionFactory().newConnection(); + public Channel getChannel(ConnectionFactory factory) throws IOException, TimeoutException { + final Connection connection = factory.newConnection(); return connection.createChannel(); } diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/EndpointConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/EndpointConfig.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/config/EndpointConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/config/EndpointConfig.java diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java index 4ab06fdf85d62394aaf1877a61b680233f870e6e..5c1dd846aa4c09dbfe22f13d823f824d3f457dc2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java @@ -4,6 +4,7 @@ import lombok.Getter; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.http.client.support.BasicAuthenticationInterceptor; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.DefaultUriBuilderFactory; @@ -12,8 +13,8 @@ import org.springframework.web.util.DefaultUriBuilderFactory; @Configuration public class GatewayConfig { - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; + @Value("${fda.broker.endpoint}") + private String brokerEndpoint; @Value("${spring.rabbitmq.username}") private String brokerUsername; @@ -21,10 +22,15 @@ public class GatewayConfig { @Value("${spring.rabbitmq.password}") private String brokerPassword; + @Primary + public RestTemplate restTemplate() { + return new RestTemplate(); + } + @Bean("brokerRestTemplate") public RestTemplate brokerRestTemplate() { final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(brokerEndpoint)); restTemplate.getInterceptors() .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); return restTemplate; diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/QueryConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/QueryConfig.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/config/QueryConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/config/QueryConfig.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/SecurityConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/SecurityConfig.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/config/SecurityConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/config/SecurityConfig.java diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index 2b7e04859f03dd201e59cd2921e84c1f1fb8857d..87354a80dc7ee69e2cba655fd6b177c6c2c556a8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -1,5 +1,9 @@ package at.tuwien.config; +import at.tuwien.auth.AuthTokenFilter; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.security.SecurityScheme; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; @@ -7,19 +11,29 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import jakarta.servlet.http.HttpServletResponse; - @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) +@SecurityScheme( + name = "bearerAuth", + type = SecuritySchemeType.HTTP, + bearerFormat = "JWT", + scheme = "bearer" +) public class WebSecurityConfig { + @Bean + public AuthTokenFilter authTokenFilter() { + return new AuthTokenFilter(); + } + @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { final OrRequestMatcher internalEndpoints = new OrRequestMatcher( @@ -30,7 +44,8 @@ public class WebSecurityConfig { new AntPathRequestMatcher("/swagger-ui.html") ); final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/oai/**", "GET") + new AntPathRequestMatcher("/api/**", "GET"), + new AntPathRequestMatcher("/api/user/**", "POST") ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); @@ -57,6 +72,10 @@ public class WebSecurityConfig { .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); + /* add JWT token filter */ + http.addFilterBefore(authTokenFilter(), + UsernamePasswordAuthenticationFilter.class + ); return http.build(); } @@ -71,4 +90,5 @@ public class WebSecurityConfig { source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } + } diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/ApiTemplateInterceptor.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/ApiTemplateInterceptor.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/ApiTemplateInterceptor.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/ApiTemplateInterceptor.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java similarity index 94% rename from dbrepo-database-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java index 8b84b912e476b485bb5efd6ac506cce69a5f132d..ba38f6118fce9c18829ed8cf5c96d9866a37cb47 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java @@ -1,14 +1,18 @@ package at.tuwien.gateway; - +import at.tuwien.api.amqp.ConsumerDto; import at.tuwien.api.amqp.CreateVirtualHostDto; import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; import at.tuwien.api.user.ExchangeUpdatePermissionsDto; import at.tuwien.exception.BrokerVirtualHostCreationException; import at.tuwien.exception.BrokerVirtualHostGrantException; +import java.util.List; + public interface BrokerServiceGateway { + List<ConsumerDto> findAllConsumers(); + /** * Create virtual host at the queue service. * diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/RorGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/RorGateway.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/RorGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/RorGateway.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/ApiTemplateInterceptorImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/ApiTemplateInterceptorImpl.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/ApiTemplateInterceptorImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/ApiTemplateInterceptorImpl.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java similarity index 71% rename from dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java index 46ad0e8e991dfaad8630cc45a5eca8a3b2331021..52de16e2f364e3ea6f4896763dc0514cc0331a64 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java @@ -1,23 +1,33 @@ package at.tuwien.gateway.impl; +import at.tuwien.api.amqp.ConsumerDto; import at.tuwien.api.amqp.CreateUserDto; import at.tuwien.api.amqp.CreateVirtualHostDto; import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; import at.tuwien.api.user.ExchangeUpdatePermissionsDto; +import at.tuwien.config.AmqpConfig; import at.tuwien.config.GatewayConfig; import at.tuwien.exception.BrokerVirtualHostCreationException; import at.tuwien.exception.BrokerVirtualHostGrantException; import at.tuwien.gateway.BrokerServiceGateway; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.env.Environment; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.net.URI; +import java.nio.charset.Charset; import java.util.Arrays; +import java.util.List; @Slf4j @Service @@ -27,17 +37,18 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway { private final RestTemplate restTemplate; private final GatewayConfig gatewayConfig; + private final static String VIRTUAL_SERVER = "dbrepo"; + @Autowired - public BrokerServiceGatewayImpl(Environment environment, @Qualifier("brokerRestTemplate") RestTemplate restTemplate, - GatewayConfig gatewayConfig) { + public BrokerServiceGatewayImpl(Environment environment, GatewayConfig gatewayConfig, + @Qualifier("brokerRestTemplate") RestTemplate restTemplate) { this.environment = environment; this.restTemplate = restTemplate; this.gatewayConfig = gatewayConfig; } - private URI parseUrl(String path) { - final String prefix = !Arrays.asList(environment.getActiveProfiles()).contains("junit") ? "/broker" : ""; - final URI url = URI.create(gatewayConfig.getGatewayEndpoint() + "/api" + prefix + path); + private String parseUrl(String path) { + final String url = "/api" + path; log.debug("parse url: {}", url); return url; } @@ -92,4 +103,21 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway { log.info("Grant permission for user with username {}", username); } + @Override + public List<ConsumerDto> findAllConsumers() { + final StringBuilder urlBuilder = new StringBuilder(gatewayConfig.getBrokerEndpoint()) + .append("/api"); + if (Arrays.stream(environment.getActiveProfiles()).noneMatch(p -> p.equals("junit"))) { + urlBuilder.append("/broker"); + } + urlBuilder.append("/consumers/") + .append(VIRTUAL_SERVER); + log.trace("gateway broker find all consumers, virtual server={}", VIRTUAL_SERVER); + final URI findUri = URI.create(urlBuilder.toString()); + final ResponseEntity<List<ConsumerDto>> response = restTemplate.exchange(findUri, HttpMethod.GET, + HttpEntity.EMPTY, new ParameterizedTypeReference<>() { + }); + return response.getBody(); + } + } diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java similarity index 100% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java similarity index 96% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java index a9c0970694d501000073cf097d2eee3a45268ec1..01cc23fa6a4dcc7749e52dad66ae7428385beff8 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java @@ -1,7 +1,6 @@ package at.tuwien.gateway.impl; import at.tuwien.api.ror.RorDto; -import at.tuwien.exception.OrcidNotFoundException; import at.tuwien.exception.RorNotFoundException; import at.tuwien.gateway.RorGateway; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/DatabaseListener.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/listener/MessageQueueListener.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/MessageQueueListener.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/listener/MessageQueueListener.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/MessageQueueListener.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/MariadbListenerImpl.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/listener/impl/RabbitMqListenerImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/RabbitMqListenerImpl.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/listener/impl/RabbitMqListenerImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/listener/impl/RabbitMqListenerImpl.java diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index 04a8da854e9fdcc99a059c3aa1d7728e21b8780b..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index df6ec321689ad7fa1c05eb1430177aae79122133..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java deleted file mode 100644 index 27706deae379000a1b7fbf4ca6ffcb2941094609..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Identifier; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierRepository extends JpaRepository<Identifier, Long> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index b1020fdcc532602d72cad5018b964edec4f25eea..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java deleted file mode 100644 index da00aae798c0a66a096e6b85b1a8ed92362c7f73..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.License; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface LicenseRepository extends JpaRepository<License, String> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 1be6bbd2549e0e8dc2fa00dea458ccb1211d52c0..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index c1e1d08295b85548041332353abfcee62c29e2df..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java deleted file mode 100644 index 45e42d1515bbc6f94001363ce647a5d8472c9f6c..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.identifier.IdentifierDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierIdxRepository extends ElasticsearchRepository<IdentifierDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java similarity index 75% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java index 3747f33997091e82664e2b72af0ff485820b486b..95077d2b20fe4f45ff70f509bd19f67423175564 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/AccessService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java @@ -6,10 +6,21 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; import java.util.List; +import java.util.UUID; public interface AccessService { - List<DatabaseAccess> list(Long databaseId) throws AccessDeniedException; + List<DatabaseAccess> list(Long databaseId) throws NotAllowedException; + + /** + * Finds database access by given database id and user id. + * + * @param databaseId The database id. + * @param userId The user id. + * @return The database access. + * @throws AccessDeniedException The access does not exist. + */ + DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException; /** * Checks if user with username has access to database with given id. @@ -17,9 +28,19 @@ public interface AccessService { * @param databaseId The database id. * @param username The username. * @return True if user has access, False otherwise. - * @throws AccessDeniedException The access is denied. + * @throws NotAllowedException The access is denied. + */ + DatabaseAccess find(Long databaseId, String username) throws NotAllowedException; + + /** + * Checks if the user with username has access to the database with given id. + * + * @param databaseId The database id. + * @param username The username. + * @return The access object. + * @throws NotAllowedException The user does not have access. */ - DatabaseAccess find(Long databaseId, String username) throws AccessDeniedException; + DatabaseAccess hasAccess(Long databaseId, String username) throws NotAllowedException; /** * Give somebody access to a database of container. @@ -48,7 +69,8 @@ public interface AccessService { * @throws DatabaseMalformedException The database has an invalid state. */ void update(Long databaseId, String username, DatabaseModifyAccessDto accessDto) - throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException, AccessDeniedException; + throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException, + NotAllowedException; /** * Revokes access to a database of container. diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/BannerMessageService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BannerMessageService.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/BannerMessageService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BannerMessageService.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ContainerService.java similarity index 77% rename from dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ContainerService.java index 9b50bdda73cd4018dbf4b6aa31e40c7a7c99a8e9..22476b7fa156ae23a4ce1ab437c20c8ce7bf9fc0 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -16,22 +16,18 @@ public interface ContainerService { * @param principal The principal of the creating user. * @return The container object, if successful. * @throws ImageNotFoundException The image of the container was not found in the metadata database. - * @throws DockerClientException The docker client was unable to perform this action. * @throws ContainerAlreadyExistsException A container with this name already exists. - * @throws UserNotFoundException The user creating the container was not found in the metadata database. */ Container create(ContainerCreateRequestDto createDto, Principal principal) throws ImageNotFoundException, - ContainerAlreadyExistsException, UserNotFoundException; + ContainerAlreadyExistsException; /** * Removes a container by given id from the metadata database. * * @param containerId The container id. * @throws ContainerNotFoundException The container was not found in the metadata database. - * @throws ContainerStillRunningException The container is still running and this action cannot be performed. */ - void remove(Long containerId) throws ContainerNotFoundException, - ContainerStillRunningException, ContainerAlreadyRemovedException; + void remove(Long containerId) throws ContainerNotFoundException; /** * Finds a container with a specific id from the metadata database. diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java similarity index 90% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java index 8a9bf064874debecb548e2fbe09dedb04633b146..913afb59bdd6c3218679addedaa9211fa1abb367 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -14,8 +14,22 @@ import java.util.UUID; @Service public interface DatabaseService { + /** + * Finds all databases stored in the metadata database. + * + * @return List of databases. + */ List<Database> findAll(); + /** + * Finds a specific database for a given id in the metadata database. + * + * @param databaseId The database id. + * @return The database if found. + * @throws DatabaseNotFoundException The database was not found. + */ + Database find(Long databaseId) throws DatabaseNotFoundException; + /** * Finds a specific database for a given id in the metadata database. * @@ -45,14 +59,13 @@ public interface DatabaseService { * @throws ImageNotSupportedException The image is not supported. * @throws DatabaseMalformedException The query string is malformed. * @throws AmqpException The exchange could not be deleted. - * @throws ContainerConnectionException The connection to the container could not be established. * @throws DatabaseConnectionException The connection to the database could not be established by the database connector. * @throws QueryMalformedException The mapped deletion query resulted in an invalid query statement and thus was rejected by the database engine. * @throws UserNotFoundException The current user could not be loaded in the metadata database. */ void delete(Long databaseId, UUID userId) throws DatabaseNotFoundException, ImageNotSupportedException, - DatabaseMalformedException, AmqpException, ContainerConnectionException, + DatabaseMalformedException, AmqpException, DatabaseConnectionException, QueryMalformedException, UserNotFoundException; /** diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java new file mode 100644 index 0000000000000000000000000000000000000000..48ad06842a3dbce7af876fa43af4b323df6773bd --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java @@ -0,0 +1,26 @@ +package at.tuwien.service; + +import at.tuwien.api.semantics.EntityDto; +import at.tuwien.api.semantics.TableColumnEntityDto; +import at.tuwien.entities.semantics.Ontology; +import at.tuwien.exception.*; + +import java.util.List; + +public interface EntityService { + + List<EntityDto> findByLabel(Ontology ontology, String label) throws QueryMalformedException; + + List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws QueryMalformedException; + + List<EntityDto> findByUri(Ontology ontology, String uri) throws QueryMalformedException; + + EntityDto findOneByUri(Ontology ontology, String uri) throws QueryMalformedException, + SemanticEntityNotFoundException; + + List<EntityDto> suggestTableSemantics(Long databaseId, Long tableId) throws TableNotFoundException, + QueryMalformedException, DatabaseNotFoundException; + + List<TableColumnEntityDto> suggestTableColumnSemantics(Long databaseId, Long tableId, Long columnId) + throws QueryMalformedException, TableColumnNotFoundException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java index fd87237edba7feee5302de1d4791bc6a6071f5ea..8a5e9836f088f07ef9d8fb48d4c4929558f0bef8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java @@ -1,10 +1,18 @@ package at.tuwien.service; +import at.tuwien.api.identifier.BibliographyTypeDto; +import at.tuwien.api.identifier.IdentifierSaveDto; +import at.tuwien.api.identifier.IdentifierTypeDto; import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.exception.*; +import org.springframework.core.io.InputStreamResource; +import org.springframework.stereotype.Service; +import java.security.Principal; import java.util.List; +import java.util.Optional; +@Service public interface IdentifierService { /** @@ -14,6 +22,14 @@ public interface IdentifierService { */ List<Identifier> findAll(); + /** + * Finds all identifiers in the metadata database for a database with given id. + * + * @param databaseId The database id. + * @return The list of identifiers. + */ + List<Identifier> findAll(Long databaseId); + /** * Finds an identifier by given id. * @@ -22,4 +38,107 @@ public interface IdentifierService { * @throws IdentifierNotFoundException The identifier does not exist. */ Identifier find(Long id) throws IdentifierNotFoundException; + + /** + * Finds all identifiers in the metadata database which are not deleted and filter by query id. + * + * @param databaseId The database id. + * @param queryId The query id. + * @return The identifiers, if found. + */ + List<Identifier> findByDatabaseIdAndQueryId(Long databaseId, Long queryId); + + List<Identifier> findAllDatabaseIdentifiers(); + + List<Identifier> findAllSubsetIdentifiers(); + + /** + * Finds all identifiers in the metadata database which are not deleted. Optionally, the result can be filtered by + * database id and/or query id. + * + * @param databaseId Optional. The database id. + * @param queryId Optional. The query id. + * @param viewId Optional. The view id. + * @return List of identifiers + */ + List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId); + + /** + * Creates a new identifier in the metadata database for a query or database. + * + * @param data The identifier. + * @param principal The authorization principal. + * @return The created identifier from the metadata database if successful. + * @throws IdentifierPublishingNotAllowedException The identifier with this visibility could not be created. + * @throws QueryNotFoundException The query with this id (in the data) could not be created. + * @throws RemoteUnavailableException The connection to the Query Store could not be established by + * the database connector. + * @throws IdentifierAlreadyExistsException The identifier for this query/database already exists. + * @throws UserNotFoundException The user was not found in the metadata database. + * @throws DatabaseNotFoundException The database was not found in the metadata database. + */ + Identifier create(IdentifierSaveDto data, Principal principal) + throws IdentifierPublishingNotAllowedException, QueryNotFoundException, + RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, + DatabaseNotFoundException, IdentifierRequestException, ViewNotFoundException, QueryStoreException, + DatabaseConnectionException, ImageNotSupportedException; + + /** + * Export metadata for a identifier + * + * @param id The identifier id. + * @return The export, if successful. + * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. + */ + InputStreamResource exportMetadata(Long id) throws IdentifierNotFoundException; + + /** + * Export metadata for bibliography for a identifier. + * + * @param id The identifier id. + * @param style The identifier bibliography style. Optional. Default: APA. + * @return The export, if successful. + * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. + * @throws IdentifierRequestException The identifier style was not found. + */ + String exportBibliography(Long id, BibliographyTypeDto style) throws IdentifierNotFoundException, + IdentifierRequestException; + + /** + * Exports an identifier to XML + * + * @param identifierId The identifier id. + * @return The XML resource, if successful. + * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. + * @throws QueryNotFoundException The query was not found in the metadata database or was deleted. + * @throws RemoteUnavailableException The connection to the Query Store could not be established by the database + * connector. + * @throws IdentifierRequestException The identifier does not allow for exporting. + */ + InputStreamResource exportResource(Long identifierId, Principal principal) + throws IdentifierNotFoundException, QueryNotFoundException, FileStorageException, + IdentifierRequestException, UserNotFoundException, QueryStoreException, TableMalformedException, + DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException; + + /** + * Updated the metadata (only) on the identifier for a given id in the metadata database. + * + * @param identifierId The identifier id. + * @param data The metadata. + * @param principal The user principal. + * @return The updated identifier if successful. + */ + Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal) + throws UserNotFoundException, DatabaseNotFoundException, QueryNotFoundException, RemoteUnavailableException, + IdentifierRequestException, IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException; + + /** + * Soft-deletes an identifier for a given id in the metadata database. Does not actually remove the entity from the + * database, but sets it as deleted. + * + * @param identifierId The identifier id. + * @throws IdentifierNotFoundException The identifier was not found in the metadata database or was deleted. + */ + void delete(Long identifierId) throws IdentifierNotFoundException; } diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/ImageService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/service/ImageService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/LicenseService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/LicenseService.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/LicenseService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/LicenseService.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java similarity index 54% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java index f26bc0c82f048c6a01232b6b5f6f22f53e63d0f7..2aa11a7a503cdd49e2b45297bac29ffd43ee256c 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java @@ -1,10 +1,11 @@ package at.tuwien.service; -import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.table.Table; import at.tuwien.entities.user.User; -import at.tuwien.exception.*; - +import at.tuwien.exception.AmqpException; +import at.tuwien.exception.BrokerVirtualHostCreationException; +import at.tuwien.exception.BrokerVirtualHostGrantException; import jakarta.annotation.PostConstruct; import java.security.Principal; @@ -28,6 +29,16 @@ public interface MessageQueueService { */ void createExchange(Database database, Principal principal) throws AmqpException; + /** + * Creates a queue and consumer that re-routes the insert requests to the Query Service. Therefore and due to the + * dependency this method cannot take any input during startup or seeding phase as it would introduce a deadlock. + * Seeding is solely performed by the Query Service on startup. + * + * @param table The table. + * @throws AmqpException The broker service did not allow to create a consumer. + */ + void create(Table table) throws AmqpException; + /** * Create user on the broker service * @@ -53,4 +64,20 @@ public interface MessageQueueService { */ void deleteExchange(Database database) throws AmqpException; -} \ No newline at end of file + /** + * Creates a consumer on the provided queue with name and container id and database id for table id. + * + * @param queueName The queue name. + * @param databaseId The database id. + * @param tableId The table id. + * @throws AmqpException The consumer could not be created. + */ + void createConsumer(String queueName, Long databaseId, Long tableId) throws AmqpException; + + /** + * Restores missing consumers at the Broker Service. + * + * @throws AmqpException The consumer could not be created. + */ + void restore() throws AmqpException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java index e3785375e806eb2b5788ea359f857d77582942d6..79d618730cb57699d5dc2a31c5bf41787f606177 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java @@ -1,6 +1,7 @@ package at.tuwien.service; -import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.api.user.external.ExternalMetadataDto; +import at.tuwien.exception.*; import at.tuwien.oaipmh.OaiErrorType; import at.tuwien.oaipmh.OaiListIdentifiersParameters; import at.tuwien.oaipmh.OaiRecordParameters; @@ -45,4 +46,15 @@ public interface MetadataService { * @return The xml error. */ String error(OaiErrorType type); + + /** + * Finds creator user metadata by remote service and user identifier. + * + * @param url The user identifier. + * @return The user metadata. + * @throws OrcidNotFoundException The provided identifier is of ORCID type and does not exist. + * @throws RorNotFoundException The provided identifier is of ROR type and does not exist. + * @throws RemoteUnavailableException The remote service is not supported. + */ + ExternalMetadataDto findByUrl(String url) throws OrcidNotFoundException, RorNotFoundException, RemoteUnavailableException, DoiNotFoundException; } diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/OntologyService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/service/OntologyService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/QueryService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryService.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/service/QueryService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryService.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/QueryStoreService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryStoreService.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/QueryStoreService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/QueryStoreService.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/RealmService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/RealmService.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/RealmService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/RealmService.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/RoleService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/RoleService.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/RoleService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/RoleService.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/SemanticService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java similarity index 71% rename from dbrepo-table-service/services/src/main/java/at/tuwien/service/SemanticService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java index ca94f3bd9f1cd16ea8b78c17be09758e93016fa3..c2bc27cf4c0e669d2138043a20bc8ecf3ad7c23f 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/SemanticService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/SemanticService.java @@ -1,13 +1,26 @@ package at.tuwien.service; +import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; +import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; import at.tuwien.entities.database.table.columns.TableColumnConcept; import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.exception.ConceptNotFoundException; +import at.tuwien.exception.QueryMalformedException; import at.tuwien.exception.SemanticEntityNotFoundException; import at.tuwien.exception.UnitNotFoundException; +import java.util.List; + public interface SemanticService { + List<TableColumnConcept> findAllConcepts(); + + List<TableColumnUnit> findAllUnits(); + + TableColumnConcept saveConcept(ConceptSaveDto data); + + TableColumnUnit saveUnit(UnitSaveDto data); + /** * Finds a ColumnConcept with given uri. * @@ -30,19 +43,17 @@ public interface SemanticService { * Saves a concept with uri and authorization information for retrieving information from the semantics service. * * @param uri The uri. - * @param authorization The authorization information. * @return The saved column concept. * @throws SemanticEntityNotFoundException The semantic information could not be found. */ - TableColumnConcept saveConcept(String uri, String authorization) throws SemanticEntityNotFoundException; + TableColumnConcept saveConcept(String uri) throws SemanticEntityNotFoundException, QueryMalformedException; /** * Saves a unit with uri and authorization information for retrieving information from the semantics service. * * @param uri The uri. - * @param authorization The authorization information. * @return The saved column unit. * @throws SemanticEntityNotFoundException The semantic information could not be found. */ - TableColumnUnit saveUnit(String uri, String authorization) throws SemanticEntityNotFoundException; + TableColumnUnit saveUnit(String uri) throws SemanticEntityNotFoundException, QueryMalformedException; } diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/StoreService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StoreService.java similarity index 100% rename from dbrepo-query-service/services/src/main/java/at/tuwien/service/StoreService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StoreService.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java similarity index 73% rename from dbrepo-table-service/services/src/main/java/at/tuwien/service/TableService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java index 491053eb68a983db0cae5f6caeb9e811cebcb525..ef99379904afbbbc2bacf1b2c625c0c0a474435a 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/TableService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java @@ -1,6 +1,7 @@ package at.tuwien.service; import at.tuwien.api.database.table.TableCreateDto; +import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; @@ -11,6 +12,38 @@ import java.util.List; public interface TableService { + /** + * Find a table in the metadata database by database-table id tuple + * + * @param databaseId The database id. + * @param tableId The table id. + * @return The database. + * @throws DatabaseNotFoundException The database is not found. + * @throws TableNotFoundException The table is not found. + */ + Table find(Long databaseId, Long tableId) throws DatabaseNotFoundException, TableNotFoundException; + + /** + * Finds all tables in the metdata database. + * + * @return The list of tables. + */ + List<Table> findAll(); + + /** + * Find the table history. + * + * @param databaseId The database id. + * @param tableId The table id. + * @param principal The user principal. + * @return The history as a list, if successful. + * @throws QueryMalformedException The query is malformed. + * @throws DatabaseNotFoundException The database is not found. + * @throws TableNotFoundException The table is not found. + */ + List<TableHistoryDto> findHistory(Long databaseId, Long tableId, Principal principal) + throws DatabaseNotFoundException, QueryMalformedException, TableNotFoundException, DatabaseConnectionException, QueryStoreException, UserNotFoundException; + /** * Select all tables from the metadata database. * @@ -81,5 +114,6 @@ public interface TableService { TableColumn update(Long databaseId, Long tableId, Long columnId, ColumnSemanticsUpdateDto updateDto, String authorization) throws TableNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, - TableMalformedException, SemanticEntityPersistException, SemanticEntityNotFoundException; + TableMalformedException, SemanticEntityPersistException, SemanticEntityNotFoundException, + QueryMalformedException; } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserAttributeService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserAttributeService.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/UserAttributeService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserAttributeService.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java similarity index 85% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java index 9c0816ead6f68b611f19193b336bc941c941b54d..dcf127ac67ffe0e623373654823da88543ef4fbf 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/UserService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java @@ -5,11 +5,12 @@ import at.tuwien.api.user.UserPasswordDto; import at.tuwien.api.user.UserThemeSetDto; import at.tuwien.api.user.UserUpdateDto; import at.tuwien.entities.user.Realm; -import at.tuwien.entities.user.Role; import at.tuwien.entities.user.User; -import at.tuwien.exception.*; +import at.tuwien.exception.UserAlreadyExistsException; +import at.tuwien.exception.UserAttributeNotFoundException; +import at.tuwien.exception.UserEmailAlreadyExistsException; +import at.tuwien.exception.UserNotFoundException; -import java.security.Principal; import java.util.List; import java.util.UUID; @@ -22,6 +23,24 @@ public interface UserService { */ List<User> findAll(); + /** + * Finds a user by username. + * + * @param username The username. + * @return The user, if successfully. + * @throws UserNotFoundException The user with this username was not found in the metadata database. + */ + User findByUsername(String username) throws UserNotFoundException; + + /** + * Finds a specific user in the metadata database by given id. + * + * @param id The user id. + * @return The user if successful. False otherwise. + * @throws UserNotFoundException The user was not found. + */ + User find(UUID id) throws UserNotFoundException; + /** * Creates a user in the metadata database managed by Keycloak in the given realm. * @@ -64,15 +83,6 @@ public interface UserService { */ User toggleTheme(UUID id, UserThemeSetDto data) throws UserNotFoundException, UserAttributeNotFoundException; - /** - * Finds a specific user in the metadata database by given id. - * - * @param id The user id. - * @return The user if successful. False otherwise. - * @throws UserNotFoundException The user was not found. - */ - User find(UUID id) throws UserNotFoundException; - /** * Validates if a user with the given username already exists in the metadata database. * diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java similarity index 98% rename from dbrepo-query-service/services/src/main/java/at/tuwien/service/ViewService.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java index be7e631bdf1c023f00bdc8221e6bdd5121283ac0..626b74495c198bbc42b8cd458ecb38e7b8aa1f1d 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/ViewService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java @@ -9,6 +9,8 @@ import java.util.List; public interface ViewService { + View findById(Long id) throws ViewNotFoundException; + /** * Find all views by database id. * diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java similarity index 86% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java index ddb1e5c31171ba82bb486633ec5e439a0aa7e27a..8f5b94e49981ac06b545541756bbf42ff404226b 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java @@ -23,6 +23,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; import java.util.Optional; +import java.util.UUID; @Log4j2 @Service @@ -44,16 +45,38 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi @Override @Transactional(readOnly = true) - public List<DatabaseAccess> list(Long databaseId) throws AccessDeniedException { + public List<DatabaseAccess> list(Long databaseId) throws NotAllowedException { return databaseAccessRepository.findByHdbid(databaseId); } + @Override + public DatabaseAccess find(Long databaseId, UUID userId) throws AccessDeniedException { + final Optional<DatabaseAccess> optional = databaseAccessRepository.findByHdbidAndHuserid(databaseId, userId); + if (optional.isEmpty()) { + log.error("Failed to find access for user with id {}", userId); + throw new AccessDeniedException("Failed to find access"); + } + return optional.get(); + } + + @Override + @Transactional(readOnly = true) + public DatabaseAccess find(Long databaseId, String username) throws NotAllowedException { + final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username); + if (optional.isEmpty()) { + log.error("Failed to find database access for database with id {}", databaseId); + throw new NotAllowedException("Failed to find database access"); + } + return optional.get(); + } + @Override @Transactional(readOnly = true) - public DatabaseAccess find(Long databaseId, String username) throws AccessDeniedException { + public DatabaseAccess hasAccess(Long databaseId, String username) throws NotAllowedException { final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username); if (optional.isEmpty()) { - throw new AccessDeniedException("Failed to retrieve access to database with id " + databaseId + " for user with username '" + username + "'"); + log.error("Failed to retrieve access, not found"); + throw new NotAllowedException("Failed to retrieve access"); } return optional.get(); } @@ -101,7 +124,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi @Transactional public void update(Long databaseId, String username, DatabaseModifyAccessDto accessDto) throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException, - DatabaseMalformedException, AccessDeniedException { + DatabaseMalformedException, NotAllowedException { /* check */ final Database database = databaseService.findById(databaseId); final Container container = database.getContainer(); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java similarity index 88% rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java index ec3f7149657cdcbb3a23a92565945a8611f525d1..6e824875f812c368b273030f7f5dd9dbf9f63de4 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java @@ -70,13 +70,24 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { return identifierService.findByDatabaseIdAndQueryId(databaseId, queryId); } + @Override + public List<Identifier> findAllDatabaseIdentifiers() { + return identifierService.findAllDatabaseIdentifiers(); + } + + @Override + public List<Identifier> findAllSubsetIdentifiers() { + return identifierService.findAllSubsetIdentifiers(); + } + @Override @Transactional(rollbackFor = {Exception.class}) - public Identifier create(IdentifierSaveDto data, Principal principal, String authorization) + public Identifier create(IdentifierSaveDto data, Principal principal) throws IdentifierPublishingNotAllowedException, QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, UserNotFoundException, DatabaseNotFoundException, - IdentifierRequestException, ViewNotFoundException { - final Identifier identifier = identifierService.create(data, principal, authorization); + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { + final Identifier identifier = identifierService.create(data, principal); /* https://stackoverflow.com/questions/55090541/spring-data-jpa-lombok-unsupportedoperationexception-during-saving */ if (identifier.getCreators() != null) { identifier.setCreators(new LinkedList<>(identifier.getCreators())); @@ -139,6 +150,16 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { return identifier; } + @Override + public List<Identifier> findAll() { + return identifierService.findAll(); + } + + @Override + public List<Identifier> findAll(Long databaseId) { + return identifierService.findAll(databaseId); + } + @Override @Transactional(readOnly = true) public Identifier find(Long identifierId) throws IdentifierNotFoundException { @@ -160,18 +181,20 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { @Override @Transactional(readOnly = true) - public InputStreamResource exportResource(Long identifierId) - throws IdentifierNotFoundException, QueryNotFoundException, RemoteUnavailableException, - IdentifierRequestException { - return identifierService.exportResource(identifierId); + public InputStreamResource exportResource(Long identifierId, Principal principal) + throws IdentifierNotFoundException, QueryNotFoundException, FileStorageException, + IdentifierRequestException, UserNotFoundException, QueryStoreException, TableMalformedException, + DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, ImageNotSupportedException { + return identifierService.exportResource(identifierId, principal); } @Override @Transactional(rollbackFor = {Exception.class}) - public Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal, String authorization) + public Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal) throws UserNotFoundException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, - IdentifierRequestException, IdentifierNotFoundException { - Identifier identifier = identifierService.update(identifierId, data, principal, authorization); + IdentifierRequestException, IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { + Identifier identifier = identifierService.update(identifierId, data, principal); if (identifier.getDoi() == null) { return identifier; } diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java similarity index 51% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java index 802b0e7a07e0e8f8cd43176f4edb1214eb2ba31a..3d13e1f1543d5560b12cdfbbc94c9f5271f4104a 100644 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java @@ -1,35 +1,52 @@ package at.tuwien.service.impl; import at.tuwien.api.semantics.EntityDto; +import at.tuwien.api.semantics.TableColumnEntityDto; +import at.tuwien.entities.database.table.Table; +import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.QueryMalformedException; +import at.tuwien.exception.*; import at.tuwien.mapper.OntologyMapper; import at.tuwien.repository.mdb.OntologyRepository; -import at.tuwien.service.QueryService; +import at.tuwien.repository.mdb.TableColumnRepository; +import at.tuwien.repository.mdb.TableRepository; +import at.tuwien.service.EntityService; +import at.tuwien.service.OntologyService; +import at.tuwien.service.TableService; import lombok.extern.log4j.Log4j2; import org.apache.jena.query.*; import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.riot.RiotException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Optional; @Log4j2 @Service -public class QueryServiceImpl implements QueryService { +public class EntityServiceImpl implements EntityService { private final Dataset dataset; private final OntologyMapper ontologyMapper; private final OntologyRepository ontologyRepository; + private final OntologyService ontologyService; + private final TableRepository tableRepository; + private final TableColumnRepository tableColumnRepository; @Autowired - public QueryServiceImpl(OntologyRepository ontologyRepository, OntologyMapper ontologyMapper) { + public EntityServiceImpl(OntologyRepository ontologyRepository, OntologyMapper ontologyMapper, + OntologyService ontologyService, TableRepository tableRepository, + TableColumnRepository tableColumnRepository) { this.ontologyMapper = ontologyMapper; this.ontologyRepository = ontologyRepository; this.dataset = DatasetFactory.create(); + this.ontologyService = ontologyService; + this.tableRepository = tableRepository; + this.tableColumnRepository = tableColumnRepository; } @Override @@ -88,4 +105,58 @@ public class QueryServiceImpl implements QueryService { } } + @Override + public EntityDto findOneByUri(Ontology ontology, String uri) throws QueryMalformedException, + SemanticEntityNotFoundException { + final List<EntityDto> results = findByUri(ontology, uri); + if (results.size() != 1) { + log.error("None or multiple entities found for uri {}", uri); + throw new SemanticEntityNotFoundException("None or multiple entities found for uri " + uri); + } + return results.get(0); + } + + @Override + @Transactional(readOnly = true) + public List<EntityDto> suggestTableSemantics(Long databaseId, Long tableId) throws TableNotFoundException, + QueryMalformedException { + final Optional<Table> table = tableRepository.findByDatabaseIdAndId(databaseId, tableId); + if(table.isEmpty()) { + throw new TableNotFoundException("Failed to find table with database id " + databaseId + " and id " + tableId); + } + final List<EntityDto> suggestions = new LinkedList<>(); + for (Ontology ontology : ontologyService.findAll()) { + suggestions.addAll(findByLabel(ontology, table.get().getName(), 3)); + } + log.debug("suggested {} semantic entities total", suggestions.size()); + return suggestions; + } + + @Override + @Transactional(readOnly = true) + public List<TableColumnEntityDto> suggestTableColumnSemantics(Long databaseId, Long tableId, Long columnId) + throws QueryMalformedException, TableColumnNotFoundException { + final Optional<TableColumn> optional = tableColumnRepository.findById(columnId); + if (optional.isEmpty()) { + log.error("Failed to find column with id {}", columnId); + throw new TableColumnNotFoundException("Failed to find column with id " + columnId); + } + final List<TableColumnEntityDto> suggestions = new LinkedList<>(); + for (Ontology ontology : ontologyService.findAll()) { + suggestions.addAll(findByLabel(ontology, optional.get().getName(), 3) + .stream() + .map(e -> TableColumnEntityDto.builder() + .databaseId(databaseId) + .tableId(tableId) + .columnId(optional.get().getId()) + .label(e.getLabel()) + .uri(e.getUri()) + .description(e.getDescription()) + .build()) + .toList()); + } + log.debug("suggested {} semantic entities total", suggestions.size()); + return suggestions; + } + } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java index 762d58c64c4f64f367e1ddb7e89bf99612c002e6..92e5ffc340f600ae6130973930acd6783bb6788e 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java @@ -1,26 +1,68 @@ package at.tuwien.service.impl; +import at.tuwien.ExportResource; +import at.tuwien.api.identifier.*; +import at.tuwien.config.EndpointConfig; +import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.LanguageType; +import at.tuwien.entities.database.View; import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.IdentifierNotFoundException; -import at.tuwien.repository.mdb.*; -import at.tuwien.service.IdentifierService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; +import at.tuwien.entities.identifier.IdentifierTitle; +import at.tuwien.entities.identifier.IdentifierType; +import at.tuwien.entities.user.User; +import at.tuwien.exception.*; +import at.tuwien.mapper.IdentifierMapper; +import at.tuwien.querystore.Query; +import at.tuwien.repository.mdb.IdentifierRepository; +import at.tuwien.repository.sdb.IdentifierIdxRepository; +import at.tuwien.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.context.Context; +import org.thymeleaf.exceptions.TemplateInputException; +import java.io.ByteArrayInputStream; +import java.nio.charset.Charset; +import java.security.Principal; import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Stream; -@Log4j2 +@Slf4j @Service public class IdentifierServiceImpl implements IdentifierService { + private final UserService userService; + private final ViewService viewService; + private final EndpointConfig endpointConfig; + private final TemplateEngine templateEngine; + private final DatabaseService databaseService; + private final IdentifierMapper identifierMapper; + private final QueryService queryService; + private final StoreService storeService; private final IdentifierRepository identifierRepository; + private final IdentifierIdxRepository identifierIdxRepository; - @Autowired - public IdentifierServiceImpl(IdentifierRepository identifierRepository) { + public IdentifierServiceImpl(UserService userService, ViewService viewService, EndpointConfig endpointConfig, + TemplateEngine templateEngine, DatabaseService databaseService, + IdentifierMapper identifierMapper, QueryService queryService, + StoreService storeService, IdentifierRepository identifierRepository, + IdentifierIdxRepository identifierIdxRepository) { + this.userService = userService; + this.viewService = viewService; + this.endpointConfig = endpointConfig; + this.templateEngine = templateEngine; + this.databaseService = databaseService; + this.identifierMapper = identifierMapper; + this.queryService = queryService; + this.storeService = storeService; this.identifierRepository = identifierRepository; + this.identifierIdxRepository = identifierIdxRepository; } @Override @@ -29,14 +71,308 @@ public class IdentifierServiceImpl implements IdentifierService { return identifierRepository.findAll(); } + @Override + public List<Identifier> findAll(Long databaseId) { + return identifierRepository.findByDatabaseId(databaseId); + } + @Override @Transactional(readOnly = true) - public Identifier find(Long id) throws IdentifierNotFoundException { - final Optional<Identifier> optional = identifierRepository.findById(id); + public Identifier find(Long identifierId) throws IdentifierNotFoundException { + final Optional<Identifier> optional = identifierRepository.findById(identifierId); if (optional.isEmpty()) { - log.error("Failed to find identifier with id {}", id); - throw new IdentifierNotFoundException("Failed to find identifier"); + log.error("Identifier with id {} not existing", identifierId); + throw new IdentifierNotFoundException("Unable to find identifier"); } return optional.get(); } + + @Override + @Transactional(readOnly = true) + public List<Identifier> findByDatabaseIdAndQueryId(Long databaseId, Long queryId) { + return identifierRepository.findByDatabaseIdAndQueryId(databaseId, queryId); + } + + @Override + public List<Identifier> findAllDatabaseIdentifiers() { + return identifierRepository.findAllDatabaseIdentifiers(); + } + + @Override + public List<Identifier> findAllSubsetIdentifiers() { + return identifierRepository.findAllSubsetIdentifiers(); + } + + @Override + @Transactional(readOnly = true) + public List<Identifier> findAll(IdentifierTypeDto type, Long databaseId, Long queryId, Long viewId) { + final List<Identifier> identifiers = this.identifierRepository.findAll(); + Stream<Identifier> stream = identifiers.stream(); + if (type != null) { + log.trace("filter by type: {}", type); + stream = stream.filter(i -> Objects.nonNull(i.getType())) + .filter(i -> i.getType().equals(identifierMapper.identifierTypeDtoToIdentifierType(type))); + } + if (databaseId != null) { + log.trace("filter by database id: {}", databaseId); + stream = stream.filter(i -> Objects.nonNull(i.getDatabaseId())) + .filter(i -> i.getDatabaseId().equals(databaseId)); + } + if (queryId != null) { + log.trace("filter by query id: {}", queryId); + stream = stream.filter(i -> Objects.nonNull(i.getQueryId())) + .filter(i -> i.getQueryId().equals(queryId)); + } + if (viewId != null) { + log.trace("filter by view id: {}", viewId); + stream = stream.filter(i -> Objects.nonNull(i.getViewId())) + .filter(i -> i.getViewId().equals(viewId)); + } + return stream.toList(); + } + + @Override + @Transactional + public Identifier create(IdentifierSaveDto data, Principal principal) + throws QueryNotFoundException, RemoteUnavailableException, IdentifierAlreadyExistsException, + UserNotFoundException, DatabaseNotFoundException, IdentifierPublishingNotAllowedException, + IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException, + ImageNotSupportedException { + /* check */ + if (data.getType().equals(IdentifierTypeDto.DATABASE) && identifierRepository.existsByDatabaseIdAndType(data.getDatabaseId(), IdentifierType.DATABASE)) { + log.error("Identifier already issued for database with id {}", data.getDatabaseId()); + throw new IdentifierAlreadyExistsException("Database identifier already exists"); + } else if (data.getType().equals(IdentifierTypeDto.SUBSET) && identifierRepository.existsByDatabaseIdAndQueryIdAndType(data.getDatabaseId(), data.getQueryId(), IdentifierType.SUBSET)) { + log.error("Identifier already issued for database with id {} and query with id {}", data.getDatabaseId(), data.getQueryId()); + throw new IdentifierAlreadyExistsException("Subset identifier already exists"); + } + /* create identifier */ + final Identifier identifier = identifierMapper.identifierCreateDtoToIdentifier(data); + final User creator = userService.findByUsername(principal.getName()); + identifier.setCreator(creator); + identifier.setDatabaseId(data.getDatabaseId()); + final Database database = databaseService.find(data.getDatabaseId()); + identifier.setDatabase(database); + if (data.getType().equals(IdentifierTypeDto.SUBSET)) { + log.debug("identifier type: subset"); + final Query query = storeService.findOne(data.getDatabaseId(), data.getQueryId(), principal); + identifier.setQuery(query.getQuery()); + identifier.setQueryId(query.getId()); + identifier.setQueryNormalized(query.getQueryNormalized()); + identifier.setQueryHash(query.getQueryHash()); + identifier.setExecution(query.getExecuted()); + identifier.setResultNumber(query.getResultNumber()); + identifier.setResultHash(query.getResultHash()); + } else if (data.getType().equals(IdentifierTypeDto.VIEW)) { + log.debug("identifier type: view"); + final View view = viewService.findById(data.getViewId()); + identifier.setViewId(view.getId()); + identifier.setQuery(view.getQuery()); + identifier.setQueryNormalized(view.getQuery()); + identifier.setQueryHash(view.getQueryHash()); + } + /* create in metadata database */ + final Identifier entity = saveIdentifier(identifier, data.getCreators(), data.getRelatedIdentifiers(), + data.getTitles(), data.getDescriptions(), data.getFunders()); + log.info("Created identifier with id {} in metadata database", entity.getId()); + /* create in open search database */ + identifierIdxRepository.save(identifierMapper.identifierToIdentifierDto(entity)); + log.info("Created identifier with id {} in open search database", entity.getId()); + return entity; + } + + @Override + @Transactional(readOnly = true) + public InputStreamResource exportMetadata(Long id) throws IdentifierNotFoundException { + /* check */ + final Identifier identifier = find(id); + /* context */ + final Context context = new Context(); + if (identifier.getDoi() != null) { + context.setVariable("identifierType", "DOI"); + context.setVariable("identifier", identifier.getDoi()); + } else { + context.setVariable("identifierType", "PID"); + context.setVariable("identifier", endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId()); + } + context.setVariable("language", identifier.getLanguage()); + context.setVariable("creators", identifier.getCreators()); + context.setVariable("titles", identifier.getTitles()); + context.setVariable("publisher", identifier.getPublisher()); + context.setVariable("publicationYear", identifier.getPublicationYear()); + context.setVariable("created", identifier.getCreated()); + context.setVariable("relatedIdentifiers", identifier.getRelatedIdentifiers()); + context.setVariable("funders", identifier.getFunders()); + context.setVariable("descriptions", identifier.getDescriptions()); + context.setVariable("licenses", identifier.getLicenses()); + /* map */ + final String body = templateEngine.process("doi.xml", context) + .replaceAll("\\s+", " "); + final InputStreamResource resource = new InputStreamResource(IOUtils.toInputStream(body, Charset.defaultCharset())); + log.debug("mapped file stream {}", resource.getDescription()); + return resource; + } + + @Override + @Transactional(readOnly = true) + public String exportBibliography(Long id, BibliographyTypeDto style) + throws IdentifierNotFoundException, IdentifierRequestException { + /* check */ + final Identifier identifier = find(id); + /* context */ + final Context context = new Context(); + if (identifier.getDoi() != null) { + context.setVariable("identifierType", "doi"); + context.setVariable("identifier", identifier.getDoi()); + } else { + context.setVariable("identifierType", "url"); + context.setVariable("identifier", endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId()); + } + context.setVariable("creator", identifier.getCreator()); + context.setVariable("creators", identifier.getCreators()); + context.setVariable("title", preferTitle(identifier.getTitles())); + context.setVariable("publisher", identifier.getPublisher()); + context.setVariable("publicationMonth", identifier.getPublicationMonth()); + context.setVariable("publicationYear", identifier.getPublicationYear()); + /* map */ + final String template = "cite_" + style.name().toLowerCase() + ".txt"; + final String body; + try { + body = templateEngine.process(template, context); + } catch (TemplateInputException e) { + log.error("Failed to load template: {}", e.getMessage()); + throw new IdentifierRequestException("Failed to load template", e); + } + log.trace("mapped bibliography {}", body); + return body; + } + + @Override + @Transactional(readOnly = true) + public InputStreamResource exportResource(Long identifierId, Principal principal) throws IdentifierNotFoundException, + QueryNotFoundException, IdentifierRequestException, UserNotFoundException, + QueryStoreException, TableMalformedException, DatabaseConnectionException, QueryMalformedException, + DatabaseNotFoundException, ImageNotSupportedException, FileStorageException { + /* check */ + final Identifier identifier = find(identifierId); + if (identifier.getType().equals(IdentifierType.DATABASE)) { + log.error("Failed to find identifier with id {} as it refers to a database and not a query", identifierId); + throw new IdentifierRequestException("Failed to find identifier"); + } + /* subset */ + ExportResource exportResource = queryService.findOne(identifier.getDatabase().getId(), identifier.getQueryId(), null); + final InputStreamResource resource = exportResource.getResource(); + log.trace("found resource {}", resource); + return resource; + } + + @Override + @Transactional + public Identifier update(Long identifierId, IdentifierSaveDto data, Principal principal) + throws UserNotFoundException, DatabaseNotFoundException, QueryNotFoundException, RemoteUnavailableException, + IdentifierNotFoundException, QueryStoreException, DatabaseConnectionException, ImageNotSupportedException { + /* find doi */ + final Identifier oldIdentifier = find(identifierId); + /* create identifier */ + final Identifier identifier = identifierMapper.identifierUpdateDtoToIdentifier(data); + identifier.setId(identifierId); + identifier.setDoi(oldIdentifier.getDoi()); + final User creator = userService.findByUsername(principal.getName()); + identifier.setCreator(creator); + final Database database = databaseService.find(data.getDatabaseId()); + identifier.setDatabase(database); + if (data.getType().equals(IdentifierTypeDto.SUBSET)) { + log.debug("identifier describes a subset"); + final IdentifierSaveDto payload = identifierMapper.identifierUpdateDtoToIdentifierCreateDto(data); + final Query query = storeService.findOne(data.getDatabaseId(), payload.getQueryId(), principal); + identifier.setQuery(query.getQuery()); + identifier.setQueryId(query.getId()); + identifier.setQueryNormalized(query.getQueryNormalized()); + identifier.setQueryHash(query.getQueryHash()); + identifier.setExecution(query.getExecuted()); + identifier.setResultNumber(query.getResultNumber()); + identifier.setResultHash(query.getResultHash()); + } + /* update in metadata database */ + final Identifier entity = saveIdentifier(identifier, data.getCreators(), data.getRelatedIdentifiers(), + data.getTitles(), data.getDescriptions(), data.getFunders()); + log.info("Updated identifier with id {} in metadata database", identifierId); + /* update in open search database */ + identifierIdxRepository.save(identifierMapper.identifierToIdentifierDto(entity)); + log.info("Updated identifier with id {} in open search database", identifierId); + return entity; + } + + @Override + @Transactional + public void delete(Long identifierId) throws IdentifierNotFoundException { + /* delete in metadata database */ + if (!identifierRepository.existsById(identifierId)) { + log.error("Failed to find identifier with id {} in metadata database", identifierId); + throw new IdentifierNotFoundException("Failed to find identifier with id " + identifierId + " in metadata database"); + } + identifierRepository.deleteById(identifierId); + log.info("Deleted identifier with id {} in metadata database", identifierId); + /* delete in elastic search */ + if (!identifierIdxRepository.existsById(identifierId)) { + log.error("Failed to find identifier with id {} in open search database", identifierId); + throw new IdentifierNotFoundException("Failed to find identifier with id " + identifierId + " in open search database"); + } + identifierIdxRepository.deleteById(identifierId); + log.info("Deleted identifier with id {} in open search database", identifierId); + } + + public IdentifierTitle preferTitle(List<IdentifierTitle> titles) { + final Optional<IdentifierTitle> optional = titles.stream() + .filter(t -> Objects.nonNull(t.getLanguage())) + .filter(t -> t.getLanguage().equals(LanguageType.EN)) + .findFirst(); + return optional.orElseGet(() -> titles.get(0)); + } + + public Identifier saveIdentifier(Identifier identifier, List<CreatorSaveDto> creators, + List<RelatedIdentifierSaveDto> relatedIdentifiers, + List<IdentifierSaveTitleDto> titles, + List<IdentifierSaveDescriptionDto> descriptions, + List<IdentifierFunderSaveDto> funders) { + /* create in metadata database */ + if (creators != null) { + identifier.setCreators(creators.stream() + .map(identifierMapper::creatorCreateDtoToCreator) + .peek(c -> c.setIdentifier(identifier)) + .toList()); + log.debug("set {} creator(s)", identifier.getCreators().size()); + } + if (relatedIdentifiers != null) { + identifier.setRelatedIdentifiers(relatedIdentifiers.stream() + .map(identifierMapper::relatedIdentifierCreateDtoToRelatedIdentifier) + .peek(r -> r.setIdentifier(identifier)) + .toList()); + log.debug("set {} related identifier(s)", identifier.getRelatedIdentifiers().size()); + } + if (titles != null) { + identifier.setTitles(null); + identifier.setTitles(titles.stream() + .map(identifierMapper::identifierCreateTitleDtoToIdentifierTitle) + .peek(t -> t.setIdentifier(identifier)) + .toList()); + log.debug("set {} title(s)", identifier.getTitles().size()); + } + if (descriptions != null) { + identifier.setDescriptions(descriptions.stream() + .map(identifierMapper::identifierCreateDescriptionDtoToIdentifierDescription) + .peek(d -> d.setIdentifier(identifier)) + .toList()); + log.debug("set {} description(s)", identifier.getDescriptions().size()); + } + if (funders != null) { + identifier.setFunders(funders.stream() + .map(identifierMapper::identifierFunderSaveDtoToIdentifierFunder) + .peek(d -> d.setIdentifier(identifier)) + .toList()); + log.debug("set {} funder(s)", identifier.getFunders().size()); + } + return identifierRepository.save(identifier); + } + } diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java similarity index 100% rename from dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java similarity index 95% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index 43f461eb3c2fc5e976742ad68855a7e003883350..488f082711602a8e08a6140d5f03846153865918 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -8,8 +8,8 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.sdb.DatabaseIdxRepository; import at.tuwien.service.ContainerService; import at.tuwien.service.DatabaseService; import at.tuwien.service.UserService; @@ -53,6 +53,16 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe return databaseRepository.findAll(); } + @Override + public Database find(Long databaseId) throws DatabaseNotFoundException { + final Optional<Database> database = databaseRepository.findByDatabaseId(databaseId); + if (database.isEmpty()) { + log.error("Failed to find database with id {}", databaseId); + throw new DatabaseNotFoundException("could not find database with this id"); + } + return database.get(); + } + @Override @Transactional(readOnly = true) public Database findPublicOrMineById(Long databaseId, UUID userId) throws DatabaseNotFoundException { diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java index 13f80113f4bbf276fd2411bcaa2cd285079469c0..2a53470206c1d43ab5acb3c2334dee243a06a35f 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java @@ -1,15 +1,23 @@ package at.tuwien.service.impl; -import at.tuwien.oaipmh.OaiErrorType; -import at.tuwien.oaipmh.OaiListIdentifiersParameters; -import at.tuwien.oaipmh.OaiRecordParameters; +import at.tuwien.api.crossref.CrossrefDto; +import at.tuwien.api.orcid.OrcidDto; +import at.tuwien.api.ror.RorDto; +import at.tuwien.api.user.external.ExternalMetadataDto; import at.tuwien.config.MetadataConfig; import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.exception.*; +import at.tuwien.gateway.CrossrefGateway; +import at.tuwien.gateway.OrcidGateway; +import at.tuwien.gateway.RorGateway; +import at.tuwien.mapper.ExternalMapper; import at.tuwien.mapper.MetadataMapper; +import at.tuwien.oaipmh.OaiErrorType; +import at.tuwien.oaipmh.OaiListIdentifiersParameters; +import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.service.IdentifierService; import at.tuwien.service.MetadataService; -import lombok.extern.log4j.Log4j2; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -20,7 +28,7 @@ import org.thymeleaf.context.Context; import java.time.Instant; import java.util.List; -@Log4j2 +@Slf4j @Service public class MetadataServiceImpl implements MetadataService { @@ -28,14 +36,24 @@ public class MetadataServiceImpl implements MetadataService { private final TemplateEngine templateEngine; private final MetadataMapper metadataMapper; private final IdentifierService identifierService; + private final RorGateway rorGateway; + private final OrcidGateway orcidGateway; + private final ExternalMapper externalMapper; + private final CrossrefGateway crossrefGateway; @Autowired public MetadataServiceImpl(MetadataConfig metadataConfig, TemplateEngine templateEngine, - MetadataMapper metadataMapper, IdentifierService identifierService) { + MetadataMapper metadataMapper, IdentifierService identifierService, + RorGateway rorGateway, OrcidGateway orcidGateway, ExternalMapper externalMapper, + CrossrefGateway crossrefGateway) { this.metadataConfig = metadataConfig; this.templateEngine = templateEngine; this.metadataMapper = metadataMapper; this.identifierService = identifierService; + this.rorGateway = rorGateway; + this.orcidGateway = orcidGateway; + this.externalMapper = externalMapper; + this.crossrefGateway = crossrefGateway; } @Override @@ -125,4 +143,33 @@ public class MetadataServiceImpl implements MetadataService { return templateEngine.process("_header.xml", context); } + @Override + public ExternalMetadataDto findByUrl(String url) throws OrcidNotFoundException, RorNotFoundException, + RemoteUnavailableException, DoiNotFoundException { + if (url.contains("orcid.org")) { + final OrcidDto orcidDto = orcidGateway.findByUrl(url); + return externalMapper.orcidDtoToExternalMetadataDto(orcidDto); + } else if (url.contains("ror.org")) { + final int idx = url.lastIndexOf('/'); + if (idx + 1 >= url.length()) { + log.error("Failed to find metadata from ROR URL: too short"); + throw new RorNotFoundException("Failed to find metadata from ROR URL: too short"); + } + final String id = url.substring(idx + 1); + final RorDto rorDto = rorGateway.findById(id); + return externalMapper.rorDtoToExternalMetadataDto(rorDto); + } else if (url.contains("doi.org")) { + final int idx = url.indexOf("doi.org/"); + if (idx + 1 >= url.length()) { + log.error("Failed to find metadata from CrossRef URL: too short"); + throw new RorNotFoundException("Failed to find metadata from CrossRef URL: too short"); + } + final String id = url.substring(idx + 8); + final CrossrefDto crossrefDto = crossrefGateway.findById(id); + return externalMapper.crossrefDtoToExternalMetadataDto(crossrefDto); + } + log.error("Failed to find metadata: unsupported identifier {}", url); + throw new RemoteUnavailableException("Failed to find metadata: unsupported identifier " + url); + } + } diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java similarity index 100% rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java similarity index 99% rename from dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java index 61421fff1415d0b9ca435d79e417193fae4788ba..aba3e4ac81a4e402f8af96030f5c1187d34b0609 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java @@ -44,7 +44,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.time.Instant; import java.time.format.DateTimeParseException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Log4j2 diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java similarity index 100% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java similarity index 53% rename from dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java index 8900989ca2330f6e3f286fa00d61628710e90c34..9780d4d8caffda4bf49dbf7a3a64383b6a07a9c9 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java @@ -1,8 +1,11 @@ package at.tuwien.service.impl; +import at.tuwien.amqp.RabbitMqConsumer; +import at.tuwien.api.amqp.ConsumerDto; import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; import at.tuwien.config.AmqpConfig; import at.tuwien.entities.database.Database; +import at.tuwien.entities.database.table.Table; import at.tuwien.entities.user.User; import at.tuwien.exception.AmqpException; import at.tuwien.exception.BrokerVirtualHostCreationException; @@ -10,9 +13,14 @@ import at.tuwien.exception.BrokerVirtualHostGrantException; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.mapper.AmqpMapper; import at.tuwien.repository.mdb.DatabaseRepository; +import at.tuwien.repository.mdb.TableRepository; import at.tuwien.service.MessageQueueService; +import at.tuwien.service.QueryService; +import at.tuwien.service.TableService; +import com.fasterxml.jackson.databind.ObjectMapper; import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; import org.springframework.beans.factory.annotation.Autowired; @@ -24,25 +32,33 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.security.Principal; import java.util.List; -import java.util.UUID; @Log4j2 @Service public class RabbitMqServiceImpl implements MessageQueueService { - private final Channel channel; + private Channel channel; private final AmqpConfig amqpConfig; private final AmqpMapper amqpMapper; private final DatabaseRepository databaseRepository; + private final TableRepository tableRepository; + private final ObjectMapper objectMapper; + private final QueryService queryService; + private final TableService tableService; private final BrokerServiceGateway brokerServiceGateway; @Autowired public RabbitMqServiceImpl(Channel channel, AmqpConfig amqpConfig, AmqpMapper amqpMapper, - DatabaseRepository databaseRepository, BrokerServiceGateway brokerServiceGateway) { + DatabaseRepository databaseRepository, TableRepository tableRepository, ObjectMapper objectMapper, + QueryService queryService, TableService tableService, BrokerServiceGateway brokerServiceGateway) { this.channel = channel; this.amqpConfig = amqpConfig; this.amqpMapper = amqpMapper; this.databaseRepository = databaseRepository; + this.tableRepository = tableRepository; + this.objectMapper = objectMapper; + this.queryService = queryService; + this.tableService = tableService; this.brokerServiceGateway = brokerServiceGateway; } @@ -51,10 +67,14 @@ public class RabbitMqServiceImpl implements MessageQueueService { @Transactional(readOnly = true) public void init() throws AmqpException { final List<Database> databases = databaseRepository.findAll(); - final Principal principal = new BasicUserPrincipal(amqpConfig.getAmpqUsername()); + final Principal principal = new BasicUserPrincipal(amqpConfig.getAmqpUsername()); for (Database database : databases) { createExchange(database, principal); } + final List<Table> tables = tableRepository.findAll(); + for (Table table : tables) { + create(table); + } } @Override @@ -68,6 +88,19 @@ public class RabbitMqServiceImpl implements MessageQueueService { } } + @Override + @Transactional(readOnly = true) + public void create(Table table) throws AmqpException { + try { + channel.queueDeclare(table.getQueueName(), true, false, false, null); + channel.queueBind(table.getQueueName(), table.getDatabase().getExchangeName(), table.getRoutingKey()); + } catch (IOException e) { + log.error("Failed to create queue and bind for table with id {}", table.getId()); + throw new AmqpException("Failed to create", e); + } + log.info("Created queue for table with id {}", table.getId()); + } + @Override public void createUser(User user) throws BrokerVirtualHostCreationException { brokerServiceGateway.createUser(user.getUsername()); @@ -95,4 +128,39 @@ public class RabbitMqServiceImpl implements MessageQueueService { } } + @Override + public void createConsumer(String queueName, Long databaseId, Long tableId) throws AmqpException { + try { + if (!this.channel.isOpen()) { + log.warn("Channel with id {} is closed", this.channel.getChannelNumber()); + final Connection tmp = this.amqpConfig.connectionFactory().newConnection(); + this.channel = tmp.createChannel(); + log.info("Opened channel with id {}", this.channel.getChannelNumber()); + } + final String consumerTag = this.channel.basicConsume(queueName, true, new RabbitMqConsumer(databaseId, tableId, objectMapper, queryService)); + log.debug("declared consumer for queue name {} with tag {}", queueName, consumerTag); + } catch (IOException e) { + log.error("Failed to create consumer for table with id {}, reason: {}", tableId, e.getMessage()); + throw new AmqpException("Failed to create consumer", e); + } catch (Exception e) { + log.error("Failed unknown: {}", e.getMessage()); + /* ignore */ + } + } + + @Override + public void restore() throws AmqpException { + final List<Table> tables = tableService.findAll(); + final List<ConsumerDto> consumers = brokerServiceGateway.findAllConsumers(); + for (Table table : tables) { + final long consumerCount = consumers.stream().filter(c -> c.getQueue().getName().equals(table.getQueueName())).count(); + if (consumerCount >= amqpConfig.getAmqpConsumers()) { + continue; + } + for (long i = consumerCount; i < amqpConfig.getAmqpConsumers(); i++) { + createConsumer(table.getQueueName(), table.getDatabase().getId(), table.getId()); + } + } + } + } diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java similarity index 57% rename from dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java index a4c028b1d7da50dd76c4bbc799638012146084ec..3841509198c3d4aa4590d635a0bf7281d8d8e238 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java @@ -1,22 +1,25 @@ package at.tuwien.service.impl; +import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; +import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; import at.tuwien.entities.database.table.columns.TableColumnConcept; import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.entities.semantics.Ontology; import at.tuwien.exception.ConceptNotFoundException; +import at.tuwien.exception.QueryMalformedException; import at.tuwien.exception.SemanticEntityNotFoundException; import at.tuwien.exception.UnitNotFoundException; -import at.tuwien.gateway.SemanticServiceGateway; +import at.tuwien.mapper.OntologyMapper; import at.tuwien.mapper.TableMapper; -import at.tuwien.repository.mdb.ConceptRepository; -import at.tuwien.repository.mdb.OntologyRepository; -import at.tuwien.repository.mdb.UnitRepository; +import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.ConceptIdxRepository; import at.tuwien.repository.sdb.UnitIdxRepository; +import at.tuwien.service.EntityService; import at.tuwien.service.SemanticService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; @@ -26,25 +29,70 @@ import java.util.Optional; public class SemanticServiceImpl implements SemanticService { private final TableMapper tableMapper; + private final OntologyMapper ontologyMapper; + private final UnitIdxRepository unitIdxRepository; + private final ConceptIdxRepository conceptIdxRepository; private final UnitRepository unitRepository; private final ConceptRepository conceptRepository; - private final UnitIdxRepository unitIdxRepository; private final OntologyRepository ontologyRepository; - private final ConceptIdxRepository conceptIdxRepository; - private final SemanticServiceGateway semanticServiceGateway; + private final TableColumnUnitRepository tableColumnUnitRepository; + private final TableColumnConceptRepository tableColumnConceptRepository; + private final EntityService entityService; @Autowired public SemanticServiceImpl(TableMapper tableMapper, UnitRepository unitRepository, - ConceptRepository conceptRepository, UnitIdxRepository unitIdxRepository, - OntologyRepository ontologyRepository, ConceptIdxRepository conceptIdxRepository, - SemanticServiceGateway semanticServiceGateway) { + ConceptRepository conceptRepository, OntologyRepository ontologyRepository, + EntityService entityService, TableColumnConceptRepository tableColumnConceptRepository, + TableColumnUnitRepository tableColumnUnitRepository, OntologyMapper ontologyMapper, + UnitIdxRepository unitIdxRepository, ConceptIdxRepository conceptIdxRepository) { this.tableMapper = tableMapper; - this.unitRepository = unitRepository; - this.conceptRepository = conceptRepository; + this.ontologyMapper = ontologyMapper; this.unitIdxRepository = unitIdxRepository; - this.ontologyRepository = ontologyRepository; this.conceptIdxRepository = conceptIdxRepository; - this.semanticServiceGateway = semanticServiceGateway; + this.unitRepository = unitRepository; + this.ontologyRepository = ontologyRepository; + this.conceptRepository = conceptRepository; + this.tableColumnUnitRepository = tableColumnUnitRepository; + this.tableColumnConceptRepository = tableColumnConceptRepository; + this.entityService = entityService; + } + + @Override + @Transactional(readOnly = true) + public List<TableColumnConcept> findAllConcepts() { + return tableColumnConceptRepository.findAll(); + } + + @Override + @Transactional(readOnly = true) + public List<TableColumnUnit> findAllUnits() { + return tableColumnUnitRepository.findAll(); + } + + @Override + @Transactional + public TableColumnConcept saveConcept(ConceptSaveDto data) { + final TableColumnConcept entity = ontologyMapper.conceptSaveDtoToTableColumnConcept(data); + /* save in metadata database */ + final TableColumnConcept concept = tableColumnConceptRepository.save(entity); + log.info("Saved concept with id {} in metadata database", concept.getId()); + /* save in open search database */ + conceptIdxRepository.save(ontologyMapper.tableColumnConceptToConceptDto(concept)); + log.info("Saved concept with id {} in open search database", concept.getId()); + return concept; + } + + @Override + @Transactional + public TableColumnUnit saveUnit(UnitSaveDto data) { + final TableColumnUnit entity = ontologyMapper.unitSaveDtoToTableColumnUnit(data); + /* save in metadata database */ + final TableColumnUnit unit = tableColumnUnitRepository.save(entity); + log.info("Saved unit with id {} in metadata database", unit.getId()); + /* save in open search database */ + unitIdxRepository.save(ontologyMapper.tableColumnUnitToUnitDto(unit)); + log.info("Saved unit with id {} in open search database", unit.getId()); + return unit; } @Override @@ -68,7 +116,7 @@ public class SemanticServiceImpl implements SemanticService { } @Override - public TableColumnConcept saveConcept(String uri, String authorization) throws SemanticEntityNotFoundException { + public TableColumnConcept saveConcept(String uri) throws QueryMalformedException, SemanticEntityNotFoundException { /* check compatible ontologies */ final Ontology ontology = getCompatibleOntology(uri); if (ontology == null) { @@ -77,7 +125,8 @@ public class SemanticServiceImpl implements SemanticService { .build(); } /* save in metadata database */ - final TableColumnConcept concept = tableMapper.entityDtoToTableColumnConcept(semanticServiceGateway.getEntity(ontology.getId(), uri, authorization)); + final TableColumnConcept concept = tableMapper.entityDtoToTableColumnConcept( + entityService.findOneByUri(ontology, uri)); log.info("Saved concept with uri {} in metadata database", concept.getUri()); /* save in open search database */ conceptIdxRepository.save(tableMapper.tableColumnConceptToConceptDto(concept)); @@ -86,7 +135,7 @@ public class SemanticServiceImpl implements SemanticService { } @Override - public TableColumnUnit saveUnit(String uri, String authorization) throws SemanticEntityNotFoundException { + public TableColumnUnit saveUnit(String uri) throws SemanticEntityNotFoundException, QueryMalformedException { final Ontology ontology = getCompatibleOntology(uri); if (ontology == null) { return TableColumnUnit.builder() @@ -94,7 +143,7 @@ public class SemanticServiceImpl implements SemanticService { .build(); } /* save in metadata database */ - final TableColumnUnit unit = tableMapper.entityDtoToTableColumnUnit(semanticServiceGateway.getEntity(ontology.getId(), uri, authorization)); + final TableColumnUnit unit = tableMapper.entityDtoToTableColumnUnit(entityService.findOneByUri(ontology, uri)); log.info("Saved unit with uri {} in metadata database", unit.getUri()); /* save in open search database */ unitIdxRepository.save(tableMapper.tableColumnUnitToUnitDto(unit)); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java similarity index 99% rename from dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java index 7aa15539eef404ceafdebc05e8dd6695663972a8..11aebdf429250708b88bc20bde9c422d3e14552d 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java @@ -18,7 +18,6 @@ import org.springframework.transaction.annotation.Transactional; import java.security.Principal; import java.sql.*; -import java.time.Instant; import java.util.LinkedList; import java.util.List; diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java similarity index 83% rename from dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java index 147f9ba0a080a245e9119c008d57f0ef1a842bf2..48d1d4925ff1dde041899401cc93afac03ee6f07 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java @@ -2,20 +2,24 @@ package at.tuwien.service.impl; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.TableCreateRawQuery; +import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.user.User; import at.tuwien.exception.*; +import at.tuwien.mapper.QueryMapper; import at.tuwien.mapper.TableMapper; import at.tuwien.repository.mdb.TableColumnRepository; import at.tuwien.repository.mdb.TableRepository; import at.tuwien.repository.sdb.TableColumnIdxRepository; import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.service.*; +import at.tuwien.service.DatabaseService; +import at.tuwien.service.SemanticService; +import at.tuwien.service.TableService; +import at.tuwien.service.UserService; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; import java.security.Principal; import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Optional; @@ -34,6 +39,7 @@ import java.util.Optional; public class TableServiceImpl extends HibernateConnector implements TableService { private final TableMapper tableMapper; + private final QueryMapper queryMapper; private final UserService userService; private final DatabaseService databaseService; private final SemanticService semanticService; @@ -43,11 +49,12 @@ public class TableServiceImpl extends HibernateConnector implements TableService private final TableColumnIdxRepository tableColumnIdxRepository; @Autowired - public TableServiceImpl(TableMapper tableMapper, UserService userService, SemanticService semanticService, - TableRepository tableRepository, DatabaseService databaseService, + public TableServiceImpl(TableMapper tableMapper, QueryMapper queryMapper, UserService userService, + SemanticService semanticService, TableRepository tableRepository, DatabaseService databaseService, TableIdxRepository tableIdxRepository, TableColumnRepository tableColumnRepository, TableColumnIdxRepository tableColumnIdxRepository) { this.tableMapper = tableMapper; + this.queryMapper = queryMapper; this.userService = userService; this.semanticService = semanticService; this.tableRepository = tableRepository; @@ -57,6 +64,47 @@ public class TableServiceImpl extends HibernateConnector implements TableService this.tableColumnIdxRepository = tableColumnIdxRepository; } + @Override + @Transactional(readOnly = true) + public Table find(Long databaseId, Long tableId) throws DatabaseNotFoundException, TableNotFoundException { + final Optional<Table> table = tableRepository.find(databaseId, tableId); + if (table.isEmpty()) { + log.error("Failed to find table with id {} in database with id {}", tableId, databaseId); + throw new TableNotFoundException("Failed to find table with id " + tableId + " in database with id " + databaseId); + } + return table.get(); + } + + @Override + @Transactional(readOnly = true) + public List<Table> findAll() { + return tableRepository.findAll(); + } + + @Override + @Transactional(readOnly = true) + public List<TableHistoryDto> findHistory(Long databaseId, Long tableId, Principal principal) + throws DatabaseNotFoundException, TableNotFoundException, QueryStoreException, QueryMalformedException { + /* find */ + final Database database = databaseService.find(databaseId); + final Table table = find(databaseId, tableId); + /* run query */ + final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), + database.getContainer(), database); + /* use jpa to select one */ + try { + final Connection connection = dataSource.getConnection(); + final PreparedStatement preparedStatement = queryMapper.historyRawQuery(connection, table); + final ResultSet resultSet = preparedStatement.executeQuery(); + return queryMapper.resultListToTableHistoryDto(resultSet); + } catch (SQLException e) { + log.error("Failed to map table history: {}", e.getMessage()); + throw new QueryStoreException("Failed to map table history: " + e.getMessage(), e); + } finally { + dataSource.close(); + } + } + @Override @Transactional(readOnly = true) public List<Table> findAll(Long databaseId) throws DatabaseNotFoundException { @@ -215,7 +263,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService public TableColumn update(Long databaseId, Long tableId, Long columnId, ColumnSemanticsUpdateDto updateDto, String authorization) throws TableNotFoundException, DatabaseNotFoundException, TableMalformedException, - SemanticEntityNotFoundException { + SemanticEntityNotFoundException, QueryMalformedException { final Table table = findById(databaseId, tableId); final TableColumn column = findColumn(table, columnId); /* assign */ @@ -224,7 +272,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService column.setUnit(semanticService.findUnit(updateDto.getUnitUri())); } catch (UnitNotFoundException e) { log.warn("Unit with uri {} not found in metadata database", updateDto.getUnitUri()); - column.setUnit(semanticService.saveUnit(updateDto.getUnitUri(), authorization)); + column.setUnit(semanticService.saveUnit(updateDto.getUnitUri())); } } else { column.setUnit(null); @@ -235,7 +283,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService column.setConcept(semanticService.findConcept(updateDto.getConceptUri())); } catch (ConceptNotFoundException e) { log.warn("Concept with uri {} not found in metadata database", updateDto.getConceptUri()); - column.setConcept(semanticService.saveConcept(updateDto.getConceptUri(), authorization)); + column.setConcept(semanticService.saveConcept(updateDto.getConceptUri())); } } else { column.setConcept(null); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java similarity index 100% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java similarity index 92% rename from dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java index a1f26d1e540cc6e1720e12a72e4f41899357fea7..a461c20e0d635bcca24bd1b91206c1857a03a1f8 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java @@ -5,9 +5,15 @@ import at.tuwien.api.user.UserPasswordDto; import at.tuwien.api.user.UserThemeSetDto; import at.tuwien.api.user.UserUpdateDto; import at.tuwien.entities.user.*; -import at.tuwien.exception.*; +import at.tuwien.exception.UserAlreadyExistsException; +import at.tuwien.exception.UserAttributeNotFoundException; +import at.tuwien.exception.UserEmailAlreadyExistsException; +import at.tuwien.exception.UserNotFoundException; import at.tuwien.mapper.UserMapper; -import at.tuwien.repository.mdb.*; +import at.tuwien.repository.mdb.CredentialRepository; +import at.tuwien.repository.mdb.GroupRepository; +import at.tuwien.repository.mdb.RoleRepository; +import at.tuwien.repository.mdb.UserRepository; import at.tuwien.repository.sdb.UserIdxRepository; import at.tuwien.service.UserAttributeService; import at.tuwien.service.UserService; @@ -67,6 +73,27 @@ public class UserServiceImpl implements UserService { return userRepository.findAll(); } + @Override + public User findByUsername(String username) throws UserNotFoundException { + final Optional<User> optional = userRepository.findByUsername(username); + if (optional.isEmpty()) { + log.error("Failed to retrieve user with username {}", username); + throw new UserNotFoundException("Failed to retrieve user"); + } + return optional.get(); + } + + @Override + @Transactional(readOnly = true) + public User find(UUID id) throws UserNotFoundException { + final Optional<User> optional = userRepository.findById(id); + if (optional.isEmpty()) { + log.error("Failed to retrieve user with id {}", id); + throw new UserNotFoundException("Failed to retrieve user"); + } + return optional.get(); + } + @Override @Transactional(rollbackFor = RuntimeException.class) public User create(SignupRequestDto data, Realm realm) throws UserAlreadyExistsException { @@ -178,17 +205,6 @@ public class UserServiceImpl implements UserService { return user; } - @Override - @Transactional(readOnly = true) - public User find(UUID id) throws UserNotFoundException { - final Optional<User> optional = userRepository.findById(id); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with id {}", id); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - @Override @Transactional(readOnly = true) public void validateUsernameNotExists(String username) throws UserAlreadyExistsException { diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java similarity index 95% rename from dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java index 6a8402c72143b6e23fce89592879115f94833849..ad27bf692b0d3c0095e0b963b2aa0a716a10e707 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java @@ -7,8 +7,8 @@ import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.ViewMapper; -import at.tuwien.repository.sdb.ViewIdxRepository; import at.tuwien.repository.mdb.ViewRepository; +import at.tuwien.repository.sdb.ViewIdxRepository; import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; import at.tuwien.service.UserService; @@ -51,6 +51,16 @@ public class ViewServiceImpl extends HibernateConnector implements ViewService { this.queryService = queryService; } + @Override + public View findById(Long id) throws ViewNotFoundException { + final Optional<View> optional = viewRepository.findById(id); + if (optional.isEmpty()) { + log.error("Failed to find view with id: {}", id); + throw new ViewNotFoundException("Failed to find view with id: " + id); + } + return optional.get(); + } + @Override @Transactional(readOnly = true) public List<View> findAll(Long databaseId, Principal principal) throws UserNotFoundException { diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/utils/FileUtil.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/utils/FileUtil.java similarity index 90% rename from dbrepo-database-service/services/src/main/java/at/tuwien/utils/FileUtil.java rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/utils/FileUtil.java index 54831e79e633470b4d29e2350f13f314696e8404..6e8b749c5f0a4a6d2720b003d2e5561584f4e9fe 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/utils/FileUtil.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/utils/FileUtil.java @@ -2,7 +2,10 @@ package at.tuwien.utils; import lombok.extern.log4j.Log4j2; -import java.io.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; diff --git a/dbrepo-metadata-db/test/pom.xml b/dbrepo-metadata-service/test/pom.xml similarity index 70% rename from dbrepo-metadata-db/test/pom.xml rename to dbrepo-metadata-service/test/pom.xml index 86e3a3e778d2a6d0343211ca16c35c3fe31f0f79..91e81274874fdc3b17700e31d53d905a841b2c6a 100644 --- a/dbrepo-metadata-db/test/pom.xml +++ b/dbrepo-metadata-service/test/pom.xml @@ -5,28 +5,28 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db</artifactId> + <artifactId>dbrepo-metadata-service</artifactId> <version>1.3.0</version> </parent> - <artifactId>dbrepo-metadata-db-test</artifactId> + <artifactId>dbrepo-metadata-service-test</artifactId> <version>1.3.0</version> - <name>dbrepo-metadata-db-test</name> + <name>dbrepo-metadata-service-test</name> <dependencies> <dependency> <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> + <artifactId>dbrepo-metadata-service-entities</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> + <artifactId>dbrepo-metadata-service-api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-querystore</artifactId> + <artifactId>dbrepo-metadata-service-querystore</artifactId> <version>${project.version}</version> </dependency> </dependencies> diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java similarity index 99% rename from dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java rename to dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java index a2098cea6146d95d75aaa9dfb18c8b140557e14e..d92383be87c0dd0e5bdc3fb64dbf2b101a060374 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java @@ -17,7 +17,9 @@ import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCreateDto; import at.tuwien.api.database.table.TableCsvDto; import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.*; +import at.tuwien.api.database.table.columns.ColumnCreateDto; +import at.tuwien.api.database.table.columns.ColumnDto; +import at.tuwien.api.database.table.columns.ColumnTypeDto; import at.tuwien.api.database.table.columns.concepts.*; import at.tuwien.api.database.table.constraints.ConstraintsCreateDto; import at.tuwien.api.database.table.constraints.ConstraintsDto; @@ -35,7 +37,10 @@ import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.*; import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.*; +import at.tuwien.entities.database.table.columns.TableColumn; +import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.tuwien.entities.database.table.columns.TableColumnType; +import at.tuwien.entities.database.table.columns.TableColumnUnit; import at.tuwien.entities.database.table.constraints.Constraints; import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference; @@ -49,7 +54,7 @@ import at.tuwien.entities.user.Role; import at.tuwien.entities.user.User; import at.tuwien.entities.user.UserAttribute; import at.tuwien.querystore.Query; -import at.tuwien.utils.ArrayUtil; +import at.tuwien.test.utils.ArrayUtil; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -6121,7 +6126,7 @@ public abstract class BaseTest { .titles(List.of(IDENTIFIER_1_TITLE_1, IDENTIFIER_1_TITLE_2)) .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1)) .doi(IDENTIFIER_1_DOI) - .database(DATABASE_1) + .database(DATABASE_1_SIMPLE) .created(IDENTIFIER_1_CREATED) .lastModified(IDENTIFIER_1_MODIFIED) .execution(IDENTIFIER_1_EXECUTION) @@ -6175,7 +6180,7 @@ public abstract class BaseTest { .descriptions(List.of(IDENTIFIER_1_DESCRIPTION_1)) .titles(List.of(IDENTIFIER_1_TITLE_1, IDENTIFIER_1_TITLE_2)) .doi(IDENTIFIER_1_DOI_NOT_NULL) - .database(DATABASE_1) + .database(null /* for jpa */) .created(IDENTIFIER_1_CREATED) .lastModified(IDENTIFIER_1_MODIFIED) .execution(IDENTIFIER_1_EXECUTION) @@ -7091,7 +7096,7 @@ public abstract class BaseTest { .descriptions(List.of() /* for jpa */) .titles(List.of() /* for jpa */) .doi(IDENTIFIER_5_DOI) - .database(DATABASE_1) + .database(null /* for jpa */) .created(IDENTIFIER_5_CREATED) .lastModified(IDENTIFIER_5_MODIFIED) .execution(IDENTIFIER_5_EXECUTION) @@ -7149,6 +7154,7 @@ public abstract class BaseTest { .type(IDENTIFIER_5_TYPE_DTO) .visibility(IDENTIFIER_5_VISIBILITY_DTO) .licenses(List.of(LICENSE_1_DTO)) + .queryId(QUERY_1_ID) .build(); public final static Long IDENTIFIER_6_ID = 6L; @@ -7201,6 +7207,33 @@ public abstract class BaseTest { .visibility(IDENTIFIER_6_VISIBILITY) .build(); + public final static Identifier IDENTIFIER_6_SIMPLE = Identifier.builder() + .id(IDENTIFIER_6_ID) + .databaseId(IDENTIFIER_6_DATABASE_ID) + .viewId(IDENTIFIER_6_VIEW_ID) + .descriptions(List.of()) + .titles(List.of()) + .doi(IDENTIFIER_6_DOI) + .database(null /* for jpa */) + .created(IDENTIFIER_6_CREATED) + .lastModified(IDENTIFIER_6_MODIFIED) + .execution(IDENTIFIER_6_EXECUTION) + .publicationDay(IDENTIFIER_6_PUBLICATION_DAY) + .publicationMonth(IDENTIFIER_6_PUBLICATION_MONTH) + .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) + .queryHash(IDENTIFIER_6_QUERY_HASH) + .resultHash(IDENTIFIER_6_RESULT_HASH) + .query(IDENTIFIER_6_QUERY) + .queryNormalized(IDENTIFIER_6_NORMALIZED) + .resultNumber(IDENTIFIER_6_RESULT_NUMBER) + .publisher(IDENTIFIER_6_PUBLISHER) + .type(IDENTIFIER_6_TYPE) + .creator(USER_1) + .licenses(List.of(LICENSE_1)) + .creators(List.of()) + .visibility(IDENTIFIER_6_VISIBILITY) + .build(); + public final static IdentifierDto IDENTIFIER_6_DTO = IdentifierDto.builder() .id(IDENTIFIER_6_ID) .databaseId(IDENTIFIER_6_DATABASE_ID) diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/utils/ArrayUtil.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/ArrayUtil.java similarity index 92% rename from dbrepo-metadata-db/test/src/main/java/at/tuwien/utils/ArrayUtil.java rename to dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/ArrayUtil.java index 336206728c4a0dad9a1184708c38c251e8ca7bd9..6cb9d51d2b9bb78efb8cd642200ea321219ee909 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/utils/ArrayUtil.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/ArrayUtil.java @@ -1,4 +1,4 @@ -package at.tuwien.utils; +package at.tuwien.test.utils; import java.util.Arrays; import java.util.LinkedList; diff --git a/dbrepo-query-service/.gitignore b/dbrepo-query-service/.gitignore deleted file mode 100644 index d68acdb421ac6a167610221b2792e4dcafa4f935..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -# Documentation -docs/*.html -docs/css/ -docs/images/ - -# Docker -ready - -## JUnit -.attach_pid* - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-query-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-query-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-query-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-query-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-query-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-query-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-query-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-query-service/Dockerfile b/dbrepo-query-service/Dockerfile deleted file mode 100644 index 355e25d9122d0b422626ae8592a6d3402990a12b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/Dockerfile +++ /dev/null @@ -1,49 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report -COPY ./api ./api - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV BROKER_USERNAME=fda -ENV BROKER_PASSWORD=fda -ENV GATEWAY_ENDPOINT=http://gateway-service -ENV BROKER_ENDPOINT=http://broker-service:15672 -ENV SHARED_FILESYSTEM=/tmp -ENV BROKER_CONSUMERS=2 -ENV LOG_LEVEL=debug -ENV CLIENT_ID="dbrepo-client" -ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" -ENV NOT_SUPPORTED_KEYWORDS=\\*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,-- - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./query-service.jar - -EXPOSE 9093 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./query-service.jar"] diff --git a/dbrepo-query-service/README.md b/dbrepo-query-service/README.md deleted file mode 100644 index 4e2547c3ff15136223a66d51f18a336e8af65b2a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Query Service - -## Actuator - -- Actuator Info: http://localhost:9093/actuator/info -- Actuator Health: http://localhost:9093/actuator/health -- Actuator Prometheus: http://localhost:9093/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9093/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9093/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-query-service/api/pom.xml b/dbrepo-query-service/api/pom.xml deleted file mode 100644 index b6ceecccd5e2262c920fa5b587b6214d9dde1522..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/api/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-query-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>api</artifactId> - <name>dbrepo-query-service-api</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - -</project> \ No newline at end of file diff --git a/dbrepo-query-service/api/src/main/java/at/tuwien/ExportResource.java b/dbrepo-query-service/api/src/main/java/at/tuwien/ExportResource.java deleted file mode 100644 index f037fcf89a806187b7cd4392b8f1369a1bc39db2..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/api/src/main/java/at/tuwien/ExportResource.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.tuwien; - -import lombok.*; -import org.springframework.core.io.InputStreamResource; - -@Getter -@Setter -@ToString -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class ExportResource { - - private InputStreamResource resource; - - private String filename; - -} diff --git a/dbrepo-query-service/mvnw b/dbrepo-query-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-query-service/mvnw.cmd b/dbrepo-query-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-query-service/pom.xml b/dbrepo-query-service/pom.xml deleted file mode 100644 index f1997a4f432f990f0f2a6040333e3ffc32649d27..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/pom.xml +++ /dev/null @@ -1,355 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-query-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-query-service</name> - <description> - The query service provides an interface to insert data into the tables created by the table service. It - also allows for view-only (possibly paginated and versioned) query execution to the raw data and consumes - messages in the message queue from the Broker Service. - </description> - <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/</url> - <developers> - <developer> - <name>Martin Weise</name> - <email>martin.weise@tuwien.ac.at</email> - <organization>TU Wien</organization> - </developer> - <developer> - <name>Moritz Staudinger</name> - <email>moritz.staudinger@tuwien.ac.at</email> - <organization>TU Wien</organization> - </developer> - </developers> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - <module>api</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <opencsv.version>5.7.1</opencsv.version> - <jsql.version>4.6</jsql.version> - <c3p0.version>0.9.5.5</c3p0.version> - <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <testcontainers.version>1.18.3</testcontainers.version> - <opensearch-testcontainer.version>2.0.0</opensearch-testcontainer.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-amqp</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-test</artifactId> - </dependency> - <dependency><!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters --> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>com.mchange</groupId> - <artifactId>c3p0</artifactId> - <version>${c3p0.version}</version> - </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${c3p0-hibernate.version}</version> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- AMPQ --> - <dependency> - <groupId>com.rabbitmq</groupId> - <artifactId>amqp-client</artifactId> - <version>${rabbit-amqp-client.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Entity, API, QueryStore --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-querystore</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>mariadb</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>rabbitmq</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.opensearch</groupId> - <artifactId>opensearch-testcontainers</artifactId> - <version>${opensearch-testcontainer.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional> - <!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - <!-- DTO --> - <dependency> - <groupId>com.opencsv</groupId> - <artifactId>opencsv</artifactId> - <version>${opencsv.version}</version> - </dependency> - <!-- SQL Parser --> - <dependency> - <groupId>com.github.jsqlparser</groupId> - <artifactId>jsqlparser</artifactId> - <version>${jsql.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - <include>**/templates/*.xml</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/entities/**/*</exclude> - <exclude>at/tuwien/seeder/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>**/RabbitMqServiceImpl.class</exclude> - <exclude>**/ServiceSeeder.class</exclude> - <exclude>**/DbrepoQueryServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-site-plugin</artifactId> - <version>3.7.1</version> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-project-info-reports-plugin</artifactId> - <version>3.0.0</version> - </plugin> - <plugin> - <groupId>com.soebes.maven.plugins</groupId> - <artifactId>doxygen-maven-plugin</artifactId> - <version>1.1.0</version> - <configuration> - <haveDot>false</haveDot> - <quiet>false</quiet> - <projectName>This is a Test Project (basicReportTest)</projectName> - <outputDirectory>docs</outputDirectory> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-query-service/report/pom.xml b/dbrepo-query-service/report/pom.xml deleted file mode 100644 index f4ffdae5cffeac96924b4309061725c106fec4b8..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/report/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-query-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.3.0</version> - <name>dbrepo-query-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/pom.xml b/dbrepo-query-service/rest-service/pom.xml deleted file mode 100644 index a1ac4541b8f35812385018b0557bedc5bb33247c..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-query-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-query-service-rest</name> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.jetbrains</groupId> - <artifactId>annotations</artifactId> - <version>RELEASE</version> - <scope>compile</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java deleted file mode 100644 index a24a87886442a0e8b358f1ba4e7e49f022cfbc81..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EnableScheduling -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoQueryServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoQueryServiceApplication.class, args); - } - -} \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index f61db6ccbfc01ed8ea594139d14dc67deb1a23f0..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.servers.Server; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository Query Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the queries") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Sourcecode Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services")) - .servers(List.of(new Server() - .description("Generated server url") - .url("http://localhost:9093"), - new Server() - .description("Sandbox") - .url("https://dbrepo2.tuwien.ac.at"))); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("query-service") - .pathsToMatch("/api/**") - .build(); - } - -} - diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index 5c05b664cad0ffef757ef68259d51923e141f7c2..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,283 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import net.sf.jsqlparser.JSQLParserException; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) - @ExceptionHandler(AmqpException.class) - public ResponseEntity<ApiErrorDto> handle(AmqpException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_ACCEPTABLE) - .message(e.getLocalizedMessage()) - .code("error.query.amqp") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.EXPECTATION_FAILED) - @ExceptionHandler(ColumnParseException.class) - public ResponseEntity<ApiErrorDto> handle(ColumnParseException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.EXPECTATION_FAILED) - .message(e.getLocalizedMessage()) - .code("error.query.columnparse") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(ContainerNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.containernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) - @ExceptionHandler(DatabaseConnectionException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseConnectionException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.SERVICE_UNAVAILABLE) - .message(e.getLocalizedMessage()) - .code("error.query.databaseconnection") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(DatabaseNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(DatabaseNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.databasenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.GONE) - @ExceptionHandler(FileStorageException.class) - public ResponseEntity<ApiErrorDto> handle(FileStorageException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.GONE) - .message(e.getLocalizedMessage()) - .code("error.query.filestore") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(HeaderInvalidException.class) - public ResponseEntity<ApiErrorDto> handle(HeaderInvalidException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.query.exportheader") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(IdentifierNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(IdentifierNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.identifiernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_IMPLEMENTED) - @ExceptionHandler(ImageNotSupportedException.class) - public ResponseEntity<ApiErrorDto> handle(ImageNotSupportedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_IMPLEMENTED) - .message(e.getLocalizedMessage()) - .code("error.query.imagenotsupported") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(NotAllowedException.class) - public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.query.permission") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(PaginationException.class) - public ResponseEntity<ApiErrorDto> handle(PaginationException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.query.pagination") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(QueryAlreadyPersistedException.class) - public ResponseEntity<ApiErrorDto> handle(QueryAlreadyPersistedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.query.alreadypersisted") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(QueryMalformedException.class) - public ResponseEntity<ApiErrorDto> handle(QueryMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.query.malformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(QueryNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(QueryNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.GATEWAY_TIMEOUT) - @ExceptionHandler(QueryStoreException.class) - public ResponseEntity<ApiErrorDto> handle(QueryStoreException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.GATEWAY_TIMEOUT) - .message(e.getLocalizedMessage()) - .code("error.query.store") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(SortException.class) - public ResponseEntity<ApiErrorDto> handle(SortException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.query.sort") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.LOCKED) - @ExceptionHandler(TableMalformedException.class) - public ResponseEntity<ApiErrorDto> handle(TableMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.LOCKED) - .message(e.getLocalizedMessage()) - .code("error.query.tablemalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(TableNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(TableNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.tablenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(TupleDeleteException.class) - public ResponseEntity<ApiErrorDto> handle(TupleDeleteException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.query.tupledelete") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(UserNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.usernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.LOCKED) - @ExceptionHandler(ViewMalformedException.class) - public ResponseEntity<ApiErrorDto> handle(ViewMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.LOCKED) - .message(e.getLocalizedMessage()) - .code("error.query.viewmalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(ViewNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(ViewNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.query.viewnotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java deleted file mode 100644 index ba6dc45c7bae7d17f9d0d5e694f448978017e9ea..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java +++ /dev/null @@ -1,160 +0,0 @@ -package at.tuwien.validation; - -import at.tuwien.SortType; -import at.tuwien.api.database.query.ExecuteStatementDto; -import at.tuwien.config.QueryConfig; -import at.tuwien.entities.database.AccessType; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.VisibilityType; -import at.tuwien.exception.*; -import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.TableService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.security.Principal; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -@Log4j2 -@Component -public class EndpointValidator { - - private final QueryConfig queryConfig; - private final TableService tableService; - private final AccessService accessService; - private final DatabaseService databaseService; - private final IdentifierRepository identifierRepository; - - @Autowired - public EndpointValidator(QueryConfig queryConfig, TableService tableService, AccessService accessService, - DatabaseService databaseService, IdentifierRepository identifierRepository) { - this.queryConfig = queryConfig; - this.tableService = tableService; - this.accessService = accessService; - this.databaseService = databaseService; - this.identifierRepository = identifierRepository; - } - - public void validateDataParams(Long page, Long size) throws PaginationException { - log.trace("validate data params, page={}, size={}", page, size); - if ((page == null && size != null) || (page != null && size == null)) { - log.error("Failed to validate page and/or size number, either both are present or none"); - throw new PaginationException("Failed to validate page and/or size number"); - } - if (page != null && page < 0) { - log.error("Failed to validate page number, is lower than zero"); - throw new PaginationException("Failed to validate page number"); - } - if (size != null && size <= 0) { - log.error("Failed to validate size number, is lower or equal than zero"); - throw new PaginationException("Failed to validate size number"); - } - } - - public void validateDataParams(Long page, Long size, SortType sortDirection, String sortColumn) - throws PaginationException, SortException { - log.trace("validate data params, page={}, size={}, sortDirection={}, sortColumn={}", page, size, - sortDirection, sortColumn); - validateDataParams(page, size); - if ((sortDirection == null && sortColumn != null) || (sortDirection != null && sortColumn == null)) { - log.error("Failed to validate sort direction and/or sort column, either both are present or none"); - throw new SortException("Failed to validate sort direction and/or sort column"); - } - } - - /** - * Do not allow aggregate functions and comments - * https://mariadb.com/kb/en/aggregate-functions/ - */ - public void validateForbiddenStatements(ExecuteStatementDto data) throws QueryMalformedException { - final List<String> words = new LinkedList<>(); - Arrays.stream(queryConfig.getNotSupportedKeywords()) - .forEach(keyword -> { - final Pattern pattern = Pattern.compile(keyword); - final Matcher matcher = pattern.matcher(data.getStatement()); - final boolean found = matcher.find(); - if (found) { - words.add(keyword); - } - }); - if (words.size() == 0) { - return; - } - log.error("Query contains forbidden keyword(s): {}", words); - throw new QueryMalformedException("Query contains forbidden keyword(s): " + Arrays.toString(words.toArray())); - } - - public void validateOnlyAccessOrPublic(Long databaseId, Principal principal) - throws DatabaseNotFoundException, NotAllowedException { - final Database database = databaseService.find(databaseId); - if (database.getIsPublic()) { - log.trace("database with id {} is public: no access needed", databaseId); - return; - } - log.trace("database with id {} is private", databaseId); - if (principal == null) { - log.error("Access not allowed: database with id {} is not public and no authorization provided", databaseId); - throw new NotAllowedException("Access not allowed: database with id " + databaseId + " is not public and no authorization provided"); - } - log.trace("principal is {}", principal); - final DatabaseAccess access = accessService.find(databaseId, principal.getName()); - log.trace("found access {}", access); - } - - public void validateOnlyAccessOrPublic(Long databaseId, Long queryId, Principal principal) - throws NotAllowedException, DatabaseNotFoundException { - final Optional<Identifier> optional = identifierRepository.findSubsetIdentifier(databaseId, queryId); - if (optional.isPresent()) { - final Identifier identifier = optional.get(); - log.trace("found identifier for query with id {}", queryId); - if (principal != null && identifier.getVisibility().equals(VisibilityType.SELF)) { - if (identifier.getCreator().getUsername().equals(principal.getName())) { - return; - } - log.error("Access not allowed: visibility is 'self' and user is not the creator"); - throw new NotAllowedException("Access not allowed: visibility is 'self' and you are not the creator"); - } - if (!identifier.getVisibility().equals(VisibilityType.EVERYONE)) { - log.error("Access not allowed: visibility is not 'everyone'"); - throw new NotAllowedException("Access not allowed: visibility is not 'everyone'"); - } - log.trace("identifier is public, validation passed"); - return; - } - validateOnlyAccessOrPublic(databaseId, principal); - } - - public void validateOnlyWriteOwnOrWriteAllAccess(Long databaseId, Long tableId, Principal principal) - throws DatabaseNotFoundException, TableNotFoundException, NotAllowedException { - final Table table = tableService.find(databaseId, tableId); - if (principal == null) { - log.error("Access not allowed: no authorization provided"); - throw new NotAllowedException("Access not allowed: no authorization provided"); - } - log.trace("principal is {}", principal); - final DatabaseAccess access = accessService.find(databaseId, principal.getName()); - log.trace("found access {}", access); - if (access.getType().equals(AccessType.WRITE_ALL)) { - log.debug("user {} has write-all access, skip.", principal.getName()); - return; - } - if (table.getOwner().getUsername().equals(principal.getName()) && access.getType().equals(AccessType.WRITE_OWN)) { - log.debug("user {} has write-own access to their own table, skip.", principal.getName()); - return; - } - log.error("Access not allowed: no write access for table with id {}", tableId); - throw new NotAllowedException("Access not allowed: no write access for table with id " + tableId); - } - -} diff --git a/dbrepo-query-service/rest-service/src/main/resources/application-local.yml b/dbrepo-query-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 25e12d5d8d4883ae25bb898ec18baa697c7256bf..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,57 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: query-service - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9093 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - gateway.endpoint: http://localhost - jwt: - issuer: http://localhost/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB - client_secret: client-secret - client_id: dbrepo-client - consumers: 2 - unsupported: \*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,-- diff --git a/dbrepo-query-service/rest-service/src/main/resources/application.yml b/dbrepo-query-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 1198cef479fcf60fe48ea4d01ea63ff5ea9bee10..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,72 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: query-service - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9093 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - gateway.endpoint: "${GATEWAY_ENDPOINT}" - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" - client_secret: "${DBREPO_CLIENT_SECRET}" - client_id: "${CLIENT_ID}" - consumers: "${BROKER_CONSUMERS}" - unsupported: "${NOT_SUPPORTED_KEYWORDS}" diff --git a/dbrepo-query-service/rest-service/src/main/resources/config.properties b/dbrepo-query-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-query-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml b/dbrepo-query-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml deleted file mode 100644 index 01f90448caca030263dade2fe9e4d07c20b938f0..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> -<hibernate-configuration> - <session-factory> - <property name="current_session_context_class">thread</property> - <property name="transaction.coordinator_class">jdbc</property> - <property name="c3p0.min_size">1</property> - <property name="c3p0.max_size">30</property> - <property name="c3p0.acquire_increment">1</property> - <property name="c3p0.timeout">1800</property> - <property name="show_sql">true</property> - <property name="format_sql">true</property> - <property name="hbm2ddl.auto">update</property> - <mapping class="at.tuwien.querystore.Column" /> - <mapping class="at.tuwien.querystore.Query" /> - <mapping class="at.tuwien.querystore.Table" /> - </session-factory> -</hibernate-configuration> diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index db640da2a768831ebcc89fe004aa77fa73bf65d8..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.ViewIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java deleted file mode 100644 index d04d2147478140db50ec5ee2bf6b8c64aabc9c3a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.ViewIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class SwaggerComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @Test - public void swaggerUi_succeeds() throws Exception { - this.mockMvc.perform(get("/swagger-ui/index.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - -} diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java deleted file mode 100644 index 9c1fc900af3dbfa72272bc09adbdb229d617998a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.*; -import at.tuwien.gateway.BrokerServiceGateway; -import at.tuwien.listener.impl.RabbitMqListenerImpl; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.ViewIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.*; - -@Log4j2 -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@EnableAutoConfiguration(exclude= RabbitAutoConfiguration.class) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class ContainerServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private Channel channel; - - @MockBean - private ViewIdxRepository viewIdxRepository; - - @MockBean - private RabbitMqListenerImpl rabbitMqListener; - - @MockBean - private BrokerServiceGateway brokerServiceGateway; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private ContainerService containerService; - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - } - - @Test - public void find_succeeds() throws ContainerNotFoundException { - - /* test */ - final Container response = containerService.find(CONTAINER_1_ID); - assertEquals(CONTAINER_1_ID, response.getId()); - assertEquals(CONTAINER_1_NAME, response.getName()); - assertEquals(CONTAINER_1_INTERNALNAME, response.getInternalName()); - } - - @Test - public void find_fails() { - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - containerService.find(CONTAINER_2_ID); - }); - } - -} diff --git a/dbrepo-query-service/rest-service/src/test/resources/application.properties b/dbrepo-query-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 3e11b50ac7fcd56500ceaff6c80cebdca7670c8c..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,33 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# additional logging -logging.level.root=error -logging.level.at.tuwien.=trace - -# broker service -spring.rabbitmq.host=dbrepo-broker-service -spring.rabbitmq.virtual-host=/ -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest - -# search service -fda.consumers=2 -fda.gateway.endpoint=http://localhost:15672 \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/test/resources/init/musicology.sql b/dbrepo-query-service/rest-service/src/test/resources/init/musicology.sql deleted file mode 100644 index 4d2c8deb43ede5de84cd321a302e97ef84038508..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/init/musicology.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE DATABASE musicology; -USE musicology; - -CREATE SEQUENCE seq_mfcc; - -CREATE TABLE mfcc -( - id BIGINT PRIMARY KEY NOT NULL DEFAULT nextval(`seq_mfcc`), - value DECIMAL NOT NULL -) WITH SYSTEM VERSIONING; - -INSERT INTO `mfcc` (`value`) -VALUES (11.2), - (11.3), - (11.4), - (11.9), - (12.3), - (23.1); \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/test/resources/init/querystore.sql b/dbrepo-query-service/rest-service/src/test/resources/init/querystore.sql deleted file mode 100644 index 9705d2f86cd0104460b912e0cb0e814689ed6233..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/init/querystore.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` ( `id` bigint not null primary key default nextval(`qs_queries_seq`), `created` datetime not null default now(), `executed` datetime not null default now(), `created_by` varchar(255) not null, `query` text not null, `query_normalized` text not null, `is_persisted` boolean not null, `query_hash` varchar(255) not null, `result_hash` varchar(255), `result_number` bigint ); -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255), OUT count BIGINT) BEGIN DECLARE _sql TEXT; SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), ') SEPARATOR \',\'), 256) AS hash, COUNT(*) AS count FROM `', name, '` INTO @hash, @count;') FROM `information_schema`.`columns` WHERE `table_schema` = DATABASE() AND `table_name` = name INTO _sql; PREPARE stmt FROM _sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET hash = @hash; SET count = @count; END; -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; -CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-query-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/test/resources/init/users.sql b/dbrepo-query-service/rest-service/src/test/resources/init/users.sql deleted file mode 100644 index 45f7b53a0f602a780522da646d64da2a0bc36e53..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/init/users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY 'junit1'; -CREATE USER junit2 IDENTIFIED BY 'junit2'; -CREATE USER junit3 IDENTIFIED BY 'junit3'; -CREATE USER junit4 IDENTIFIED BY 'junit4'; \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/test/resources/init/weather.sql b/dbrepo-query-service/rest-service/src/test/resources/init/weather.sql deleted file mode 100644 index 3923462189b4504b88b8599a009b0db4ee3c38d1..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/init/weather.sql +++ /dev/null @@ -1,70 +0,0 @@ -/* https://www.kaggle.com/jsphyg/weather-dataset-rattle-package */ -CREATE DATABASE weather; -USE weather; - -CREATE TABLE weather_location -( - location VARCHAR(255) PRIMARY KEY, - lat DOUBLE PRECISION NULL, - lng DOUBLE PRECISION NULL -) WITH SYSTEM VERSIONING; - -CREATE TABLE weather_aus -( - id BIGINT NOT NULL PRIMARY KEY, - `date` DATE NOT NULL, - location VARCHAR(255) NULL, - mintemp DOUBLE PRECISION NULL, - rainfall DOUBLE PRECISION NULL, - FOREIGN KEY (location) REFERENCES weather_location (location), - UNIQUE (`date`), - CHECK (`mintemp` > 0) -) WITH SYSTEM VERSIONING; - -CREATE TABLE sensor -( - `timestamp` TIMESTAMP NOT NULL PRIMARY KEY, - `value` DECIMAL -) WITH SYSTEM VERSIONING; - -INSERT INTO weather_location (location, lat, lng) -VALUES ('Albury', -36.0653583, 146.9112214), - ('Sydney', -33.847927, 150.6517942), - ('Vienna', null, null); - -INSERT INTO weather_aus (id, `date`, location, mintemp, rainfall) -VALUES (1, '2008-12-01', 'Albury', 13.4, 0.6), - (2, '2008-12-02', 'Albury', 7.4, 0), - (3, '2008-12-03', 'Albury', 12.9, 0); - -INSERT INTO sensor (`timestamp`, value) -VALUES ('2022-12-24 17:00:00', 10.0), - ('2022-12-24 18:00:00', 10.2), - ('2022-12-24 19:00:00', null), - ('2022-12-24 20:00:00', 10.3), - ('2022-12-24 21:00:00', 10.0), - ('2022-12-24 22:00:00', null); - -/* -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## -*/ - -CREATE VIEW junit2 AS -( -select `date`, `location`, `mintemp`, `rainfall` -from `weather_aus` -where `location` = 'Albury'); - -CREATE VIEW `hs_weather_aus` AS -SELECT * -FROM (SELECT `id`, ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total - FROM `weather_aus` FOR SYSTEM_TIME ALL - GROUP BY inserted_at, deleted_at - ORDER BY deleted_at DESC - LIMIT 50) AS v -ORDER BY v.inserted_at, v.deleted_at ASC; - - -COMMIT; diff --git a/dbrepo-query-service/services/pom.xml b/dbrepo-query-service/services/pom.xml deleted file mode 100644 index 5e543b828a02d5e083752547a91632838ae1f167..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-query-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>services</artifactId> - <version>1.3.0</version> - <name>dbrepo-query-service-services</name> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>api</artifactId> - <version>1.3.0</version> - </dependency> - </dependencies> - -</project> diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java deleted file mode 100644 index 92b60f4f8a5ed8a566e2504d71b63478b1593f68..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.auth; - -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.DecodedJWT; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.util.Arrays; -import java.util.Base64; -import java.util.stream.Collectors; - -@Slf4j -public class AuthTokenFilter extends OncePerRequestFilter { - - @Value("${fda.jwt.issuer}") - private String issuer; - - @Value("${fda.jwt.public_key}") - private String publicKey; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - final String jwt = parseJwt(request); - if (jwt != null) { - final UserDetails userDetails = verifyJwt(jwt); - log.debug("authenticated user {}", userDetails); - final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(request, response); - } - - public UserDetails verifyJwt(String token) throws ServletException { - final KeyFactory kf; - try { - kf = KeyFactory.getInstance("RSA"); - } catch (NoSuchAlgorithmException e) { - log.error("Failed to find RSA algorithm"); - throw new ServletException("Failed to find RSA algorithm", e); - } - final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); - final RSAPublicKey pubKey; - try { - pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); - } catch (InvalidKeySpecException e) { - log.error("Provided public key is invalid"); - throw new ServletException("Provided public key is invalid", e); - } - final Algorithm algorithm = Algorithm.RSA256(pubKey, null); - JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(issuer) - .withAudience("spring") - .build(); - final DecodedJWT jwt = verifier.verify(token); - final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); - return UserDetailsDto.builder() - .username(jwt.getClaim("client_id").asString()) - .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) - .build(); - } - - /** - * Parses the token from the HTTP header of the request - * - * @param request The request. - * @return The token. - */ - public String parseJwt(HttpServletRequest request) { - String headerAuth = request.getHeader("Authorization"); - if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); - } - return null; - } -} \ No newline at end of file diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index d89fef950ad78e4eb1a82fa2385b8f9d6a0cf2a8..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package at.tuwien.config; - -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Getter -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index d27d3b9c03070bf10f125b9f9c438bf4912b2691..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index 968799322eb990d0b2bd7a23a6c89e5ba8470373..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/database/data/**", "GET"), - new AntPathRequestMatcher("/api/database/**/table/**/data/**", "GET"), - new AntPathRequestMatcher("/api/database/**/view/**", "GET"), - new AntPathRequestMatcher("/api/database/**/table/**/history/**", "GET"), - new AntPathRequestMatcher("/api/database/**/table/**/export/**", "GET"), - new AntPathRequestMatcher("/api/database/**/query/**", "GET"), - new AntPathRequestMatcher("/api/database/**/query/**/export", "GET"), - new AntPathRequestMatcher("/api/database/**/query/**", "PUT") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/AmqpException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/AmqpException.java deleted file mode 100644 index 6af0750d6f5089a8442a7159eac2076462df2825..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/AmqpException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE) -public class AmqpException extends Exception { - - public AmqpException(String msg) { - super(msg); - } - - public AmqpException(String msg, Throwable thr) { - super(msg, thr); - } - - public AmqpException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java deleted file mode 100644 index 63459167f77f9f2350abfee7cdb80ef0c704fda2..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/DatabaseConnectionException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) -public class DatabaseConnectionException extends Exception { - - public DatabaseConnectionException(String msg) { - super(msg); - } - - public DatabaseConnectionException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseConnectionException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java deleted file mode 100644 index b9ca79c783048e8d0298db273abdb9462efeeec8..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class DatabaseNotFoundException extends Exception { - - public DatabaseNotFoundException(String msg) { - super(msg); - } - - public DatabaseNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java deleted file mode 100644 index f0bb71f36492511efbe2c8c959dcdb97c679702f..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class IdentifierNotFoundException extends Exception { - - public IdentifierNotFoundException(String msg) { - super(msg); - } - - public IdentifierNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public IdentifierNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java deleted file mode 100644 index 1a3b0de3d3be22b2bbd8e0a7ec7a9fff44830319..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ImageNotSupportedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.NOT_IMPLEMENTED) -public class ImageNotSupportedException extends Exception { - - public ImageNotSupportedException(String msg) { - super(msg); - } - - public ImageNotSupportedException(String msg, Throwable thr) { - super(msg, thr); - } - - public ImageNotSupportedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java deleted file mode 100644 index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class NotAllowedException extends Exception { - - public NotAllowedException(String msg) { - super(msg); - } - - public NotAllowedException(String msg, Throwable thr) { - super(msg, thr); - } - - public NotAllowedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java deleted file mode 100644 index 3d81b6ba4e659b49b59591fa8e9baec31767615a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class QueryMalformedException extends Exception { - - public QueryMalformedException(String msg) { - super(msg); - } - - public QueryMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryNotFoundException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryNotFoundException.java deleted file mode 100644 index a5e90754898f19f6cce8938d2385f3f9fecd43e4..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class QueryNotFoundException extends Exception { - - public QueryNotFoundException(String msg) { - super(msg); - } - - public QueryNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java deleted file mode 100644 index b1f472f2a1179200475b7952dd459af0ee7f7b6a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/QueryStoreException.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.GATEWAY_TIMEOUT) -public class QueryStoreException extends Exception { - - public QueryStoreException(String msg) { - super(msg); - } - - public QueryStoreException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryStoreException(Throwable thr) { super(thr); - } -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java deleted file mode 100644 index 542c789ad548084b1a98720630246514b431efcb..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.LOCKED) -public class TableMalformedException extends Exception { - - public TableMalformedException(String msg) { - super(msg); - } - - public TableMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public TableMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index 0abb87f609f0a6706c8e499eabc23e3d46d3304d..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found") -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String message) { - super(message); - } - - public UserNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java b/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java deleted file mode 100644 index 2f260975ff4746858184a4c8e5d4ee8268425625..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/exception/ViewNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "View not found") -public class ViewNotFoundException extends Exception { - - public ViewNotFoundException(String message) { - super(message); - } - - public ViewNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public ViewNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java b/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java deleted file mode 100644 index e8f0b9c364dd7c2166cc605c71572c8efc305e6f..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.api.amqp.ConsumerDto; - -import java.util.List; - -public interface BrokerServiceGateway { - - List<ConsumerDto> findAllConsumers(); -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java deleted file mode 100644 index 72b5b4556220d3d6bfead59212ee6b960d24b8a5..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -package at.tuwien.gateway.impl; - -import at.tuwien.api.amqp.ConsumerDto; -import at.tuwien.config.AmqpConfig; -import at.tuwien.config.GatewayConfig; -import at.tuwien.gateway.BrokerServiceGateway; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.binary.Base64; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -import java.net.URI; -import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.List; - -@Slf4j -@Service -public class BrokerServiceGatewayImpl implements BrokerServiceGateway { - - private final AmqpConfig amqpConfig; - private final Environment environment; - private final RestTemplate restTemplate; - private final GatewayConfig gatewayConfig; - - private final static String VIRTUAL_SERVER = "dbrepo"; - - @Autowired - public BrokerServiceGatewayImpl(AmqpConfig amqpConfig, Environment environment, RestTemplate restTemplate, - GatewayConfig gatewayConfig) { - this.amqpConfig = amqpConfig; - this.environment = environment; - this.restTemplate = restTemplate; - this.gatewayConfig = gatewayConfig; - } - - @Override - public List<ConsumerDto> findAllConsumers() { - final StringBuilder urlBuilder = new StringBuilder(gatewayConfig.getGatewayEndpoint()) - .append("/api"); - if (Arrays.stream(environment.getActiveProfiles()).noneMatch(p -> p.equals("junit"))) { - urlBuilder.append("/broker"); - } - urlBuilder.append("/consumers/") - .append(VIRTUAL_SERVER); - log.trace("gateway broker find all consumers, virtual server={}", VIRTUAL_SERVER); - final URI findUri = URI.create(urlBuilder.toString()); - final ResponseEntity<List<ConsumerDto>> response = restTemplate.exchange(findUri, HttpMethod.GET, - new HttpEntity<>(null, getHeaders()), new ParameterizedTypeReference<>() { - }); - return response.getBody(); - } - - /** - * Retrieves the authentication headers from the configuration for the broker service. - * - * @return The headers. - */ - private HttpHeaders getHeaders() { - String auth = amqpConfig.getAmqpUsername() + ":" + amqpConfig.getAmqpPassword(); - log.trace("set Authorization header username={}, password=(redacted)", amqpConfig.getAmqpUsername()); - byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.defaultCharset())); - String authHeader = "Basic " + new String(encodedAuth); - return new HttpHeaders() {{ - set("Authorization", authHeader); - }}; - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java deleted file mode 100644 index 7c49211efb805355ea851c87dcbf340474f2d64f..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.entities.container.Container; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface ContainerMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ContainerMapper.class); - - /* keep */ - ContainerDto containerToContainerDto(Container data); - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java deleted file mode 100644 index a6c112f312af0ab54a474c72e6c37e54d749e2f4..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.entities.database.Database; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface DatabaseMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class); - - @Mappings({ - @Mapping(target = "identifier.database", ignore = true) - }) - DatabaseDto databaseToDatabaseDto(Database data); - - @Mappings({ - @Mapping(target = "identifier.database", ignore = true) - }) - Database databaseDtoToDatabase(DatabaseDto data); - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java deleted file mode 100644 index cdd37338fd9f4dc6afac2ebaff4fe608eb2baa96..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.GrantedAuthorityDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.user.User; -import org.mapstruct.Mapper; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -@Mapper(componentModel = "spring", uses = {DatabaseMapper.class}) -public interface IdentifierMapper { - - Identifier identifierDtoToIdentifier(IdentifierDto data); - - IdentifierDto identifierToIdentifierDto(Identifier data); - - IdentifierBriefDto identifierToIdentifierBriefDto(Identifier data); -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/TableMapper.java deleted file mode 100644 index 2309682116556e6593b279abeb2542cef7b06cf4..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/TableMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.table.TableDto; -import at.tuwien.entities.database.table.Table; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(componentModel = "spring") -public interface TableMapper { - - /* keep */ - @Mapping(target = "constraints", ignore = true) - TableDto tableToTableDto(Table data); - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index cf803c0f1355dca095ea010e376b079c1b1b891a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.user.GrantedAuthorityDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.user.User; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - - /* keep */ - @Mappings({ - @Mapping(target = "id", expression = "java(data.getId().toString())") - }) - UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); - - UserDto userToUserDto(User data); - - default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { - final GrantedAuthority authority = new SimpleGrantedAuthority(data.getAuthority()); - log.trace("mapped granted authority {} to granted authority {}", data, authority); - return authority; - } -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index 58b73c9139550a25bb020ad7590307991a3cd693..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { - -} - diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java deleted file mode 100644 index e4723eb9d2dc3c7aeadb81b5ac721a9ba3859ede..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.DatabaseAccessKey; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> { - - @Query("select a from DatabaseAccess a where a.hdbid = :databaseId and a.user.username = :username") - Optional<DatabaseAccess> findByDatabaseIdAndUsername(@Param("databaseId") Long databaseId, @Param("username") String username); - -} - diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index ae627d68aa707c67cbee40d8fa74c1f13670382a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { - - @Query(value = "select d from Database d where d.id = :databaseId") - Optional<Database> findByDatabaseId(@Param("databaseId") Long databaseId); - -} - diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java deleted file mode 100644 index 9d9c98e90ae01d233a19f0844463570c1d2126f3..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Identifier; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface IdentifierRepository extends JpaRepository<Identifier, Long> { - - Optional<Identifier> findDatabaseIdentifier(Long databaseId); - - Optional<Identifier> findSubsetIdentifier(Long databaseId, Long queryId); - - List<Identifier> findAllDatabaseIdentifiers(); - - List<Identifier> findAllSubsetIdentifiers(); - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index ab4315e1c38828cdb432340f1b35d3bccc5b929b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 7b53e7245983c7ca848da7c1175e0158e2f2a930..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index ec4bde49341b1620cae150969a13ac4a8c9f0132..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - - @Query(value = "select t from Table t where t.database.id = :databaseId and t.id = :tableId") - Optional<Table> find(@Param("databaseId") Long databaseId, @Param("tableId") Long tableId); - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index 42d09c3e9eaecff5b277e10a724ebfb857a91c8b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - Optional<User> findByUsername(String username); - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/AccessService.java deleted file mode 100644 index 1498ced76da6fcdf89a86d6c9be385a40f7bd6d3..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/AccessService.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.NotAllowedException; - -public interface AccessService { - - /** - * Find the access granted to a database with given id to a user with given username. - * - * @param databaseId The database id. - * @param username The username. - * @return The access, if successful. - * @throws NotAllowedException The access operation is not permitted. - */ - DatabaseAccess find(Long databaseId, String username) throws NotAllowedException; -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/ContainerService.java deleted file mode 100644 index 5329682a4fa70bb69069b0d8eb539269f5134db0..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerNotFoundException; - -public interface ContainerService { - - /** - * Finds a container with given id. - * - * @param id The container id. - * @return The container. - * @throws ContainerNotFoundException The container was not found. - */ - Container find(Long id) throws ContainerNotFoundException; -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/DatabaseService.java deleted file mode 100644 index 52009936dc771e3e13f2bab2450d87293fcfe8bf..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; - -import java.util.List; - -public interface DatabaseService { - - /** - * Finds a database by given id in the metadata database. - * - * @param databaseId The database id. - * @return The database. - * @throws DatabaseNotFoundException The database was not found. - */ - Database find(Long databaseId) throws DatabaseNotFoundException; - - /** - * Finds all databases stored in the metadata database. - * - * @return List of databases. - */ - List<Database> findAll(); -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/IdentifierService.java deleted file mode 100644 index b398904438577fa2f2fb37f177d918b5318782cd..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ /dev/null @@ -1,24 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.IdentifierNotFoundException; - -import java.util.List; - -public interface IdentifierService { - - /** - * Finds a user by id. - * - * @param databaseId The database id. - * @param queryId The query id. - * @return The identifier. - */ - Identifier findByDatabaseIdAndQueryId(Long databaseId, Long queryId) throws IdentifierNotFoundException; - - List<Identifier> findAll(); - - List<Identifier> findAllDatabaseIdentifiers(); - - List<Identifier> findAllSubsetIdentifiers(); -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/MessageQueueService.java deleted file mode 100644 index b9223bf99ecdf30c42b4f1bb281fc6d2da7ffd2f..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/MessageQueueService.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.exception.AmqpException; - -public interface MessageQueueService { - - /** - * Creates a consumer on the provided queue with name and container id and database id for table id. - * - * @param queueName The queue name. - * @param databaseId The database id. - * @param tableId The table id. - * @throws AmqpException The consumer could not be created. - */ - void createConsumer(String queueName, Long databaseId, Long tableId) throws AmqpException; - - /** - * Restores missing consumers at the Broker Service. - * - * @throws AmqpException The consumer could not be created. - */ - void restore() throws AmqpException; -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/TableService.java deleted file mode 100644 index 699260696e63256ddc9c15f7b3f640c48d6638b0..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/TableService.java +++ /dev/null @@ -1,43 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.table.TableHistoryDto; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.*; - -import java.security.Principal; -import java.util.List; - -public interface TableService { - - /** - * Find a table in the metadata database by database-table id tuple - * - * @param databaseId The database id. - * @param tableId The table id. - * @return The database. - * @throws DatabaseNotFoundException The database is not found. - * @throws TableNotFoundException The table is not found. - */ - Table find(Long databaseId, Long tableId) throws DatabaseNotFoundException, TableNotFoundException; - - /** - * Finds all tables in the metdata database. - * - * @return The list of tables. - */ - List<Table> findAll(); - - /** - * Find the table history. - * - * @param databaseId The database id. - * @param tableId The table id. - * @param principal The user principal. - * @return The history as a list, if successful. - * @throws QueryMalformedException The query is malformed. - * @throws DatabaseNotFoundException The database is not found. - * @throws TableNotFoundException The table is not found. - */ - List<TableHistoryDto> findHistory(Long databaseId, Long tableId, Principal principal) - throws DatabaseNotFoundException, QueryMalformedException, TableNotFoundException, DatabaseConnectionException, QueryStoreException, UserNotFoundException; -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index a96834b6483e46adfd0a3ecae2830ea0b35abe6b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,28 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -import java.security.Principal; -import java.util.List; -import java.util.UUID; - -public interface UserService { - - /** - * Finds all users - * - * @return The list of users. - */ - List<User> findAll(); - - /** - * Finds a user by username. - * - * @param username The username. - * @return The user. - * @throws UserNotFoundException The user was not found in the metadata database. - */ - User findByUsername(String username) throws UserNotFoundException; -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java deleted file mode 100644 index 983a1bece772fc55c4c510d0600923c2fc69db1a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.NotAllowedException; -import at.tuwien.repository.mdb.DatabaseAccessRepository; -import at.tuwien.service.AccessService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class AccessServiceImpl implements AccessService { - - private final DatabaseAccessRepository databaseAccessRepository; - - @Autowired - public AccessServiceImpl(DatabaseAccessRepository databaseAccessRepository) { - this.databaseAccessRepository = databaseAccessRepository; - } - - @Override - public DatabaseAccess find(Long databaseId, String username) throws NotAllowedException { - final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username); - if (optional.isEmpty()) { - log.error("Failed to find database access for database with id {}", databaseId); - throw new NotAllowedException("Failed to find database access"); - } - return optional.get(); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java deleted file mode 100644 index 07c77c5358ad0dff79da6af0ea4ff7f3a4cf0fda..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.repository.mdb.ContainerRepository; -import at.tuwien.service.ContainerService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class ContainerServiceImpl implements ContainerService { - - private final ContainerRepository containerRepository; - - @Autowired - public ContainerServiceImpl(ContainerRepository containerRepository) { - this.containerRepository = containerRepository; - } - - @Override - public Container find(Long id) throws ContainerNotFoundException { - final Optional<Container> container = containerRepository.findById(id); - if (container.isEmpty()) { - log.error("Failed to find container with id {}", id); - throw new ContainerNotFoundException("Container not found"); - } - return container.get(); - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java deleted file mode 100644 index 20894089d7083d379d90f5bd9e09c27f1a1e80c1..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.service.DatabaseService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Optional; - -@Log4j2 -@Service -public class DatabaseServiceImpl implements DatabaseService { - - private final DatabaseRepository databaseRepository; - - @Autowired - public DatabaseServiceImpl(DatabaseRepository databaseRepository) { - this.databaseRepository = databaseRepository; - } - - @Override - @Transactional(readOnly = true) - public Database find(Long databaseId) throws DatabaseNotFoundException { - final Optional<Database> database = databaseRepository.findByDatabaseId(databaseId); - if (database.isEmpty()) { - log.error("Failed to find database with database id {}", databaseId); - throw new DatabaseNotFoundException("Failed to find database with id " + databaseId); - } - return database.get(); - } - - @Override - @Transactional(readOnly = true) - public List<Database> findAll() { - return databaseRepository.findAll(); - } -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java deleted file mode 100644 index f17bbadccdcbeb024a20b4cb6a78aca84c63736a..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java +++ /dev/null @@ -1,28 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.database.Database; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.stereotype.Service; - -@Log4j2 -@Service -public abstract class HibernateConnector { - - protected static ComboPooledDataSource getPrivilegedDataSource(ContainerImage image, Container container, Database database) { - final ComboPooledDataSource dataSource = new ComboPooledDataSource(); - final String url = "jdbc:" + image.getJdbcMethod() + "://" + container.getHost() + ":" + container.getPort() + "/" + (database != null ? database.getInternalName() : ""); - dataSource.setJdbcUrl(url); - dataSource.setUser(container.getPrivilegedUsername()); - dataSource.setPassword(container.getPrivilegedPassword()); - dataSource.setInitialPoolSize(5); - dataSource.setMinPoolSize(5); - dataSource.setAcquireIncrement(5); - dataSource.setMaxPoolSize(20); - dataSource.setMaxStatements(100); - log.trace("created pooled data source {}", dataSource); - return dataSource; - } -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java deleted file mode 100644 index 740bda77217360d902c7f9156f2e579d9983b03b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.IdentifierNotFoundException; -import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.service.IdentifierService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Optional; - -@Slf4j -@Service -public class IdentifierServiceImpl implements IdentifierService { - - private final IdentifierRepository identifierRepository; - - @Autowired - public IdentifierServiceImpl(IdentifierRepository identifierRepository) { - this.identifierRepository = identifierRepository; - } - - @Override - public Identifier findByDatabaseIdAndQueryId(Long databaseId, Long queryId) throws IdentifierNotFoundException { - final Optional<Identifier> optional = identifierRepository.findSubsetIdentifier(databaseId, queryId); - if (optional.isEmpty()) { - log.error("Failed to find subset identifier with database id {} and query id {}", databaseId, queryId); - throw new IdentifierNotFoundException("Failed to find subset identifier with database id " + databaseId + " and query id " + queryId); - } - return optional.get(); - } - - @Override - public List<Identifier> findAll() { - return identifierRepository.findAll(); - } - - @Override - public List<Identifier> findAllDatabaseIdentifiers() { - return identifierRepository.findAllDatabaseIdentifiers(); - } - - @Override - public List<Identifier> findAllSubsetIdentifiers() { - return identifierRepository.findAllSubsetIdentifiers(); - } -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java deleted file mode 100644 index f6f3b647f8bc0a2c63bdabc756c13eb76fd23d08..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.amqp.RabbitMqConsumer; -import at.tuwien.api.amqp.ConsumerDto; -import at.tuwien.config.AmqpConfig; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.AmqpException; -import at.tuwien.gateway.BrokerServiceGateway; -import at.tuwien.service.MessageQueueService; -import at.tuwien.service.QueryService; -import at.tuwien.service.TableService; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.util.List; - -@Log4j2 -@Service -public class RabbitMqServiceImpl implements MessageQueueService { - - private Channel channel; - private final AmqpConfig amqpConfig; - private final ObjectMapper objectMapper; - private final QueryService queryService; - private final TableService tableService; - private final BrokerServiceGateway brokerServiceGateway; - - @Autowired - public RabbitMqServiceImpl(Channel channel, AmqpConfig amqpConfig, ObjectMapper objectMapper, - QueryService queryService, TableService tableService, - BrokerServiceGateway brokerServiceGateway) { - this.channel = channel; - this.amqpConfig = amqpConfig; - this.objectMapper = objectMapper; - this.queryService = queryService; - this.tableService = tableService; - this.brokerServiceGateway = brokerServiceGateway; - } - - @Override - public void createConsumer(String queueName, Long databaseId, Long tableId) throws AmqpException { - try { - if (!this.channel.isOpen()) { - log.warn("Channel with id {} is closed", this.channel.getChannelNumber()); - final Connection tmp = this.amqpConfig.connectionFactory().newConnection(); - this.channel = tmp.createChannel(); - log.info("Opened channel with id {}", this.channel.getChannelNumber()); - } - final String consumerTag = this.channel.basicConsume(queueName, true, new RabbitMqConsumer(databaseId, tableId, objectMapper, queryService)); - log.debug("declared consumer for queue name {} with tag {}", queueName, consumerTag); - } catch (IOException e) { - log.error("Failed to create consumer for table with id {}, reason: {}", tableId, e.getMessage()); - throw new AmqpException("Failed to create consumer", e); - } catch (Exception e) { - log.error("Failed unknown: {}", e.getMessage()); - /* ignore */ - } - } - - @Override - public void restore() throws AmqpException { - final List<Table> tables = tableService.findAll(); - final List<ConsumerDto> consumers = brokerServiceGateway.findAllConsumers(); - for (Table table : tables) { - final long consumerCount = consumers.stream().filter(c -> c.getQueue().getName().equals(table.getQueueName())).count(); - if (consumerCount >= amqpConfig.getAmqpConsumers()) { - continue; - } - for (long i = consumerCount; i < amqpConfig.getAmqpConsumers(); i++) { - createConsumer(table.getQueueName(), table.getDatabase().getId(), table.getId()); - } - } - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java deleted file mode 100644 index b7d1666de56bdc7407965df4ec8b9ad1c0b4d782..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.table.TableHistoryDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.QueryStoreException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.mapper.QueryMapper; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.TableService; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.security.Principal; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; -import java.util.Optional; - -@Log4j2 -@Service -public class TableServiceImpl extends HibernateConnector implements TableService { - - private final QueryMapper queryMapper; - private final TableRepository tableRepository; - private final DatabaseService databaseService; - - @Autowired - public TableServiceImpl(QueryMapper queryMapper, TableRepository tableRepository, DatabaseService databaseService) { - this.queryMapper = queryMapper; - this.tableRepository = tableRepository; - this.databaseService = databaseService; - } - - @Override - @Transactional(readOnly = true) - public Table find(Long databaseId, Long tableId) throws DatabaseNotFoundException, TableNotFoundException { - final Optional<Table> table = tableRepository.find(databaseId, tableId); - if (table.isEmpty()) { - log.error("Failed to find table with id {} in database with id {}", tableId, databaseId); - throw new TableNotFoundException("Failed to find table with id " + tableId + " in database with id " + databaseId); - } - return table.get(); - } - - @Override - @Transactional(readOnly = true) - public List<Table> findAll() { - return tableRepository.findAll(); - } - - @Override - @Transactional(readOnly = true) - public List<TableHistoryDto> findHistory(Long databaseId, Long tableId, Principal principal) - throws DatabaseNotFoundException, TableNotFoundException, QueryStoreException, QueryMalformedException { - /* find */ - final Database database = databaseService.find(databaseId); - final Table table = find(databaseId, tableId); - /* run query */ - final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), - database.getContainer(), database); - /* use jpa to select one */ - try { - final Connection connection = dataSource.getConnection(); - final PreparedStatement preparedStatement = queryMapper.historyRawQuery(connection, table); - final ResultSet resultSet = preparedStatement.executeQuery(); - return queryMapper.resultListToTableHistoryDto(resultSet); - } catch (SQLException e) { - log.error("Failed to map table history: {}", e.getMessage()); - throw new QueryStoreException("Failed to map table history: " + e.getMessage(), e); - } finally { - dataSource.close(); - } - } - -} diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 74b6074b7c2e4cdd15b677c0a1cf01500bdc248e..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Optional; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public List<User> findAll() { - return userRepository.findAll(); - } - - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with username {}", username); - throw new UserNotFoundException("Failed to retrieve user with username " + username); - } - return optional.get(); - } - -} diff --git a/dbrepo-search-sync-agent/Dockerfile b/dbrepo-search-sync-agent/Dockerfile index b996e37748daa3b6398deca4e65e8ea365faef4e..92370f5b67a78af8ad0c27e7720dac1179b6e252 100644 --- a/dbrepo-search-sync-agent/Dockerfile +++ b/dbrepo-search-sync-agent/Dockerfile @@ -1,5 +1,5 @@ ###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency +FROM dbrepo-metadata-service:build as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### @@ -8,7 +8,7 @@ MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ -RUN mvn -fn -B dependency:go-offline > /dev/null +RUN mvn -fn -B dependency:go-offline COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien @@ -17,7 +17,7 @@ COPY ./services ./services COPY ./report ./report # Make sure it compiles -RUN mvn -q clean package -DskipTests +RUN mvn clean package -DskipTests ###### THIRD STAGE ###### FROM openjdk:17-alpine as runtime diff --git a/dbrepo-search-sync-agent/pom.xml b/dbrepo-search-sync-agent/pom.xml index ed461ad976377f8a4ffda9a4c1a7606c019f4b04..57eb16f0db513ac30ac639ba1fa678ef7e6e37b5 100644 --- a/dbrepo-search-sync-agent/pom.xml +++ b/dbrepo-search-sync-agent/pom.xml @@ -79,12 +79,22 @@ <!-- Entities and API --> <dependency> <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> + <artifactId>dbrepo-metadata-service-entities</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> + <artifactId>dbrepo-metadata-service-api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-repositories</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-test</artifactId> <version>${project.version}</version> </dependency> <dependency> @@ -190,11 +200,6 @@ <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - </dependency> <!-- IDE --> <dependency> <groupId>org.projectlombok</groupId> diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java index 14098ec452c0af0d6239aff0d9b8fd9d4aa03fcc..0c069f26ab0df4e9f14443feefa1d99b4fee61cc 100644 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java +++ b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java @@ -10,12 +10,8 @@ import at.tuwien.api.database.table.columns.concepts.UnitDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserDto; import at.tuwien.config.IndexConfig; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.repository.mdb.*; import at.tuwien.repository.sdb.*; -import at.tuwien.service.ViewService; import lombok.extern.log4j.Log4j2; import org.junit.Rule; import org.junit.jupiter.api.BeforeEach; @@ -25,7 +21,6 @@ import org.junit.rules.Timeout; import org.opensearch.testcontainers.OpensearchContainer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; @@ -38,8 +33,6 @@ import java.util.List; import java.util.stream.StreamSupport; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.doCallRealMethod; -import static org.mockito.Mockito.doNothing; @Log4j2 diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/ConceptServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/ConceptServiceIntegrationTest.java deleted file mode 100644 index 875038820cab91709c4182aac42e469b00c20342..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/ConceptServiceIntegrationTest.java +++ /dev/null @@ -1,83 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.repository.mdb.ConceptRepository; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UserRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class ConceptServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ConceptRepository conceptRepository; - - @Autowired - private ConceptService conceptService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - conceptRepository.save(CONCEPT_1); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<TableColumnConcept> concepts = conceptService.findAll(); - assertEquals(1, concepts.size()); - final TableColumnConcept concept0 = concepts.get(0); - assertEquals(CONCEPT_1_ID, concept0.getId()); - assertEquals(CONCEPT_1_NAME, concept0.getName()); - assertEquals(CONCEPT_1_URI, concept0.getUri()); - assertEquals(CONCEPT_1_DESCRIPTION, concept0.getDescription()); - } -} diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java deleted file mode 100644 index 445814cf2afc6c28dfb520bcdbc0a4e3dc24371d..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.Database; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class DatabaseServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private DatabaseService databaseService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<Database> databases = databaseService.findAll(); - assertEquals(1, databases.size()); - final Database database0 = databases.get(0); - assertEquals(DATABASE_1_ID, database0.getId()); - assertEquals(DATABASE_1_NAME, database0.getName()); - assertEquals(DATABASE_1_INTERNALNAME, database0.getInternalName()); - assertEquals(DATABASE_1_DESCRIPTION, database0.getDescription()); - } -} diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java deleted file mode 100644 index 89562cec3f25004a5c399bc1b219383dc999526f..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class IdentifierServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private IdentifierRepository identifierRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private LicenseRepository licenseRepository; - - @Autowired - private IdentifierService identifierService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - licenseRepository.save(LICENSE_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - identifierRepository.save(IDENTIFIER_1); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<Identifier> identifiers = identifierService.findAll(); - assertEquals(1, identifiers.size()); - final Identifier identifier0 = identifiers.get(0); - assertEquals(IDENTIFIER_1_ID, identifier0.getId()); - assertEquals(IDENTIFIER_1_DATABASE_ID, identifier0.getDatabaseId()); - assertEquals(IDENTIFIER_1_TYPE, identifier0.getType()); - assertEquals(IDENTIFIER_1_PUBLISHER, identifier0.getPublisher()); - } - - @Test - public void findAll_multiple_succeeds() { - - /* mock */ - userRepository.save(USER_2); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_2); - identifierRepository.save(IDENTIFIER_2); - - /* test */ - final List<Identifier> identifiers = identifierService.findAll(); - assertEquals(2, identifiers.size()); - final Identifier identifier0 = identifiers.get(0); - assertEquals(IDENTIFIER_1_ID, identifier0.getId()); - assertEquals(IDENTIFIER_1_DATABASE_ID, identifier0.getDatabaseId()); - assertEquals(IDENTIFIER_1_TYPE, identifier0.getType()); - assertEquals(IDENTIFIER_1_PUBLISHER, identifier0.getPublisher()); - final Identifier identifier1 = identifiers.get(1); - assertEquals(IDENTIFIER_2_ID, identifier1.getId()); - assertEquals(IDENTIFIER_2_DATABASE_ID, identifier1.getDatabaseId()); - assertEquals(IDENTIFIER_2_TYPE, identifier1.getType()); - assertEquals(IDENTIFIER_2_PUBLISHER, identifier1.getPublisher()); - } -} diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java deleted file mode 100644 index e35806c1c562c6b9c14bf2a4ef56c550e76f0834..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.table.Table; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.transaction.annotation.Transactional; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class TableServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private TableService tableService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - tableRepository.save(TABLE_1); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - } - - @Test - @Transactional - public void findAll_succeeds() { - - /* test */ - final List<Table> tables = tableService.findAll(); - assertEquals(1, tables.size()); - final Table table0 = tables.get(0); - assertEquals(TABLE_1_ID, table0.getId()); - assertEquals(TABLE_1_NAME, table0.getName()); - assertEquals(TABLE_1_INTERNALNAME, table0.getInternalName()); - assertEquals(TABLE_1_QUEUE_NAME, table0.getQueueName()); - assertEquals(TABLE_1_ROUTING_KEY, table0.getRoutingKey()); - } -} diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/UnitServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/UnitServiceIntegrationTest.java deleted file mode 100644 index b9cc9c70d9271de2b877eefacbe1062611c12434..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/UnitServiceIntegrationTest.java +++ /dev/null @@ -1,91 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.repository.mdb.ConceptRepository; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UnitRepository; -import at.tuwien.repository.mdb.UserRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class UnitServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private UnitRepository unitRepository; - - @Autowired - private UnitService unitService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - unitRepository.save(UNIT_1); - unitRepository.save(UNIT_2); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<TableColumnUnit> units = unitService.findAll(); - assertEquals(2, units.size()); - final TableColumnUnit unit0 = units.get(0); - assertEquals(UNIT_1_ID, unit0.getId()); - assertEquals(UNIT_1_NAME, unit0.getName()); - assertEquals(UNIT_1_URI, unit0.getUri()); - assertEquals(UNIT_1_DESCRIPTION, unit0.getDescription()); - final TableColumnUnit unit1 = units.get(1); - assertEquals(UNIT_2_ID, unit1.getId()); - assertEquals(UNIT_2_NAME, unit1.getName()); - assertEquals(UNIT_2_URI, unit1.getUri()); - assertEquals(UNIT_2_DESCRIPTION, unit1.getDescription()); - } -} diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java deleted file mode 100644 index 7cd45679707ea57304986622f4fc2c15030464a5..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.entities.user.User; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UnitRepository; -import at.tuwien.repository.mdb.UserRepository; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class UserServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private UserService userService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<User> users = userService.findAll(); - assertEquals(1, users.size()); - final User user0 = users.get(0); - assertEquals(USER_1_ID, user0.getId()); - assertEquals(USER_1_USERNAME, user0.getUsername()); - assertEquals(USER_1_FIRSTNAME, user0.getFirstname()); - assertEquals(USER_1_LASTNAME, user0.getLastname()); - } -} diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java deleted file mode 100644 index 8ad5e49f66e971e5611d3114f95a000f1eed848b..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.Table; -import at.tuwien.repository.mdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.rules.Timeout; -import org.opensearch.testcontainers.OpensearchContainer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class ViewServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private TableRepository tableRepository; - - @Autowired - private TableColumnRepository tableColumnRepository; - - @Autowired - private ViewRepository viewRepository; - - @Autowired - private ViewService viewService; - - @Rule - public Timeout globalTimeout = Timeout.seconds(60); - - @Container - private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0")); - - @DynamicPropertySource - static void elasticsearchProperties(DynamicPropertyRegistry registry) { - final int idx = opensearchContainer.getHttpHostAddress().lastIndexOf(':'); - registry.add("spring.opensearch.host", () -> "127.0.0.1"); - registry.add("spring.opensearch.port", () -> opensearchContainer.getHttpHostAddress().substring(idx + 1)); - registry.add("spring.opensearch.username", opensearchContainer::getUsername); - registry.add("spring.opensearch.password", opensearchContainer::getPassword); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - databaseRepository.save(DATABASE_1); - tableRepository.save(TABLE_1_SIMPLE); - tableColumnRepository.saveAll(TABLE_1_COLUMNS); - tableRepository.save(TABLE_2_SIMPLE); - tableColumnRepository.saveAll(TABLE_2_COLUMNS); - viewRepository.save(VIEW_1); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<View> views = viewService.findAll(); - assertEquals(1, views.size()); - final View view0 = views.get(0); - assertEquals(VIEW_1_ID, view0.getId()); - assertEquals(VIEW_1_NAME, view0.getName()); - assertEquals(VIEW_1_INTERNAL_NAME, view0.getInternalName()); - assertEquals(VIEW_1_QUERY, view0.getQuery()); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index 40a2898c9266f095bf97524f9dfcfa92ccafa3ac..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.config; - -import lombok.Getter; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.client.RestTemplate; - -@Getter -@Configuration -public class GatewayConfig { - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - return new RestTemplate(); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/ConceptMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/ConceptMapper.java deleted file mode 100644 index a26a2e08b9cb178a0ffdf35a89a5669b41c6d6a3..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/ConceptMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface ConceptMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ConceptMapper.class); - - ConceptDto tableColumnConceptToConceptDto(TableColumnConcept data); - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java deleted file mode 100644 index 6f7e609091cad5bc2278dca524b088af48ae484f..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.entities.database.Database; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring", uses = {IdentifierMapper.class}) -public interface DatabaseMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class); - - DatabaseDto databaseToDatabaseDto(Database data); - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java deleted file mode 100644 index ae85377f62543ef21eb9b44f13ebae4fc21e7775..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.entities.identifier.Identifier; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface IdentifierMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(IdentifierMapper.class); - - @Mappings({ - @Mapping(target = "database.identifier", ignore = true) - }) - IdentifierDto identifierToIdentifierDto(Identifier data); - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/TableMapper.java deleted file mode 100644 index 44dd06562961217ac47c981d7a5f13578731a318..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/TableMapper.java +++ /dev/null @@ -1,31 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.constraints.unique.Unique; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -import java.util.List; -import java.util.stream.Collectors; - -@Mapper(componentModel = "spring") -public interface TableMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(TableMapper.class); - - @Mappings({ - @Mapping(target = "database.identifier", ignore = true) - }) - TableDto tableToTableDto(Table data); - - ColumnDto tableColumnToColumnDto(TableColumn data); - - default List<ColumnDto> uniqueToColumnList(Unique unique) { - return unique.getColumns().stream().map(this::tableColumnToColumnDto).collect(Collectors.toList()); - } - -} \ No newline at end of file diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/UnitMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/UnitMapper.java deleted file mode 100644 index b3546b8510641c6cbd48718428bb8bdf3bb080b3..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/UnitMapper.java +++ /dev/null @@ -1,15 +0,0 @@ - -package at.tuwien.mapper; - -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface UnitMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UnitMapper.class); - - UnitDto tableColumnUnitToUnitDto(TableColumnUnit data); - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index ed9446d2e89d75f65cc1f7f0267433ca695a533c..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.user.User; -import org.mapstruct.Mapper; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - - UserDto userToUserDto(User data); - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/ViewMapper.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/ViewMapper.java deleted file mode 100644 index 08131fe53935276e6b7c9d09b0d5bb8524f85940..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/mapper/ViewMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.table.Table; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface ViewMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ViewMapper.class); - - ViewDto viewToViewDto(View data); - - @Mappings({ - @Mapping(target = "identifier.database", ignore = true) - }) - DatabaseDto databaseToDatabaseDto(Database data); - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java deleted file mode 100644 index 00fc049aa3a32bd32f770be36d51f00b28857cbd..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ConceptRepository extends JpaRepository<TableColumnConcept, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index aeab03e481eec5df94370725d8bb467820a7f82e..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index 8f9dab6cd3a0e9c3ab324927ab8fec5406ed75cc..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java deleted file mode 100644 index 27706deae379000a1b7fbf4ca6ffcb2941094609..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.identifier.Identifier; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierRepository extends JpaRepository<Identifier, Long> { -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index 2787ab513a3ff0b573ab5384225bb54bf206fe36..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java deleted file mode 100644 index ef3472077dd9cdd359d61509690c6ce57dfcdc6c..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.License; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface LicenseRepository extends JpaRepository<License, String> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 7b53e7245983c7ca848da7c1175e0158e2f2a930..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java deleted file mode 100644 index 004f202d036ccec03c8ccaf10d206b70ed50922a..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumn; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableColumnRepository extends JpaRepository<TableColumn, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index 3d0057f9f93d17adf73498aac29b4ef4e32d1d29..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java deleted file mode 100644 index acf639bfe23bb8cc565d10b5bcae6c60653c57d8..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface UnitRepository extends JpaRepository<TableColumnUnit, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index bb07ad34b016b82595711df7da1e374adff1195f..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java deleted file mode 100644 index c2e046307f00568f92352de6fc2da390cf12e716..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.View; -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface ViewRepository extends JpaRepository<View, Long> { - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java deleted file mode 100644 index 64804f250b0d302a631c1148caedbb686837228c..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ConceptIdxRepository extends ElasticsearchRepository<ConceptDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java deleted file mode 100644 index 6125ff39ab41a7e341bb01a32bbc152415483032..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.DatabaseDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseIdxRepository extends ElasticsearchRepository<DatabaseDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java deleted file mode 100644 index 45e42d1515bbc6f94001363ce647a5d8472c9f6c..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.identifier.IdentifierDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IdentifierIdxRepository extends ElasticsearchRepository<IdentifierDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java deleted file mode 100644 index da608f39eb1959c0971cd42e8fc8535e1e7f70f4..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.ViewDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ViewIdxRepository extends ElasticsearchRepository<ViewDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/ConceptService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/ConceptService.java deleted file mode 100644 index 909012ddbcc1d0deec8727e3821860d3b1820ea8..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/ConceptService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.table.columns.TableColumnConcept; - -import java.util.List; - -public interface ConceptService { - - /** - * Finds all column concepts in the metadata database. - * - * @return List of column concepts. - */ - List<TableColumnConcept> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/DatabaseService.java deleted file mode 100644 index d19262f70f90d0dba55baf3951d23d17a990ba28..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/DatabaseService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.Database; - -import java.util.List; - -public interface DatabaseService { - - /** - * Finds all databases in the metadata database. - * - * @return List of databases. - */ - List<Database> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/IdentifierService.java deleted file mode 100644 index 7753c2330f49b448423546c0cb4d0656a37685a7..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/IdentifierService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.identifier.Identifier; - -import java.util.List; - -public interface IdentifierService { - - /** - * Finds all identifiers in the metadata database. - * - * @return List of identifiers. - */ - List<Identifier> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/TableService.java deleted file mode 100644 index 66ce126099f5deed6c1864b3e54a465116430dd3..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/TableService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.table.Table; - -import java.util.List; - -public interface TableService { - - /** - * Select all tables from the metadata database. - * - * @return The list of tables. - */ - List<Table> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/UnitService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/UnitService.java deleted file mode 100644 index de240970fcb554a8ea8482f326cdc4a0db66f738..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/UnitService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.table.columns.TableColumnUnit; - -import java.util.List; - -public interface UnitService { - - /** - * Finds all column units in the metadata database. - * - * @return List of column units. - */ - List<TableColumnUnit> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index e3ef9e5231328b677db64a67b9b6d4f1e05badfd..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; - -import java.util.List; - -public interface UserService { - - /** - * Finds all users from the metadata database. - * - * @return List of users. - */ - List<User> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/ViewService.java deleted file mode 100644 index 10705e58558f4c47521fc795b740ae935a101ed5..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/ViewService.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.View; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -public interface ViewService { - @Transactional(readOnly = true) - List<View> findAll(); -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/ConceptServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/ConceptServiceImpl.java deleted file mode 100644 index 9d9c07ecc3b9425d0e8b9438c9da9d2430507725..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/ConceptServiceImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.repository.mdb.ConceptRepository; -import at.tuwien.service.ConceptService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class ConceptServiceImpl implements ConceptService { - - private final ConceptRepository conceptRepository; - - @Autowired - public ConceptServiceImpl(ConceptRepository conceptRepository) { - this.conceptRepository = conceptRepository; - } - - @Override - @Transactional(readOnly = true) - public List<TableColumnConcept> findAll() { - return conceptRepository.findAll(); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java deleted file mode 100644 index c775c2bb2eed20f1deb0510aaf987bc52a4d98e2..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.Database; -import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.service.DatabaseService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Log4j2 -@Service -public class DatabaseServiceImpl implements DatabaseService { - - private final DatabaseRepository databaseRepository; - - @Autowired - public DatabaseServiceImpl(DatabaseRepository databaseRepository) { - this.databaseRepository = databaseRepository; - } - - @Override - @Transactional(readOnly = true) - public List<Database> findAll() { - return databaseRepository.findAll(); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java deleted file mode 100644 index 067325dbd81df0077ad17b50fc55bfd6176ffde4..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.repository.mdb.IdentifierRepository; -import at.tuwien.service.IdentifierService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class IdentifierServiceImpl implements IdentifierService { - - private final IdentifierRepository identifierRepository; - - @Autowired - public IdentifierServiceImpl(IdentifierRepository identifierRepository) { - this.identifierRepository = identifierRepository; - } - - @Override - @Transactional(readOnly = true) - public List<Identifier> findAll() { - return identifierRepository.findAll(); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java index 9998f1de07c18597ddad0020bab10976a049560a..64c37341c865b3ba04ec0a12b8c7df622238e44f 100644 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java +++ b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/SyncServiceImpl.java @@ -22,11 +22,10 @@ import java.util.List; @Service public class SyncServiceImpl implements SyncService { - private final UnitMapper unitMapper; private final UserMapper userMapper; private final ViewMapper viewMapper; private final TableMapper tableMapper; - private final ConceptMapper conceptMapper; + private final OntologyMapper ontologyMapper; private final DatabaseMapper databaseMapper; private final ViewRepository viewRepository; private final UnitRepository unitRepository; @@ -47,21 +46,20 @@ public class SyncServiceImpl implements SyncService { private final TableColumnIdxRepository tableColumnIdxRepository; @Autowired - public SyncServiceImpl(UnitMapper unitMapper, UserMapper userMapper, ViewMapper viewMapper, TableMapper tableMapper, - ConceptMapper conceptMapper, DatabaseMapper databaseMapper, ViewRepository viewRepository, - UnitRepository unitRepository, UserRepository userRepository, TableRepository tableRepository, - IdentifierMapper identifierMapper, ConceptRepository conceptRepository, - UnitIdxRepository unitIdxRepository, UserIdxRepository userIdxRepository, - ViewIdxRepository viewIdxRepository, DatabaseRepository databaseRepository, - TableIdxRepository tableIdxRepository, IdentifierRepository identifierRepository, - ConceptIdxRepository conceptIdxRepository, DatabaseIdxRepository databaseIdxRepository, - TableColumnRepository tableColumnRepository, IdentifierIdxRepository identifierIdxRepository, - TableColumnIdxRepository tableColumnIdxRepository) { - this.unitMapper = unitMapper; + public SyncServiceImpl(UserMapper userMapper, ViewMapper viewMapper, TableMapper tableMapper, + OntologyMapper ontologyMapper, DatabaseMapper databaseMapper, ViewRepository viewRepository, + UnitRepository unitRepository, UserRepository userRepository, TableRepository tableRepository, + IdentifierMapper identifierMapper, ConceptRepository conceptRepository, + UnitIdxRepository unitIdxRepository, UserIdxRepository userIdxRepository, + ViewIdxRepository viewIdxRepository, DatabaseRepository databaseRepository, + TableIdxRepository tableIdxRepository, IdentifierRepository identifierRepository, + ConceptIdxRepository conceptIdxRepository, DatabaseIdxRepository databaseIdxRepository, + TableColumnRepository tableColumnRepository, IdentifierIdxRepository identifierIdxRepository, + TableColumnIdxRepository tableColumnIdxRepository) { this.userMapper = userMapper; this.viewMapper = viewMapper; this.tableMapper = tableMapper; - this.conceptMapper = conceptMapper; + this.ontologyMapper = ontologyMapper; this.databaseMapper = databaseMapper; this.viewRepository = viewRepository; this.unitRepository = unitRepository; @@ -87,7 +85,7 @@ public class SyncServiceImpl implements SyncService { /* concepts */ final List<ConceptDto> concepts = conceptRepository.findAll() .stream() - .map(conceptMapper::tableColumnConceptToConceptDto) + .map(ontologyMapper::tableColumnConceptToConceptDto) .toList(); conceptIdxRepository.saveAll(concepts); log.debug("saved {} concepts to open search database", concepts.size()); @@ -122,7 +120,7 @@ public class SyncServiceImpl implements SyncService { /* units */ final List<UnitDto> units = unitRepository.findAll() .stream() - .map(unitMapper::tableColumnUnitToUnitDto) + .map(ontologyMapper::tableColumnUnitToUnitDto) .toList(); unitIdxRepository.saveAll(units); log.debug("saved {} units to open search database", units.size()); diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java deleted file mode 100644 index 8d2be2f3d38bee4ed80ba3c25b724a95713dc062..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.table.Table; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.service.*; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Log4j2 -@Service -public class TableServiceImpl implements TableService { - - private final TableRepository tableRepository; - - @Autowired - public TableServiceImpl(TableRepository tableRepository) { - this.tableRepository = tableRepository; - } - - @Override - @Transactional(readOnly = true) - public List<Table> findAll() { - return tableRepository.findAll(); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/UnitServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/UnitServiceImpl.java deleted file mode 100644 index 996dfb3296d0155af58ddb10fdb1ab9837b20c5b..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/UnitServiceImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.repository.mdb.UnitRepository; -import at.tuwien.service.UnitService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class UnitServiceImpl implements UnitService { - - private final UnitRepository unitRepository; - - @Autowired - public UnitServiceImpl(UnitRepository unitRepository) { - this.unitRepository = unitRepository; - } - - @Override - @Transactional(readOnly = true) - public List<TableColumnUnit> findAll() { - return unitRepository.findAll(); - } -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index e6785bd5ce8554288f996debd88cb8a286133586..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - @Transactional(readOnly = true) - public List<User> findAll() { - return userRepository.findAll(); - } - -} diff --git a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java deleted file mode 100644 index 16d5574cd8e9b4667d5ec5e52b71c59bde9851c9..0000000000000000000000000000000000000000 --- a/dbrepo-search-sync-agent/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.View; -import at.tuwien.repository.mdb.ViewRepository; -import at.tuwien.service.ViewService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Log4j2 -@Service -public class ViewServiceImpl implements ViewService { - - private final ViewRepository viewRepository; - - @Autowired - public ViewServiceImpl(ViewRepository viewRepository) { - this.viewRepository = viewRepository; - } - - @Override - @Transactional(readOnly = true) - public List<View> findAll() { - return viewRepository.findAll(); - } - -} diff --git a/dbrepo-semantics-service/.gitignore b/dbrepo-semantics-service/.gitignore deleted file mode 100644 index 7731f1adf24dc32351fdde402faa04b19e2f389f..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### Generated ### -ready - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-semantics-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-semantics-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-semantics-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-semantics-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-semantics-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-semantics-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-semantics-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-semantics-service/Dockerfile b/dbrepo-semantics-service/Dockerfile deleted file mode 100644 index 8a332ae36cf29a8f932f0cbb9313e91b69e1a86d..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV LOG_LEVEL=debug -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./semantics-service.jar - -EXPOSE 9091 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./semantics-service.jar"] diff --git a/dbrepo-semantics-service/README.md b/dbrepo-semantics-service/README.md deleted file mode 100644 index 859ab6d6acf70e7fd13bdd9c10b666796de55538..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Semantics Service - -## Actuator - -- Actuator Info: http://localhost:9097/actuator/info -- Actuator Health: http://localhost:9097/actuator/health -- Actuator Prometheus: http://localhost:9097/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9097/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9097/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-semantics-service/mvnw b/dbrepo-semantics-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-semantics-service/mvnw.cmd b/dbrepo-semantics-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-semantics-service/pom.xml b/dbrepo-semantics-service/pom.xml deleted file mode 100644 index f9ee92778cce7d67ab09b790a569e2ce6b539e88..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/pom.xml +++ /dev/null @@ -1,255 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-semantics-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-semantics-service</name> - <description>Service that manages the tables</description> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <swagger.version>2.2.9</swagger.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <opencsv.version>5.7.1</opencsv.version> - <super-csv.version>2.4.0</super-csv.version> - <jsql.version>4.6</jsql.version> - <c3p0.version>0.9.5.5</c3p0.version> - <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> - <apache-jena.version>4.8.0</apache-jena.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Entities and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.hsqldb</groupId> - <artifactId>hsqldb</artifactId> - <version>${hsqldb.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - </dependency> - <!-- RDF --> - <dependency> - <groupId>org.apache.jena</groupId> - <artifactId>jena-core</artifactId> - <version>${apache-jena.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jena</groupId> - <artifactId>jena-arq</artifactId> - <version>${apache-jena.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jena</groupId> - <artifactId>jena-fuseki-fulljar</artifactId> - <version>${apache-jena.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - <include>**/*.rdf</include> - <include>**/*.ttl</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>**/DbrepoSemanticsServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-semantics-service/report/pom.xml b/dbrepo-semantics-service/report/pom.xml deleted file mode 100644 index d8ee5dded0ab744a1c12ea86d7e549cda654d89c..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/report/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-semantics-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.3.0</version> - <name>dbrepo-semantics-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/pom.xml b/dbrepo-semantics-service/rest-service/pom.xml deleted file mode 100644 index b2ca890c1faa5e04191bbeb49f9faf97feb973a3..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-semantics-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-semantics-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java deleted file mode 100644 index bf0db3b8f8ebbd0331b9e5f542764dd2ae06a99f..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien; - -import org.apache.jena.sys.JenaSystem; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; - -@EnableJpaAuditing -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoSemanticsServiceApplication { - - public static void main(String[] args) { - JenaSystem.init(); - SpringApplication.run(DbrepoSemanticsServiceApplication.class, args); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index ce076d891f4f563000502aeab5120732ed629a71..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.servers.Server; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository Semantic Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the tables") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Sourcecode Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services")) - .servers(List.of(new Server() - .description("Generated server url") - .url("http://localhost:9097"), - new Server() - .description("Sandbox") - .url("https://dbrepo2.tuwien.ac.at"))); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("semantics-service") - .pathsToMatch("/api/**") - .build(); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java deleted file mode 100644 index 159f8c1eceaf230412dbacc1099f2c16675608b4..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/QueryEndpoint.java +++ /dev/null @@ -1,103 +0,0 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.semantics.*; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.FilterBadRequestException; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.UriMalformedException; -import at.tuwien.service.OntologyService; -import at.tuwien.service.QueryService; -import io.micrometer.core.annotation.Timed; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.ArraySchema; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import jakarta.validation.constraints.NotNull; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@Log4j2 -@CrossOrigin(origins = "*") -@RestController -@RequestMapping("/api/semantic") -public class QueryEndpoint { - - private final QueryService queryService; - private final OntologyService ontologyService; - - @Autowired - public QueryEndpoint(QueryService queryService, OntologyService ontologyService) { - this.queryService = queryService; - this.ontologyService = ontologyService; - } - - @GetMapping("/ontology/{id}/entity") - @PreAuthorize("hasAuthority('execute-semantic-query')") - @Timed(value = "semantics.find", description = "Time needed to find entities") - @Operation(summary = "Find entities", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", - description = "Found entities", - content = {@Content( - mediaType = "application/json", - array = @ArraySchema(schema = @Schema(implementation = EntityDto.class)))}), - @ApiResponse(responseCode = "400", - description = "Filter params are invalid", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "404", - description = "Could not find ontology", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "417", - description = "Generated query or uri is malformed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - }) - public ResponseEntity<List<EntityDto>> find(@NotNull @PathVariable("id") Long id, - @RequestParam(name = "label", required = false) String label, - @RequestParam(name = "uri", required = false) String uri) - throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, FilterBadRequestException { - log.debug("endpoint find entities by uri, id={}, label={}, uri={}", id, label, uri); - final Ontology ontology = ontologyService.find(id); - /* check */ - if ((label != null && uri != null) || (label == null && uri == null)) { - log.error("Failed to find entities: either label or uri must be defined"); - throw new FilterBadRequestException("Failed to find entities: either label or uri must be defined"); - } - if (uri != null && !uri.startsWith(ontology.getUri())) { - log.error("Failed to find entities: uri {} does not start with expected ontology uri {}", uri, ontology.getUri()); - throw new UriMalformedException("Failed to find entity: uri " + uri + " does not start with expected ontology uri " + ontology.getUri()); - } - if (ontology.getSparqlEndpoint() == null) { - log.error("Failed to find SPARQL endpoint for ontology with id {}", ontology.getId()); - throw new OntologyNotFoundException("Failed to find SPARQL endpoint for ontology with id " + ontology.getId()); - } - /* get */ - final List<EntityDto> dtos; - if (uri != null) { - dtos = queryService.findByUri(ontology, uri); - log.trace("find entities resulted in dtos {}", dtos); - return ResponseEntity.ok() - .body(dtos); - } - dtos = queryService.findByLabel(ontology, label); - log.trace("find entities resulted in dtos {}", dtos); - return ResponseEntity.ok() - .body(dtos); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java deleted file mode 100644 index 3ce65ac4519e811467857b25c841a867dc38315c..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java +++ /dev/null @@ -1,106 +0,0 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableColumnNotFoundException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.service.TableService; -import io.micrometer.core.annotation.Timed; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.ArraySchema; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import jakarta.validation.constraints.NotNull; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@Log4j2 -@CrossOrigin(origins = "*") -@RestController -@RequestMapping("/api/semantic/database/{databaseId}/table/{tableId}") -public class TableEndpoint { - - private final TableService tableService; - - @Autowired - public TableEndpoint(TableService tableService) { - this.tableService = tableService; - } - - @GetMapping - @Transactional(readOnly = true) - @PreAuthorize("hasAuthority('table-semantic-analyse')") - @Timed(value = "semantics.table.analyse", description = "Time needed to analyse table semantics") - @Operation(summary = "Suggest table semantics", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", - description = "Suggested table semantics successfully", - content = {@Content( - mediaType = "application/json", - array = @ArraySchema(schema = @Schema(implementation = TableColumnEntityDto.class)))}), - @ApiResponse(responseCode = "404", - description = "Could not find the table", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "417", - description = "Generated query is malformed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - }) - public ResponseEntity<List<EntityDto>> analyseTable(@NotNull @PathVariable("databaseId") Long databaseId, - @NotNull @PathVariable("tableId") Long tableId) - throws TableNotFoundException, QueryMalformedException { - log.debug("endpoint analyse table semantics, databaseId={}, tableId={}", databaseId, tableId); - final List<EntityDto> dtos = tableService.suggestTableSemantics(databaseId, tableId); - log.trace("analyse table semantics resulted in dtos {}", dtos); - return ResponseEntity.ok() - .body(dtos); - } - - @GetMapping("/column/{columnId}") - @Transactional(readOnly = true) - @PreAuthorize("hasAuthority('table-semantic-analyse')") - @Timed(value = "semantics.table.columnanalyse", description = "Time needed to analyse table column semantics") - @Operation(summary = "Suggest table column semantics", security = @SecurityRequirement(name = "bearerAuth")) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", - description = "Suggested table column semantics successfully", - content = {@Content( - mediaType = "application/json", - array = @ArraySchema(schema = @Schema(implementation = TableColumnEntityDto.class)))}), - @ApiResponse(responseCode = "404", - description = "Could not find the table column", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - @ApiResponse(responseCode = "417", - description = "Generated query is malformed", - content = {@Content( - mediaType = "application/json", - schema = @Schema(implementation = ApiErrorDto.class))}), - }) - public ResponseEntity<List<TableColumnEntityDto>> analyseTableColumn(@NotNull @PathVariable("databaseId") Long databaseId, - @NotNull @PathVariable("tableId") Long tableId, - @NotNull @PathVariable("columnId") Long columnId) - throws QueryMalformedException, TableColumnNotFoundException { - log.debug("endpoint analyse table column semantics, databaseId={}, tableId={}, columnId={}", databaseId, tableId, columnId); - final List<TableColumnEntityDto> dtos = tableService.suggestTableColumnSemantics(databaseId, tableId, columnId); - log.trace("analyse table semantics resulted in dtos {}", dtos); - return ResponseEntity.ok() - .body(dtos); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index 92c33e77bcafb36492436bdad2482911b48598b8..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,78 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({FilterBadRequestException.class}) - public ResponseEntity<ApiErrorDto> handle(FilterBadRequestException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.semantic.filter") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({OntologyNotFoundException.class}) - public ResponseEntity<ApiErrorDto> handle(OntologyNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.ontology.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.EXPECTATION_FAILED) - @ExceptionHandler({QueryMalformedException.class}) - public ResponseEntity<ApiErrorDto> handle(QueryMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.EXPECTATION_FAILED) - .message(e.getLocalizedMessage()) - .code("error.semantic.querymalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({TableNotFoundException.class}) - public ResponseEntity<ApiErrorDto> handle(TableNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.table.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.EXPECTATION_FAILED) - @ExceptionHandler({UriMalformedException.class}) - public ResponseEntity<ApiErrorDto> handle(UriMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.EXPECTATION_FAILED) - .message(e.getLocalizedMessage()) - .code("error.semantic.urimalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml b/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index e4b8076f7b1fecd15d98bfbbbe1b46e16087c114..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,55 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: semantics-service - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: search-db - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9097 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: http://localhost/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB - client_secret: client-secret - client_id: dbrepo-client - gateway.endpoint: http://localhost \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/application.yml b/dbrepo-semantics-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 0e7a2d5556d93d564a77a5c3768c80f002c6def7..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,70 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: semantics-service - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9097 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" - client_secret: "${DBREPO_CLIENT_SECRET}" - client_id: "${CLIENT_ID}" - gateway.endpoint: http://gateway-service \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/config.properties b/dbrepo-semantics-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml b/dbrepo-semantics-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml deleted file mode 100644 index 5d1f8bd44e7e2f044e1effb24191f4262d83dd52..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> -<hibernate-configuration> - <session-factory> - <property name="current_session_context_class">thread</property> - <property name="transaction.coordinator_class">jdbc</property> - <property name="c3p0.min_size">5</property> - <property name="c3p0.max_size">30</property> - <property name="c3p0.acquire_increment">5</property> - <property name="c3p0.timeout">1800</property> - <property name="show_sql">true</property> - <property name="format_sql">true</property> - <property name="hbm2ddl.auto">update</property> - <mapping class="at.tuwien.querystore.Query" /> - <mapping class="at.tuwien.querystore.Table" /> - <mapping class="at.tuwien.querystore.Column" /> - </session-factory> -</hibernate-configuration> diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index a1530c6279fe183093d014507e1d54ac2ea883ee..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @Autowired - private MockMvc mockMvc; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorStatus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java deleted file mode 100644 index 5d6523bd7db1b9861be4d24df872d8eb25f4ba83..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java +++ /dev/null @@ -1,167 +0,0 @@ - -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.semantics.*; -import at.tuwien.endpoints.QueryEndpoint; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.FilterBadRequestException; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.UriMalformedException; -import at.tuwien.repository.sdb.*; -import at.tuwien.service.OntologyService; -import at.tuwien.service.QueryService; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.test.context.support.WithAnonymousUser; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class QueryEndpointUnitTest extends BaseUnitTest { - - @MockBean - private QueryService queryService; - - @MockBean - private OntologyService ontologyService; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @Autowired - private QueryEndpoint queryEndpoint; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @Test - @WithAnonymousUser - public void find_anonymous_fails() { - - /* test */ - assertThrows(AccessDeniedException.class, () -> { - find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, null); - }); - } - - @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) - public void find_noRole_fails() { - - /* test */ - assertThrows(AccessDeniedException.class, () -> { - find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, null); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) - public void find_hasRoleInvalidParams_succeeds() { - - /* test */ - assertThrows(FilterBadRequestException.class, () -> { - find_generic(ONTOLOGY_2_ID, "Apache Jena", "http://www.wikidata.org/entity/Q1686799", ONTOLOGY_2, null); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) - public void find_hasRoleNotOntologyUri_succeeds() { - - /* test */ - assertThrows(UriMalformedException.class, () -> { - find_generic(ONTOLOGY_2_ID, null, "https://wikidata.org/entity/Q1686799", ONTOLOGY_2, null); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) - public void find_hasRoleLabel_succeeds() throws UriMalformedException, QueryMalformedException, - OntologyNotFoundException, FilterBadRequestException { - final EntityDto entityDto = EntityDto.builder() - .label("Apache Jena") - .uri("http://www.wikidata.org/entity/Q1686799") - .build(); - - /* test */ - final List<EntityDto> response = find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, entityDto); - final EntityDto entity0 = response.get(0); - assertEquals("Apache Jena", entity0.getLabel()); - assertEquals("http://www.wikidata.org/entity/Q1686799", entity0.getUri()); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-semantic-query"}) - public void find_hasRoleUri_succeeds() throws UriMalformedException, QueryMalformedException, - OntologyNotFoundException, FilterBadRequestException { - final EntityDto entityDto = EntityDto.builder() - .label("Apache Jena") - .uri("http://www.wikidata.org/entity/Q1686799") - .build(); - - /* test */ - final List<EntityDto> response = find_generic(ONTOLOGY_2_ID, null, "http://www.wikidata.org/entity/Q1686799", ONTOLOGY_2, entityDto); - final EntityDto entity0 = response.get(0); - assertEquals("Apache Jena", entity0.getLabel()); - assertEquals("http://www.wikidata.org/entity/Q1686799", entity0.getUri()); - } - - /* ################################################################################################### */ - /* ## GENERIC TEST CASES ## */ - /* ################################################################################################### */ - - public List<EntityDto> find_generic(Long ontologyId, String label, String uri, Ontology ontology, EntityDto entityDto) - throws OntologyNotFoundException, QueryMalformedException, UriMalformedException, FilterBadRequestException { - - /* mock */ - if (ontology != null) { - when(ontologyService.find(ontologyId)) - .thenReturn(ontology); - } else { - doThrow(OntologyNotFoundException.class) - .when(ontologyService) - .find(ontologyId); - } - if (entityDto != null) { - when(queryService.findByLabel(ontology, label)) - .thenReturn(List.of(entityDto)); - when(queryService.findByUri(ontology, uri)) - .thenReturn(List.of(entityDto)); - } else { - when(queryService.findByLabel(ontology, label)) - .thenReturn(List.of()); - when(queryService.findByUri(ontology, uri)) - .thenReturn(List.of()); - } - - /* test */ - final ResponseEntity<List<EntityDto>> response = queryEndpoint.find(ontologyId, label, uri); - assertEquals(HttpStatus.OK, response.getStatusCode()); - final List<EntityDto> body = response.getBody(); - assertNotNull(body); - return body; - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java deleted file mode 100644 index e55d5ef87e69d86c17126c02974ec327f01e2ea6..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class SwaggerComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @Test - public void swaggerUi_succeeds() throws Exception { - this.mockMvc.perform(get("/swagger-ui/index.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java deleted file mode 100644 index 50a6b5e63176d51b17e476156204d8529c63dcce..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java +++ /dev/null @@ -1,140 +0,0 @@ - -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.semantics.*; -import at.tuwien.endpoints.TableEndpoint; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableColumnNotFoundException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.sdb.*; -import at.tuwien.service.TableService; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.test.context.support.WithAnonymousUser; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class TableEndpointUnitTest extends BaseUnitTest { - - @MockBean - private TableService tableService; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @Autowired - private TableEndpoint tableEndpoint; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @Test - @WithAnonymousUser - public void analyseTable_anonymous_fails() { - - /* test */ - assertThrows(AccessDeniedException.class, () -> { - analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); - }); - } - - @Test - @WithMockUser(username = USER_4_USERNAME) - public void findAll_noRole_fails() { - - /* test */ - assertThrows(AccessDeniedException.class, () -> { - analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"table-semantic-analyse"}) - public void findAll_hasRole_succeeds() throws TableNotFoundException, QueryMalformedException { - - /* test */ - analyseTable_generic(DATABASE_1_ID, TABLE_1_ID); - } - - @Test - @WithAnonymousUser - public void analyseTableColumn_anonymous_fails() { - - /* test */ - assertThrows(AccessDeniedException.class, () -> { - analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); - }); - } - - @Test - @WithMockUser(username = USER_4_USERNAME) - public void analyseTableColumn_noRole_fails() { - - /* test */ - assertThrows(AccessDeniedException.class, () -> { - analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); - }); - } - - @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {"table-semantic-analyse"}) - public void analyseTableColumn_hasRole_succeeds() throws QueryMalformedException, TableColumnNotFoundException { - - /* test */ - analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); - } - - /* ################################################################################################### */ - /* ## GENERIC TEST CASES ## */ - /* ################################################################################################### */ - - public void analyseTable_generic(Long databaseId, Long tableId) throws TableNotFoundException, QueryMalformedException { - - /* mock */ - when(tableService.suggestTableSemantics(databaseId, tableId)) - .thenReturn(List.of()); - - /* test */ - final ResponseEntity<List<EntityDto>> response = tableEndpoint.analyseTable(databaseId, tableId); - assertEquals(HttpStatus.OK, response.getStatusCode()); - final List<EntityDto> body = response.getBody(); - assertNotNull(body); - } - - public void analyseTableColumn_generic(Long databaseId, Long tableId, Long columnId) throws QueryMalformedException, - TableColumnNotFoundException { - - /* mock */ - when(tableService.suggestTableColumnSemantics(databaseId, tableId, columnId)) - .thenReturn(List.of()); - - /* test */ - final ResponseEntity<List<TableColumnEntityDto>> response = tableEndpoint.analyseTableColumn(databaseId, tableId, columnId); - assertEquals(HttpStatus.OK, response.getStatusCode()); - final List<TableColumnEntityDto> body = response.getBody(); - assertNotNull(body); - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java deleted file mode 100644 index 9ad5afda53575579a51cd64a198b7028625d6077..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.OntologyRepository; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@Log4j2 -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class OntologyServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @Autowired - private OntologyService ontologyService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private OntologyRepository ontologyRepository; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - ontologyRepository.save(ONTOLOGY_1); - ontologyRepository.save(ONTOLOGY_2); - } - - @Test - public void findAll_succeeds() { - - /* test */ - final List<Ontology> response = ontologyService.findAll(); - assertEquals(2, response.size()); - } - - @Test - public void find_succeeds() throws OntologyNotFoundException { - - /* test */ - final Ontology response = ontologyService.find(ONTOLOGY_1_ID); - assertEquals(ONTOLOGY_1_ID, response.getId()); - assertEquals(ONTOLOGY_1_URI, response.getUri()); - } - - @Test - public void find_fails() { - - /* test */ - assertThrows(OntologyNotFoundException.class, () -> { - ontologyService.find(9999L); - }); - } - - @Test - public void create_succeeds() throws UserNotFoundException { - - /* test */ - final Ontology response = ontologyService.create(ONTOLOGY_3_CREATE_DTO, USER_1_PRINCIPAL); - assertEquals(ONTOLOGY_3_ID, response.getId()); - assertEquals(ONTOLOGY_3_URI, response.getUri()); - } - - @Test - public void create_notFound_fails() { - - /* test */ - assertThrows(UserNotFoundException.class, () -> { - ontologyService.create(ONTOLOGY_3_CREATE_DTO, USER_3_PRINCIPAL); - }); - } - - @Test - public void delete_succeeds() throws OntologyNotFoundException { - - /* test */ - ontologyService.delete(ONTOLOGY_1_ID); - } - - @Test - public void delete_fails() { - - /* test */ - assertThrows(OntologyNotFoundException.class, () -> { - ontologyService.delete(9999L); - }); - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java deleted file mode 100644 index da1f1cc5a0b583f2377c5e2632256442d135d8ba..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java +++ /dev/null @@ -1,142 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.repository.mdb.OntologyRepository; -import at.tuwien.repository.mdb.RealmRepository; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@Log4j2 -@SpringBootTest -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@ExtendWith(SpringExtension.class) -public class QueryServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private OntologyRepository ontologyRepository; - - @Autowired - private QueryService queryService; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @BeforeEach - public void beforeEach() { - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1); - ontologyRepository.saveAll(List.of(ONTOLOGY_1, ONTOLOGY_2, ONTOLOGY_3, ONTOLOGY_4)); - } - - @Test - public void findByLabel_wikidata_succeeds() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByLabel(ONTOLOGY_2, "Apache Jena"); - assertEquals(1, response.size()); - final EntityDto entity0 = response.get(0); - assertEquals("Apache Jena", entity0.getLabel()); - assertNotNull(entity0.getDescription()) /* user provided */; - } - - @Test - @Disabled - public void findByLabel_measurements_fails() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByLabel(ONTOLOGY_1, "tonne"); - assertEquals(1, response.size()); - final EntityDto entity0 = response.get(0); - assertEquals(UNIT_2_NAME, entity0.getLabel()); - assertNull(UNIT_2_URI); - assertNull(UNIT_2_DESCRIPTION); - } - - @Test - public void findByLabel_dbpedia_succeeds() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByLabel(ONTOLOGY_5, "person"); - assertTrue(response.size() >= 1); - final EntityDto entity0 = response.get(0); - assertEquals("person", entity0.getLabel()); - assertNull(entity0.getDescription()); - } - - @Test - public void findByLabel_fails() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByLabel(ONTOLOGY_2, "apache jena"); - assertEquals(0, response.size()); - } - - @Test - public void findByUri_wikidata_succeeds() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByUri(ONTOLOGY_2, COLUMN_CONCEPT_TEMPERATURE_URI); - assertEquals(1, response.size()); - final EntityDto entity0 = response.get(0); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_URI, entity0.getUri()); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_NAME, entity0.getLabel()); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION, entity0.getDescription()); - } - - @Test - @Disabled - public void findByUri_measurements_fails() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByUri(ONTOLOGY_1, UNIT_2_URI); - assertEquals(1, response.size()); - final EntityDto entity0 = response.get(0); - assertEquals(UNIT_2_URI, entity0.getUri()); - assertNull(UNIT_2_NAME); - assertNull(UNIT_2_DESCRIPTION); - } - - @Test - public void findByUri_dbpedia_fails() throws QueryMalformedException { - - /* test */ - final List<EntityDto> response = queryService.findByUri(ONTOLOGY_5, "http://dbpedia.org/ontology/person"); - assertEquals(1, response.size()); - final EntityDto entity0 = response.get(0); - assertEquals("http://dbpedia.org/ontology/person", entity0.getUri()); - assertEquals("person", entity0.getLabel()); - assertNull(entity0.getDescription()); - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java deleted file mode 100644 index 38bd58b1290fdf63217162106d32b35ed41ea1fb..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java +++ /dev/null @@ -1,146 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class SemanticServiceUnitTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableColumnConceptRepository tableColumnConceptRepository; - - @MockBean - private TableColumnUnitRepository tableColumnUnitRepository; - - @Autowired - private SemanticService semanticService; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @Test - public void findAllConcepts_succeeds() { - - /* mock */ - when(tableColumnConceptRepository.findAll()) - .thenReturn(List.of(COLUMN_CONCEPT_TEMPERATURE)); - - /* test */ - final List<TableColumnConcept> response = semanticService.findAllConcepts(); - assertEquals(1, response.size()); - final TableColumnConcept concept0 = response.get(0); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_URI, concept0.getUri()); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_NAME, concept0.getName()); - } - - @Test - public void findAllUnit_succeeds() { - - /* mock */ - when(tableColumnUnitRepository.findAll()) - .thenReturn(List.of(UNIT_1)); - - /* test */ - final List<TableColumnUnit> response = semanticService.findAllUnits(); - assertEquals(1, response.size()); - final TableColumnUnit unit0 = response.get(0); - assertEquals(UNIT_1_URI, unit0.getUri()); - assertEquals(UNIT_1_NAME, unit0.getName()); - assertEquals(UNIT_1_DESCRIPTION, unit0.getDescription()); - } - - @Test - public void saveUnit_exists_succeeds() { - - /* mock */ - when(unitIdxRepository.save(any(UnitDto.class))) - .thenReturn(UNIT_1_DTO); - when(tableColumnUnitRepository.save(any(TableColumnUnit.class))) - .thenReturn(UNIT_1); - - /* test */ - final TableColumnUnit response = semanticService.saveUnit(UNIT_1_SAVE_DTO); - assertEquals(UNIT_1_URI, response.getUri()); - assertEquals(UNIT_1_NAME, response.getName()); - assertEquals(UNIT_1_DESCRIPTION, response.getDescription()); - } - - @Test - public void saveUnit_succeeds() { - - /* mock */ - when(unitIdxRepository.save(any(UnitDto.class))) - .thenReturn(UNIT_2_DTO); - when(tableColumnUnitRepository.save(any(TableColumnUnit.class))) - .thenReturn(UNIT_2); - - /* test */ - final TableColumnUnit response = semanticService.saveUnit(UNIT_2_SAVE_DTO); - assertEquals(UNIT_2_URI, response.getUri()); - assertEquals(UNIT_2_NAME, response.getName()); - assertEquals(UNIT_2_DESCRIPTION, response.getDescription()); - } - - @Test - public void saveConcept_exists_succeeds() { - - /* mock */ - when(conceptIdxRepository.save(any(ConceptDto.class))) - .thenReturn(COLUMN_CONCEPT_TEMPERATURE_DTO); - when(tableColumnConceptRepository.save(any(TableColumnConcept.class))) - .thenReturn(COLUMN_CONCEPT_TEMPERATURE); - - /* test */ - final TableColumnConcept response = semanticService.saveConcept(COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_URI, response.getUri()); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_NAME, response.getName()); - assertEquals(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION, response.getDescription()); - } - - @Test - public void saveConcept_succeeds() { - - /* mock */ - when(conceptIdxRepository.save(any(ConceptDto.class))) - .thenReturn(COLUMN_CONCEPT_FAIR_DATA_DTO); - when(tableColumnConceptRepository.save(any(TableColumnConcept.class))) - .thenReturn(COLUMN_CONCEPT_FAIR_DATA); - - /* test */ - final TableColumnConcept response = semanticService.saveConcept(COLUMN_CONCEPT_FAIR_DATA_SAVE_DTO); - assertEquals(COLUMN_CONCEPT_FAIR_DATA_URI, response.getUri()); - assertEquals(COLUMN_CONCEPT_FAIR_DATA_NAME, response.getName()); - assertEquals(COLUMN_CONCEPT_FAIR_DATA_DESCRIPTION, response.getDescription()); - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java deleted file mode 100644 index 29ef5b7c39c3c2025cdb9bf9978782b8e3022127..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableColumnNotFoundException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.mdb.OntologyRepository; -import at.tuwien.repository.mdb.TableColumnRepository; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.when; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class TableServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableRepository tableRepository; - - @MockBean - private OntologyRepository ontologyRepository; - - @MockBean - private TableColumnRepository tableColumnRepository; - - @Autowired - private TableService tableService; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @Test - public void suggestTableSemantics_success() throws TableNotFoundException, QueryMalformedException { - - /* mock */ - when(tableRepository.findByDatabaseIdAndId(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - when(ontologyRepository.findAll()) - .thenReturn(List.of(ONTOLOGY_1, ONTOLOGY_2, ONTOLOGY_3, ONTOLOGY_4, ONTOLOGY_5)); - - /* test */ - final List<EntityDto> response = tableService.suggestTableSemantics(DATABASE_1_ID, TABLE_1_ID); - assertNotNull(response); - } - - @Test - public void suggestTableColumnSemantics_success() throws QueryMalformedException, TableColumnNotFoundException { - - /* mock */ - when(tableColumnRepository.findById(anyLong())) - .thenReturn(Optional.of(TABLE_1_COLUMNS.get(0))); - when(ontologyRepository.findAll()) - .thenReturn(List.of(ONTOLOGY_1, ONTOLOGY_2, ONTOLOGY_3, ONTOLOGY_4, ONTOLOGY_5)); - - /* test */ - final List<TableColumnEntityDto> response = tableService.suggestTableColumnSemantics(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID); - assertNotNull(response); - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java deleted file mode 100644 index 23602062cf3f44b49ddd8a4e97e22dfb6554405f..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.repository.sdb.*; -import lombok.extern.log4j.Log4j2; -import org.apache.jena.sys.JenaSystem; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; - -@Log4j2 -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class TableServiceUnitTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableRepository tableRepository; - - @Autowired - private TableService tableService; - - @BeforeAll - public static void beforeAll() { - JenaSystem.init(); - } - - @Test - public void find_success() throws TableNotFoundException { - - /* mock */ - when(tableRepository.findByDatabaseIdAndId(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - - /* test */ - final Table response = tableService.find(DATABASE_1_ID, TABLE_1_ID); - assertEquals(TABLE_1_ID, response.getId()); - } - - @Test - public void find_fails() { - - /* mock */ - when(tableRepository.findByDatabaseIdAndId(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.empty()); - - /* test */ - assertThrows(TableNotFoundException.class, () -> { - tableService.find(DATABASE_1_ID, TABLE_1_ID); - }); - } -} diff --git a/dbrepo-semantics-service/rest-service/src/test/resources/application.properties b/dbrepo-semantics-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 302797747d9c1a746cdc6a930fd21b847535210a..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,28 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# internal datasource -spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver -spring.datasource.url=jdbc:hsqldb:mem:testdb;db_close_delay=-1;sql.syntax_mys=true -spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect -spring.datasource.username=root -spring.datasource.password=dbrepo -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# log -logging.level.org.hibernate.SQL=trace - -# rabbitmq -spring.rabbitmq.host=dbrepo-broker-service -spring.rabbitmq.virtual-host=/ -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-semantics-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/src/test/resources/species/Species.sql b/dbrepo-semantics-service/rest-service/src/test/resources/species/Species.sql deleted file mode 100644 index 957368fcc773ecf22f419585b50206ad56359bc9..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/rest-service/src/test/resources/species/Species.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* https://sandbox.zenodo.org/api/files/6aca3421-add3-489b-8c4a-35228fe5c683/species_id.csv */ -CREATE TABLE maldi_ms_data -( - qu VARCHAR(255) NOT NULL, - species VARCHAR(255) NOT NULL, - score VARCHAR(255) NOT NULL -) WITH SYSTEM VERSIONING; \ No newline at end of file diff --git a/dbrepo-semantics-service/rest-service/src/test/resources/traffic/TrafficCh.sql b/dbrepo-semantics-service/rest-service/src/test/resources/traffic/TrafficCh.sql deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-semantics-service/rest-service/src/test/resources/weather/WeatherAus.sql b/dbrepo-semantics-service/rest-service/src/test/resources/weather/WeatherAus.sql deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java deleted file mode 100644 index 92b60f4f8a5ed8a566e2504d71b63478b1593f68..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.auth; - -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.DecodedJWT; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.util.Arrays; -import java.util.Base64; -import java.util.stream.Collectors; - -@Slf4j -public class AuthTokenFilter extends OncePerRequestFilter { - - @Value("${fda.jwt.issuer}") - private String issuer; - - @Value("${fda.jwt.public_key}") - private String publicKey; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - final String jwt = parseJwt(request); - if (jwt != null) { - final UserDetails userDetails = verifyJwt(jwt); - log.debug("authenticated user {}", userDetails); - final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(request, response); - } - - public UserDetails verifyJwt(String token) throws ServletException { - final KeyFactory kf; - try { - kf = KeyFactory.getInstance("RSA"); - } catch (NoSuchAlgorithmException e) { - log.error("Failed to find RSA algorithm"); - throw new ServletException("Failed to find RSA algorithm", e); - } - final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); - final RSAPublicKey pubKey; - try { - pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); - } catch (InvalidKeySpecException e) { - log.error("Provided public key is invalid"); - throw new ServletException("Provided public key is invalid", e); - } - final Algorithm algorithm = Algorithm.RSA256(pubKey, null); - JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(issuer) - .withAudience("spring") - .build(); - final DecodedJWT jwt = verifier.verify(token); - final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); - return UserDetailsDto.builder() - .username(jwt.getClaim("client_id").asString()) - .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) - .build(); - } - - /** - * Parses the token from the HTTP header of the request - * - * @param request The request. - * @return The token. - */ - public String parseJwt(HttpServletRequest request) { - String headerAuth = request.getHeader("Authorization"); - if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); - } - return null; - } -} \ No newline at end of file diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index d89fef950ad78e4eb1a82fa2385b8f9d6a0cf2a8..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package at.tuwien.config; - -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Getter -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index 8b4729dcf0ff8a056f66a1881fff2e66813a2176..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,96 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import jakarta.servlet.http.HttpServletResponse; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/semantic/ontology/**", "GET"), - new AntPathRequestMatcher("/api/semantic/concept", "GET"), - new AntPathRequestMatcher("/api/semantic/unit", "GET") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java deleted file mode 100644 index 751bc2fb7ab5b6a8251b68e7e51808ae13d8d3c1..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.EXPECTATION_FAILED) -public class QueryMalformedException extends Exception { - - public QueryMalformedException(String msg) { - super(msg); - } - - public QueryMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java deleted file mode 100644 index 89fa3ed467e76998431c2b366bceb83804824f38..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class TableNotFoundException extends Exception { - - public TableNotFoundException(String msg) { - super(msg); - } - - public TableNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public TableNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index f758f7ddf3b3a9d28b2bfc7584a829e41d7c125f..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String msg) { - super(msg); - } - - public UserNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/TableMapper.java deleted file mode 100644 index de566881e569f57ef09b27d43ac7cf57cae5abd5..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/mapper/TableMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.table.columns.ColumnBriefDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.entities.database.table.columns.TableColumn; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - - -@Mapper(componentModel = "spring") -public interface TableMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(TableMapper.class); - - @Mappings({ - @Mapping(target = "tableId", source = "table.id"), - }) - ColumnBriefDto tableColumnToColumnBriefDto(TableColumn data); - - @Mappings({ - @Mapping(target = "tableId", source = "table.id"), - }) - ColumnDto tableColumnToColumnDto(TableColumn data); -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index f41d2aa3fae70608ac913bde9ae299d57ce5b0a4..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java deleted file mode 100644 index c11a773abc70ade28fdf7aa45845043fafcdd314..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.Database; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface DatabaseRepository extends JpaRepository<Database, Long> { - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index 046fd51c3edd4a04becd27a2017cb38c88278ac7..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java deleted file mode 100644 index fab911633e762bcca06113efbbed06e01f2e4e0f..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.semantics.Ontology; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface OntologyRepository extends JpaRepository<Ontology, Long> { - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 7b53e7245983c7ca848da7c1175e0158e2f2a930..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java deleted file mode 100644 index 004f202d036ccec03c8ccaf10d206b70ed50922a..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumn; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableColumnRepository extends JpaRepository<TableColumn, Long> { - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java deleted file mode 100644 index 051a51f9439a2a6fb88047133b687b78885427f8..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.Table; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface TableRepository extends JpaRepository<Table, Long> { - - Optional<Table> findByDatabaseIdAndId(Long databaseId, Long tableId); - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index 42d09c3e9eaecff5b277e10a724ebfb857a91c8b..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - Optional<User> findByUsername(String username); - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java deleted file mode 100644 index 5b7301819e945ea130bb868f90ef0fcb03474266..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface UnitIdxRepository extends ElasticsearchRepository<UnitDto, String> { -} \ No newline at end of file diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/QueryService.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/QueryService.java deleted file mode 100644 index 5ab8bda66dd267fdd6275ce3d4ef4026d11569ea..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/QueryService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.QueryMalformedException; - -import java.util.List; - -public interface QueryService { - - List<EntityDto> findByLabel(Ontology ontology, String label) throws QueryMalformedException; - - List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws QueryMalformedException; - - List<EntityDto> findByUri(Ontology ontology, String uri) throws QueryMalformedException; -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/SemanticService.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/SemanticService.java deleted file mode 100644 index 564b739af08341c7c1684e343ab36898bed354b7..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/SemanticService.java +++ /dev/null @@ -1,18 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnUnit; - -import java.util.List; - -public interface SemanticService { - List<TableColumnConcept> findAllConcepts(); - - List<TableColumnUnit> findAllUnits(); - - TableColumnConcept saveConcept(ConceptSaveDto data); - - TableColumnUnit saveUnit(UnitSaveDto data); -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/TableService.java deleted file mode 100644 index e1294a942533feea38029ceefd0002995fa13d3b..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/TableService.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableColumnNotFoundException; -import at.tuwien.exception.TableNotFoundException; - -import java.util.List; - -public interface TableService { - Table find(Long databaseId, Long tableId) throws TableNotFoundException; - - List<EntityDto> suggestTableSemantics(Long databaseId, Long tableId) throws TableNotFoundException, - QueryMalformedException; - - List<TableColumnEntityDto> suggestTableColumnSemantics(Long databaseId, Long tableId, Long columnId) - throws QueryMalformedException, TableColumnNotFoundException; -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index 6de26b3ffc045f5b7c4ac19223581e0f73a98b86..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,8 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -public interface UserService { - User findByUsername(String username) throws UserNotFoundException; -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java deleted file mode 100644 index fd2365ac621fa275238c22d120cf312340739784..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java +++ /dev/null @@ -1,79 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.mapper.OntologyMapper; -import at.tuwien.repository.mdb.TableColumnConceptRepository; -import at.tuwien.repository.mdb.TableColumnUnitRepository; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import at.tuwien.service.SemanticService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Log4j2 -@Service -public class SemanticServiceImpl implements SemanticService { - - private final OntologyMapper ontologyMapper; - private final UnitIdxRepository unitIdxRepository; - private final ConceptIdxRepository conceptIdxRepository; - private final TableColumnUnitRepository tableColumnUnitRepository; - private final TableColumnConceptRepository tableColumnConceptRepository; - - @Autowired - public SemanticServiceImpl(TableColumnConceptRepository tableColumnConceptRepository, - TableColumnUnitRepository tableColumnUnitRepository, OntologyMapper ontologyMapper, - UnitIdxRepository unitIdxRepository, ConceptIdxRepository conceptIdxRepository) { - this.ontologyMapper = ontologyMapper; - this.unitIdxRepository = unitIdxRepository; - this.conceptIdxRepository = conceptIdxRepository; - this.tableColumnUnitRepository = tableColumnUnitRepository; - this.tableColumnConceptRepository = tableColumnConceptRepository; - } - - @Override - @Transactional(readOnly = true) - public List<TableColumnConcept> findAllConcepts() { - return tableColumnConceptRepository.findAll(); - } - - @Override - @Transactional(readOnly = true) - public List<TableColumnUnit> findAllUnits() { - return tableColumnUnitRepository.findAll(); - } - - @Override - @Transactional - public TableColumnConcept saveConcept(ConceptSaveDto data) { - final TableColumnConcept entity = ontologyMapper.conceptSaveDtoToTableColumnConcept(data); - /* save in metadata database */ - final TableColumnConcept concept = tableColumnConceptRepository.save(entity); - log.info("Saved concept with id {} in metadata database", concept.getId()); - /* save in open search database */ - conceptIdxRepository.save(ontologyMapper.tableColumnConceptToConceptDto(concept)); - log.info("Saved concept with id {} in open search database", concept.getId()); - return concept; - } - - @Override - @Transactional - public TableColumnUnit saveUnit(UnitSaveDto data) { - final TableColumnUnit entity = ontologyMapper.unitSaveDtoToTableColumnUnit(data); - /* save in metadata database */ - final TableColumnUnit unit = tableColumnUnitRepository.save(entity); - log.info("Saved unit with id {} in metadata database", unit.getId()); - /* save in open search database */ - unitIdxRepository.save(ontologyMapper.tableColumnUnitToUnitDto(unit)); - log.info("Saved unit with id {} in open search database", unit.getId()); - return unit; - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java deleted file mode 100644 index d4c2c6f267718d375cdff88173574b45aa0fd68d..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ /dev/null @@ -1,94 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableColumnNotFoundException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.mdb.TableColumnRepository; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.service.OntologyService; -import at.tuwien.service.QueryService; -import at.tuwien.service.TableService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; - -@Log4j2 -@Service -public class TableServiceImpl implements TableService { - - private final QueryService queryService; - private final OntologyService ontologyService; - private final TableRepository tableRepository; - private final TableColumnRepository tableColumnRepository; - - @Autowired - public TableServiceImpl(OntologyService ontologyService, TableRepository tableRepository, QueryService queryService, - TableColumnRepository tableColumnRepository) { - this.queryService = queryService; - this.ontologyService = ontologyService; - this.tableRepository = tableRepository; - this.tableColumnRepository = tableColumnRepository; - } - - @Override - @Transactional(readOnly = true) - public Table find(Long databaseId, Long tableId) throws TableNotFoundException { - final Optional<Table> optional = tableRepository.findByDatabaseIdAndId(databaseId, tableId); - if (optional.isEmpty()) { - log.error("Failed to find table with id {} in database with id {}", tableId, databaseId); - throw new TableNotFoundException("Failed to find table with id " + tableId + " in database with id " + databaseId); - } - return optional.get(); - } - - @Override - @Transactional(readOnly = true) - public List<EntityDto> suggestTableSemantics(Long databaseId, Long tableId) throws TableNotFoundException, - QueryMalformedException { - final Table table = find(databaseId, tableId); - final List<EntityDto> suggestions = new LinkedList<>(); - for (Ontology ontology : ontologyService.findAll()) { - suggestions.addAll(queryService.findByLabel(ontology, table.getName(), 3)); - } - log.debug("suggested {} semantic entities total", suggestions.size()); - return suggestions; - } - - @Override - @Transactional(readOnly = true) - public List<TableColumnEntityDto> suggestTableColumnSemantics(Long databaseId, Long tableId, Long columnId) - throws QueryMalformedException, TableColumnNotFoundException { - final Optional<TableColumn> optional = tableColumnRepository.findById(columnId); - if (optional.isEmpty()) { - log.error("Failed to find column with id {}", columnId); - throw new TableColumnNotFoundException("Failed to find column with id " + columnId); - } - final List<TableColumnEntityDto> suggestions = new LinkedList<>(); - for (Ontology ontology : ontologyService.findAll()) { - suggestions.addAll(queryService.findByLabel(ontology, optional.get().getName(), 3) - .stream() - .map(e -> TableColumnEntityDto.builder() - .databaseId(databaseId) - .tableId(tableId) - .columnId(optional.get().getId()) - .label(e.getLabel()) - .uri(e.getUri()) - .description(e.getDescription()) - .build()) - .toList()); - } - log.debug("suggested {} semantic entities total", suggestions.size()); - return suggestions; - } - -} diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 43e1ae2d23b34719f8cf2e70cb9b6e6c46acec8e..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to find user with username {}", username); - throw new UserNotFoundException("Failed to find user with username " + username); - } - return optional.get(); - } - -} diff --git a/dbrepo-table-service/.gitignore b/dbrepo-table-service/.gitignore deleted file mode 100644 index 7731f1adf24dc32351fdde402faa04b19e2f389f..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### Generated ### -ready - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-table-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-table-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-table-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-table-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-table-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-table-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-table-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-table-service/Dockerfile b/dbrepo-table-service/Dockerfile deleted file mode 100644 index 97f157891fb6605f846c399b96115c81a0d553de..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV BROKER_USERNAME=fda -ENV BROKER_PASSWORD=fda -ENV SHARED_FILESYSTEM=/tmp -ENV USER_NETWORK=userdb -ENV LOG_LEVEL=debug -ENV CLIENT_ID="dbrepo-client" -ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG" -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./table-service.jar - -EXPOSE 9091 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./table-service.jar"] diff --git a/dbrepo-table-service/README.md b/dbrepo-table-service/README.md deleted file mode 100644 index 2275ec5de6998edff88c3a17af407272d3c4d44e..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Semantics Service - -## Actuator - -- Actuator Info: http://localhost:9094/actuator/info -- Actuator Health: http://localhost:9094/actuator/health -- Actuator Prometheus: http://localhost:9094/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9094/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9094/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-table-service/mvnw b/dbrepo-table-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-table-service/mvnw.cmd b/dbrepo-table-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-table-service/pom.xml b/dbrepo-table-service/pom.xml deleted file mode 100644 index bb378a62f7ed35f874f6dc5cfa72611dc4cc7b5c..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/pom.xml +++ /dev/null @@ -1,299 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-table-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-table-service</name> - <description>Service that manages the tables</description> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <opencsv.version>5.7.1</opencsv.version> - <super-csv.version>2.4.0</super-csv.version> - <jsql.version>4.6</jsql.version> - <c3p0.version>0.9.5.5</c3p0.version> - <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <testcontainers.version>1.18.3</testcontainers.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Entities and API --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-querystore</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- DataSource --> - <dependency> - <groupId>com.mchange</groupId> - <artifactId>c3p0</artifactId> - <version>${c3p0.version}</version> - </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${c3p0-hibernate.version}</version> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-annotations</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- SQL Parser --> - <dependency> - <groupId>com.github.jsqlparser</groupId> - <artifactId>jsqlparser</artifactId> - <version>${jsql.version}</version> - <scope>provided</scope> - </dependency> - <!-- CSV --> - <dependency> - <groupId>net.sf.supercsv</groupId> - <artifactId>super-csv</artifactId> - <version>${super-csv.version}</version> - </dependency> - <!-- AMPQ --> - <dependency> - <groupId>com.rabbitmq</groupId> - <artifactId>amqp-client</artifactId> - <version>${rabbit-amqp-client.version}</version> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-test-autoconfigure</artifactId> - <version>${opensearch-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>junit-jupiter</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>mariadb</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>rabbitmq</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>**/DbrepoTableServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-table-service/report/pom.xml b/dbrepo-table-service/report/pom.xml deleted file mode 100644 index 91abe5c9ed29e4ddf21ab5046e4feb47ecaba6f5..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/report/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-table-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.3.0</version> - <name>dbrepo-table-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/pom.xml b/dbrepo-table-service/rest-service/pom.xml deleted file mode 100644 index 9476a5da67e8244136b6501909cd256557228b0c..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-table-service</artifactId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-table-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java deleted file mode 100644 index c949e87713720d440e8bf2edb39059f53347929d..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class DbrepoTableServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoTableServiceApplication.class, args); - } - -} diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index 67509e1920a2dcdac678fad548814ed0c877246a..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.servers.Server; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository Table Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the tables") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Sourcecode Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services")) - .servers(List.of(new Server() - .description("Generated server url") - .url("http://localhost:9094"), - new Server() - .description("Sandbox") - .url("https://dbrepo2.tuwien.ac.at"))); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("table-service") - .pathsToMatch("/api/**") - .build(); - } - -} diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index bca4721e560758e40bcd23c8eb910f27b5607928..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,186 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.GATEWAY_TIMEOUT) - @ExceptionHandler({AmqpException.class}) - public ResponseEntity<ApiErrorDto> handle(AmqpException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.GATEWAY_TIMEOUT) - .message(e.getLocalizedMessage()) - .code("error.table.amqp") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({ArbitraryPrimaryKeysException.class}) - public ResponseEntity<ApiErrorDto> handle(ArbitraryPrimaryKeysException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.table.primarykey") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({ContainerNotFoundException.class}) - public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.table.containernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler({DatabaseConnectionException.class}) - public ResponseEntity<ApiErrorDto> handle(DatabaseConnectionException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.table.connection") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({DatabaseNotFoundException.class}) - public ResponseEntity<ApiErrorDto> handle(DatabaseNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.table.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.LOCKED) - @ExceptionHandler({DataProcessingException.class}) - public ResponseEntity<ApiErrorDto> handle(DataProcessingException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.LOCKED) - .message(e.getLocalizedMessage()) - .code("error.table.processing") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({FileStorageException.class}) - public ResponseEntity<ApiErrorDto> handle(FileStorageException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.table.storage") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({ImageNotSupportedException.class}) - public ResponseEntity<ApiErrorDto> handle(ImageNotSupportedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.table.image") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({PaginationException.class}) - public ResponseEntity<ApiErrorDto> handle(PaginationException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.table.pagination") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({QueryMalformedException.class}) - public ResponseEntity<ApiErrorDto> handle(QueryMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.table.querymalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({TableMalformedException.class}) - public ResponseEntity<ApiErrorDto> handle(TableMalformedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.BAD_REQUEST) - .message(e.getLocalizedMessage()) - .code("error.table.tablemalformed") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler({TableNameExistsException.class}) - public ResponseEntity<ApiErrorDto> handle(TableNameExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.table.nameexists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({TableNotFoundException.class}) - public ResponseEntity<ApiErrorDto> handle(TableNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.table.tablenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler({UserNotFoundException.class}) - public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.table.usernotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} diff --git a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index d5e20ff82f1aaaca7bd0293dcf6a6ba854263cd7..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,55 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: table-service - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9094 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: http://localhost:8080/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB - client_secret: client-secret - client_id: dbrepo-client - gateway.endpoint: http://localhost \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/main/resources/application.yml b/dbrepo-table-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index e8ff57f4a05f459b1b139a121f7359d62330d54f..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,68 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: table-service - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9094 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" - client_secret: "${DBREPO_CLIENT_SECRET}" - client_id: "${CLIENT_ID}" - gateway.endpoint: http://gateway-service \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/main/resources/config.properties b/dbrepo-table-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-table-service/rest-service/src/main/resources/mariadb/reserved.csv b/dbrepo-table-service/rest-service/src/main/resources/mariadb/reserved.csv deleted file mode 100644 index 1aace34a415929fe8c427f0656e1e8566f288cfd..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/resources/mariadb/reserved.csv +++ /dev/null @@ -1,586 +0,0 @@ -ACCESSIBLE -ACTION -ADD -AFTER -AGAINST -AGGREGATE -ALL -ALGORITHM -ALTER -ALWAYS -ANALYZE -AND -ANY -AS -ASC -ASCII -ASENSITIVE -AT -AUTHORS -AUTO_INCREMENT -AUTOEXTEND_SIZE -AVG -AVG_ROW_LENGTH -BACKUP -BEFORE -BEGIN -BETWEEN -BIGINT -BINARY -BINLOG -BIT -BLOB -BLOCK -BOOL -BOOLEAN -BOTH -BTREE -BY -BYTE -CACHE -CALL -CASCADE -CASCADED -CASE -CATALOG_NAME -CHAIN -CHANGE -CHANGED -CHAR -CHARACTER -CHARSET -CHECK -CHECKPOINT -CHECKSUM -CIPHER -CLASS_ORIGIN -CLIENT -CLIENT_STATISTICS -CLOSE -COALESCE -CODE -COLLATE -COLLATION -COLUMN -COLUMN_NAME -COLUMNS -COLUMN_ADD -COLUMN_CREATE -COLUMN_DELETE -COLUMN_EXISTS -COLUMN_GET -COLUMN_LIST -COMMENT -COMMIT -COMMITTED -COMPACT -COMPLETION -COMPRESSED -CONCURRENT -CONDITION -CONNECTION -CONSISTENT -CONSTRAINT -CONSTRAINT_CATALOG -CONSTRAINT_NAME -CONSTRAINT_SCHEMA -CONTAINS -CONTEXT -CONTINUE -CONTRIBUTORS -CONVERT -CPU -CREATE -CROSS -CUBE -CURRENT_DATE -CURRENT_TIME -CURRENT_TIMESTAMP -CURRENT_USER -CURSOR -CURSOR_NAME -DATA -DATABASE -DATABASES -DATAFILE -DATE -DATETIME -DAY -DAY_HOUR -DAY_MICROSECOND -DAY_MINUTE -DAY_SECOND -DEALLOCATE -DEC -DECIMAL -DECLARE -DEFAULT -DEFINER -DELAYED -DELAY_KEY_WRITE -DELETE -DESC -DESCRIBE -DES_KEY_FILE -DETERMINISTIC -DIRECTORY -DISABLE -DISCARD -DISK -DISTINCT -DISTINCTROW -DIV -DO -DOUBLE -DROP -DUAL -DUMPFILE -DUPLICATE -DYNAMIC -EACH -ELSE -ELSEIF -ENABLE -ENCLOSED -END -ENDS -ENGINE -ENGINES -ENUM -ERROR -ERRORS -ESCAPE -ESCAPED -EVENT -EVENTS -EVERY -EXAMINED -EXECUTE -EXISTS -EXIT -EXPANSION -EXPLAIN -EXTENDED -EXTENT_SIZE -FALSE -FAST -FAULTS -FETCH -FIELDS -FILE -FIRST -FIXED -FLOAT -FLOAT4 -FLOAT8 -FLUSH -FOR -FORCE -FOREIGN -FOUND -FROM -FULL -FULLTEXT -FUNCTION -GENERAL -GENERATED -GEOMETRY -GEOMETRYCOLLECTION -GET_FORMAT -GLOBAL -GRANT -GRANTS -GROUP -HANDLER -HARD -HASH -HAVING -HELP -HIGH_PRIORITY -HOST -HOSTS -HOUR -HOUR_MICROSECOND -HOUR_MINUTE -HOUR_SECOND -IDENTIFIED -IF -IGNORE -IGNORE_SERVER_IDS -IMPORT -IN -INDEX -INDEXES -INDEX_STATISTICS -INFILE -INITIAL_SIZE -INNER -INOUT -INSENSITIVE -INSERT -INSERT_METHOD -INSTALL -INT -INT1 -INT2 -INT3 -INT4 -INT8 -INTEGER -INTERVAL -INTO -IO -IO_THREAD -IPC -IS -ISOLATION -ISSUER -ITERATE -INVOKER -JOIN -KEY -KEYS -KEY_BLOCK_SIZE -KILL -LANGUAGE -LAST -LAST_VALUE -LEADING -LEAVE -LEAVES -LEFT -LESS -LEVEL -LIKE -LIMIT -LINEAR -LINES -LINESTRING -LIST -LOAD -LOCAL -LOCALTIME -LOCALTIMESTAMP -LOCK -LOCKS -LOGFILE -LOGS -LONG -LONGBLOB -LONGTEXT -LOOP -LOW_PRIORITY -MASTER -MASTER_CONNECT_RETRY -MASTER_HOST -MASTER_LOG_FILE -MASTER_LOG_POS -MASTER_PASSWORD -MASTER_PORT -MASTER_SERVER_ID -MASTER_SSL -MASTER_SSL_CA -MASTER_SSL_CAPATH -MASTER_SSL_CERT -MASTER_SSL_CIPHER -MASTER_SSL_KEY -MASTER_SSL_VERIFY_SERVER_CERT -MASTER_USER -MASTER_HEARTBEAT_PERIOD -MATCH -MAX_CONNECTIONS_PER_HOUR -MAX_QUERIES_PER_HOUR -MAX_ROWS -MAX_SIZE -MAX_UPDATES_PER_HOUR -MAX_USER_CONNECTIONS -MAXVALUE -MEDIUM -MEDIUMBLOB -MEDIUMINT -MEDIUMTEXT -MEMORY -MERGE -MESSAGE_TEXT -MICROSECOND -MIDDLEINT -MIGRATE -MINUTE -MINUTE_MICROSECOND -MINUTE_SECOND -MIN_ROWS -MOD -MODE -MODIFIES -MODIFY -MONTH -MULTILINESTRING -MULTIPOINT -MULTIPOLYGON -MUTEX -MYSQL_ERRNO -NAME -NAMES -NATIONAL -NATURAL -NDB -NDBCLUSTER -NCHAR -NEW -NEXT -NO -NO_WAIT -NODEGROUP -NONE -NOT -NO_WRITE_TO_BINLOG -NULL -NUMERIC -NVARCHAR -OFFSET -OLD_PASSWORD -ON -ONE -ONE_SHOT -ONLINE -OPEN -OPTIMIZE -OPTIONS -OPTION -OPTIONALLY -OR -ORDER -OUT -OUTER -OUTFILE -OWNER -PACK_KEYS -PAGE -PAGE_CHECKSUM -PARSER -PARSE_VCOL_EXPR -PARTIAL -PARTITION -PARTITIONING -PARTITIONS -PASSWORD -PERSISTENT -PHASE -PLUGIN -PLUGINS -POINT -POLYGON -PORT -PRECISION -PREPARE -PRESERVE -PREV -PRIMARY -PRIVILEGES -PROCEDURE -PROCESS -PROCESSLIST -PROFILE -PROFILES -PROXY -PURGE -QUARTER -QUERY -QUICK -RANGE -READ -READ_ONLY -READ_WRITE -READS -REAL -REBUILD -RECOVER -REDO_BUFFER_SIZE -REDOFILE -REDUNDANT -REFERENCES -REGEXP -RELAY -RELAYLOG -RELAY_LOG_FILE -RELAY_LOG_POS -RELAY_THREAD -RELEASE -RELOAD -REMOVE -RENAME -REORGANIZE -REPAIR -REPEATABLE -REPLACE -REPLICATION -REPEAT -REQUIRE -RESET -RESIGNAL -RESTORE -RESTRICT -RESUME -RETURN -RETURNS -REVOKE -RIGHT -RLIKE -ROLLBACK -ROLLUP -ROUTINE -ROW -ROWS -ROW_FORMAT -RTREE -SAVEPOINT -SCHEDULE -SCHEMA -SCHEMA_NAME -SCHEMAS -SECOND -SECOND_MICROSECOND -SECURITY -SELECT -SENSITIVE -SEPARATOR -SERIAL -SERIALIZABLE -SESSION -SERVER -SET -SHARE -SHOW -SHUTDOWN -SIGNAL -SIGNED -SIMPLE -SLAVE -SLOW -SNAPSHOT -SMALLINT -SOCKET -SOFT -SOME -SONAME -SOUNDS -SOURCE -SPATIAL -SPECIFIC -SQL -SQLEXCEPTION -SQLSTATE -SQLWARNING -SQL_BIG_RESULT -SQL_BUFFER_RESULT -SQL_CACHE -SQL_CALC_FOUND_ROWS -SQL_NO_CACHE -SQL_SMALL_RESULT -SQL_THREAD -SQL_TSI_SECOND -SQL_TSI_MINUTE -SQL_TSI_HOUR -SQL_TSI_DAY -SQL_TSI_WEEK -SQL_TSI_MONTH -SQL_TSI_QUARTER -SQL_TSI_YEAR -SSL -START -STARTING -STARTS -STATUS -STOP -STORAGE -STRAIGHT_JOIN -STRING -SUBCLASS_ORIGIN -SUBJECT -SUBPARTITION -SUBPARTITIONS -SUPER -SUSPEND -SWAPS -SWITCHES -TABLE -TABLE_NAME -TABLES -TABLESPACE -TABLE_STATISTICS -TABLE_CHECKSUM -TEMPORARY -TEMPTABLE -TERMINATED -TEXT -THAN -THEN -TIME -TIMESTAMP -TIMESTAMPADD -TIMESTAMPDIFF -TINYBLOB -TINYINT -TINYTEXT -TO -TRAILING -TRANSACTION -TRANSACTIONAL -TRIGGER -TRIGGERS -TRUE -TRUNCATE -TYPE -TYPES -UNCOMMITTED -UNDEFINED -UNDO_BUFFER_SIZE -UNDOFILE -UNDO -UNICODE -UNION -UNIQUE -UNKNOWN -UNLOCK -UNINSTALL -UNSIGNED -UNTIL -UPDATE -UPGRADE -USAGE -USE -USER -USER_RESOURCES -USER_STATISTICS -USE_FRM -USING -UTC_DATE -UTC_TIME -UTC_TIMESTAMP -VALUE -VALUES -VARBINARY -VARCHAR -VARCHARACTER -VARIABLES -VARYING -VIA -VIEW -VIRTUAL -WAIT -WARNINGS -WEEK -WHEN -WHERE -WHILE -WITH -WORK -WRAPPER -WRITE -X509 -XOR -XA -XML -YEAR -YEAR_MONTH -ZEROFILL \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml b/dbrepo-table-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml deleted file mode 100644 index 5d1f8bd44e7e2f044e1effb24191f4262d83dd52..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> -<hibernate-configuration> - <session-factory> - <property name="current_session_context_class">thread</property> - <property name="transaction.coordinator_class">jdbc</property> - <property name="c3p0.min_size">5</property> - <property name="c3p0.max_size">30</property> - <property name="c3p0.acquire_increment">5</property> - <property name="c3p0.timeout">1800</property> - <property name="show_sql">true</property> - <property name="format_sql">true</property> - <property name="hbm2ddl.auto">update</property> - <mapping class="at.tuwien.querystore.Query" /> - <mapping class="at.tuwien.querystore.Table" /> - <mapping class="at.tuwien.querystore.Column" /> - </session-factory> -</hibernate-configuration> diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index 01f84e12b909533314c3cc741739e02801e78ee5..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java deleted file mode 100644 index 587927a0703c0bc78a8dc41fb665ac5d02a1d3b4..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.test.BaseTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.images.PullPolicy; - -/** - * This class configures the MariaDB container for the integration tests. - */ -@Configuration -public class MariaDbContainerConfig { - - @Bean - public CustomMariaDBContainer mariaDB() { - return CustomMariaDBContainer.getInstance(); - } - - /** - * This class represents the customized MariaDB container. It is a singleton to avoid the recreation of containers - * which can be very time-consuming. - */ - public static class CustomMariaDBContainer extends MariaDBContainer<CustomMariaDBContainer> { - - private static CustomMariaDBContainer instance; - - public static CustomMariaDBContainer getInstance() { - if(instance == null) { - instance = new CustomMariaDBContainer(BaseTest.IMAGE_1_NAME + ":" + BaseTest.IMAGE_1_VERSION); - instance.withImagePullPolicy(PullPolicy.alwaysPull()); - instance.addFixedExposedPort(BaseTest.CONTAINER_1_PORT, BaseTest.IMAGE_1_PORT); - instance.withUsername(BaseTest.CONTAINER_1_PRIVILEGED_USERNAME); - instance.withPassword(BaseTest.CONTAINER_1_PRIVILEGED_PASSWORD); - instance.withInitScript("init/users.sql"); - } - return instance; - } - - private CustomMariaDBContainer(String dockerImageName) { - super(dockerImageName); - } - - @Override - protected void configure() { - super.configure(); - this.addEnv("MYSQL_USER", "test"); // MariaDB does not allow this to be root - } - - @Override - public void stop() { - // do nothing, JVM handles shut down - } - } -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index 8410bf862df68079a952a4d6914a55eb671398fb..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableIdxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnIdxRepository; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorStatus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java deleted file mode 100644 index 3a980315d19cdd5260e5de917d291506c52e93c8..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class SwaggerComponentTest extends BaseUnitTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableIdxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnIdxRepository; - - @Test - public void swaggerUi_succeeds() throws Exception { - this.mockMvc.perform(get("/swagger-ui/index.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java deleted file mode 100644 index dd1dd7c84bb10d0839425de374db9e197bcde806..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.BaseUnitTest; -import at.tuwien.exception.AmqpException; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.web.client.RestTemplate; - -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.when; - -@Log4j2 -@EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class QueryServiceGatewayUnitTest extends BaseUnitTest { - - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - - @MockBean - @Qualifier("restTemplate") - private RestTemplate restTemplate; - - @Autowired - private QueryServiceGateway queryServiceGateway; - - @Test - public void declareConsumer_succeeds() throws AmqpException { - final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.ACCEPTED) - .build(); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(Void.class))) - .thenReturn(mock); - - /* test */ - queryServiceGateway.declareConsumer(DATABASE_1_ID, TABLE_1_ID, "abc"); - } - - @Test - public void declareConsumer_fails() { - final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.NO_CONTENT) - .build(); - - /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(Void.class))) - .thenReturn(mock); - - /* test */ - assertThrows(AmqpException.class, () -> { - queryServiceGateway.declareConsumer(DATABASE_1_ID, TABLE_1_ID, "abc"); - }); - } - -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java deleted file mode 100644 index 455958f14cff588fe15a3ed67619ce400d9367e0..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java +++ /dev/null @@ -1,89 +0,0 @@ - -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.exception.AmqpException; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import at.tuwien.utils.AmqpUtils; -import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.RabbitMQContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.when; - -@Log4j2 -@Testcontainers -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class MessageQueueServiceIntegrationTest extends BaseUnitTest { - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - - @MockBean - private at.tuwien.repository.mdb.TableRepository tableRepository; - - @Autowired - private AmqpUtils amqpUtils; - - @Autowired - private Channel channel; - - @Autowired - private MessageQueueService messageQueueService; - - @Container - private static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:3-management-alpine") - .withVhost("/"); - - @DynamicPropertySource - static void rabbitMQProperties(DynamicPropertyRegistry registry) { - registry.add("fda.gateway.endpoint", () -> "http://" + rabbitMQContainer.getHost() + ":" + rabbitMQContainer.getHttpPort()); - registry.add("spring.rabbitmq.host", rabbitMQContainer::getHost); - registry.add("spring.rabbitmq.port", rabbitMQContainer::getAmqpPort); - registry.add("spring.rabbitmq.username", rabbitMQContainer::getAdminUsername); - registry.add("spring.rabbitmq.password", rabbitMQContainer::getAdminPassword); - } - - @Test - public void init_succeeds() throws AmqpException, IOException { - - /* mock */ - channel.exchangeDeclare(DATABASE_1_EXCHANGE, BuiltinExchangeType.FANOUT, true, false, null); - when(tableRepository.findAll()) - .thenReturn(List.of(TABLE_1, TABLE_2)); - - /* test */ - assertTrue(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); - messageQueueService.init(); - assertTrue(amqpUtils.queueExists(TABLE_1_QUEUE_NAME)); - } - -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java deleted file mode 100644 index 48c6199c47307eda5d00a24fd61aae7342d9b694..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ /dev/null @@ -1,148 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.config.MariaDbConfig; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.TableNotFoundException; -import at.tuwien.repository.mdb.*; -import at.tuwien.repository.sdb.ConceptIdxRepository; -import at.tuwien.repository.sdb.TableColumnIdxRepository; -import at.tuwien.repository.sdb.TableIdxRepository; -import at.tuwien.repository.sdb.UnitIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.sql.SQLException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@Log4j2 -@Testcontainers -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class TableServiceIntegrationReadTest extends BaseUnitTest { - - @MockBean - private Channel channel; - - @MockBean - private UnitIdxRepository unitIdxRepository; - - @MockBean - private ConceptIdxRepository conceptIdxRepository; - - @MockBean - private TableIdxRepository tableidxRepository; - - @MockBean - private TableColumnIdxRepository tableColumnidxRepository; - - @Autowired - private RealmRepository realmRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private ContainerRepository containerRepository; - - @Autowired - private DatabaseRepository databaseRepository; - - @Autowired - private at.tuwien.repository.mdb.TableRepository tableRepository; - - @Autowired - private TableService tableService; - - @Container - @Autowired - private MariaDBContainer<?> mariaDBContainer; - - @BeforeAll - public static void beforeAll() { - } - - @BeforeEach - public void beforeEach() throws SQLException { - imageRepository.save(IMAGE_1); - realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - containerRepository.save(CONTAINER_1_SIMPLE); - containerRepository.save(CONTAINER_2_SIMPLE); - databaseRepository.save(DATABASE_1_SIMPLE); - tableRepository.save(TABLE_1_SIMPLE); - tableRepository.save(TABLE_2_SIMPLE); - MariaDbConfig.dropAllDatabases(CONTAINER_1); - MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1); - } - - @Test - public void findAll_succeeds() throws DatabaseNotFoundException { - - /* test */ - final List<Table> response = tableService.findAll(DATABASE_1_ID); - assertEquals(2, response.size()); - } - - @Test - public void findAll_fails() { - - /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - tableService.findAll(DATABASE_2_ID); - }); - } - - @Test - public void findById_succeeds() throws TableNotFoundException, DatabaseNotFoundException{ - - /* test */ - final Table response = tableService.findById(DATABASE_1_ID, TABLE_1_ID); - assertEquals(TABLE_1_ID, response.getId()); - assertEquals(TABLE_1_NAME, response.getName()); - assertEquals(TABLE_1_INTERNALNAME, response.getInternalName()); - } - - @Test - public void findById_tableNotFound_fails() { - - /* test */ - assertThrows(TableNotFoundException.class, () -> { - tableService.findById(DATABASE_1_ID, 99999L); - }); - } - - @Test - public void findById_databaseNotFound_fails() { - - /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - tableService.findById(99999L, TABLE_3_ID); - }); - } - -} diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java deleted file mode 100644 index b11964128cf3121617305fdd1478f6b1b38a2acc..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java +++ /dev/null @@ -1,70 +0,0 @@ -package at.tuwien.utils; - -import at.tuwien.api.amqp.ExchangeDto; -import at.tuwien.api.amqp.QueueDto; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -@Log4j2 -@Service -public class AmqpUtils { - - private final RestTemplate restTemplate; - - @Autowired - public AmqpUtils(@Qualifier("brokerRestTemplate") RestTemplate restTemplate) { - this.restTemplate = restTemplate; - } - - public boolean exchangeExists(String exchange) { - final ResponseEntity<ExchangeDto[]> response = restTemplate.exchange("/api/exchanges", HttpMethod.GET, null, ExchangeDto[].class); - if (!response.getStatusCode().equals(HttpStatus.OK)) { - log.error("Failed to retrieve exchanges, code is {}", response.getStatusCode()); - throw new RuntimeException("Failed to retrieve exchanges"); - } - assert response.getBody() != null; - final List<String> names = Arrays.stream(response.getBody()) - .map(ExchangeDto::getName) - .collect(Collectors.toList()); - if (names.stream().filter(n -> n.equals(exchange)).count() != 1) { - log.error("Failed to find exchange {} in exchanges {}", exchange, names); - return false; - } - log.info("Found exchange {} in exchanges {}", exchange, names); - return true; - } - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - public boolean queueExists(String queue) { - final ResponseEntity<QueueDto[]> response = restTemplate.exchange("/api/queues/{1}/", HttpMethod.GET, new HttpEntity<>(null), QueueDto[].class, "/"); - if (!response.getStatusCode().equals(HttpStatus.OK)) { - log.error("Failed to find queue, code is {}", response.getStatusCode()); - throw new RuntimeException("Failed to find queue"); - } - assert response.getBody() != null; - final List<String> names = Arrays.stream(response.getBody()) - .map(QueueDto::getName) - .collect(Collectors.toList()); - if (names.stream().filter(n -> n.equals(queue)).count() != 1) { - log.error("Failed to find queue {} in queues {}", queue, names); - return false; - } - log.info("Found queue {} in queues {}", queue, names); - return true; - } - -} diff --git a/dbrepo-table-service/rest-service/src/test/resources/application.properties b/dbrepo-table-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 97fd2c93b7acd05dccb16624ac0a339577481c5f..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,28 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# log -logging.level.org.hibernate.SQL=trace - -# rabbitmq -spring.rabbitmq.host=dbrepo-broker-service -spring.rabbitmq.virtual-host=/ -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/resources/init/musicology.sql b/dbrepo-table-service/rest-service/src/test/resources/init/musicology.sql deleted file mode 100644 index 4d2c8deb43ede5de84cd321a302e97ef84038508..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/init/musicology.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE DATABASE musicology; -USE musicology; - -CREATE SEQUENCE seq_mfcc; - -CREATE TABLE mfcc -( - id BIGINT PRIMARY KEY NOT NULL DEFAULT nextval(`seq_mfcc`), - value DECIMAL NOT NULL -) WITH SYSTEM VERSIONING; - -INSERT INTO `mfcc` (`value`) -VALUES (11.2), - (11.3), - (11.4), - (11.9), - (12.3), - (23.1); \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/resources/init/querystore.sql b/dbrepo-table-service/rest-service/src/test/resources/init/querystore.sql deleted file mode 100644 index 61112304cab06250ef185e249b8d132da0dc1d40..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/init/querystore.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE SEQUENCE `qs_queries_seq`; -CREATE TABLE `qs_queries` ( `id` bigint not null primary key default nextval(`qs_queries_seq`), `created` datetime not null default now(), `executed` datetime not null default now(), `created_by` varchar(255) not null, `query` text not null, `query_normalized` text not null, `is_persisted` boolean not null, `query_hash` varchar(255) not null, `result_hash` varchar(255), `result_number` bigint ); -CREATE PROCEDURE hash_table(IN name VARCHAR(255), OUT hash VARCHAR(255), OUT count BIGINT) BEGIN DECLARE _sql TEXT; SELECT CONCAT('SELECT SHA2(GROUP_CONCAT(CONCAT_WS(\'\',', GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), ') SEPARATOR \',\'), 256) AS hash, COUNT(*) AS count FROM `', name, '` INTO @hash, @count;') FROM `information_schema`.`columns` WHERE `table_schema` = DATABASE() AND `table_name` = name INTO _sql; PREPARE stmt FROM _sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET hash = @hash; SET count = @count; END; -CREATE PROCEDURE store_query(IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _username varchar(255) DEFAULT REGEXP_REPLACE(current_user(), '@.*', ''); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; -CREATE DEFINER = 'root' PROCEDURE _store_query(IN _username VARCHAR(255), IN query TEXT, IN executed DATETIME, OUT queryId BIGINT) BEGIN DECLARE _queryhash varchar(255) DEFAULT SHA2(query, 256); DECLARE _query TEXT DEFAULT CONCAT('CREATE OR REPLACE TABLE _tmp AS (', query, ')'); PREPARE stmt FROM _query; EXECUTE stmt; DEALLOCATE PREPARE stmt; CALL hash_table('_tmp', @hash, @count); IF @hash IS NULL THEN INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, true, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` IS NULL); ELSE INSERT INTO `qs_queries` (`created_by`, `query`, `query_normalized`, `is_persisted`, `query_hash`, `result_hash`, `result_number`, `executed`) SELECT _username, query, query, false, _queryhash, @hash, @count, executed WHERE NOT EXISTS (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); SET queryId = (SELECT `id` FROM `qs_queries` WHERE `query_hash` = _queryhash AND `result_hash` = @hash); END IF; END; \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-table-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/resources/init/users.sql b/dbrepo-table-service/rest-service/src/test/resources/init/users.sql deleted file mode 100644 index 45f7b53a0f602a780522da646d64da2a0bc36e53..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/init/users.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE USER junit1 IDENTIFIED BY 'junit1'; -CREATE USER junit2 IDENTIFIED BY 'junit2'; -CREATE USER junit3 IDENTIFIED BY 'junit3'; -CREATE USER junit4 IDENTIFIED BY 'junit4'; \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/resources/init/weather.sql b/dbrepo-table-service/rest-service/src/test/resources/init/weather.sql deleted file mode 100644 index 05976e23e48dd83f763a0acbf841223e7e879d43..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/init/weather.sql +++ /dev/null @@ -1,65 +0,0 @@ -/* https://www.kaggle.com/jsphyg/weather-dataset-rattle-package */ -CREATE DATABASE weather; -USE weather; - -CREATE TABLE weather_location -( - location VARCHAR(255) PRIMARY KEY, - lat DOUBLE PRECISION NULL, - lng DOUBLE PRECISION NULL -) WITH SYSTEM VERSIONING; - -CREATE TABLE weather_aus -( - id BIGINT NOT NULL PRIMARY KEY, - `date` DATE NOT NULL, - location VARCHAR(255) NULL, - mintemp DOUBLE PRECISION NULL, - rainfall DOUBLE PRECISION NULL, - FOREIGN KEY (location) REFERENCES weather_location (location), - UNIQUE (`date`), - CHECK (`mintemp` > 0) -) WITH SYSTEM VERSIONING; - -CREATE TABLE sensor -( - `timestamp` TIMESTAMP NOT NULL PRIMARY KEY, - `value` DECIMAL -) WITH SYSTEM VERSIONING; - -INSERT INTO weather_location (location, lat, lng) -VALUES ('Albury', -36.0653583, 146.9112214), - ('Sydney', -33.847927, 150.6517942), - ('Vienna', null, null); - -INSERT INTO weather_aus (id, `date`, location, mintemp, rainfall) -VALUES (1, '2008-12-01', 'Albury', 13.4, 0.6), - (2, '2008-12-02', 'Albury', 7.4, 0), - (3, '2008-12-03', 'Albury', 12.9, 0); - -INSERT INTO sensor (`timestamp`, value) -VALUES ('2022-12-24 17:00:00', 10.0), - ('2022-12-24 18:00:00', 10.2), - ('2022-12-24 19:00:00', null), - ('2022-12-24 20:00:00', 10.3), - ('2022-12-24 21:00:00', 10.0), - ('2022-12-24 22:00:00', null); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW junit2 AS -( -select `date`, `location`, `mintemp`, `rainfall` -from `weather_aus` -where `location` = 'Albury'); - -CREATE VIEW `hs_weather_aus` AS -SELECT * -FROM (SELECT `id`, ROW_START AS inserted_at, IF(ROW_END > NOW(), NULL, ROW_END) AS deleted_at, COUNT(*) as total - FROM `weather_aus` FOR SYSTEM_TIME ALL - GROUP BY inserted_at, deleted_at - ORDER BY deleted_at DESC - LIMIT 50) AS v -ORDER BY v.inserted_at, v.deleted_at ASC; diff --git a/dbrepo-table-service/rest-service/src/test/resources/init/zoo.sql b/dbrepo-table-service/rest-service/src/test/resources/init/zoo.sql deleted file mode 100644 index 238978ac00ac8d9bc710348790a4a7d00155de60..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/init/zoo.sql +++ /dev/null @@ -1,194 +0,0 @@ -CREATE DATABASE zoo; -USE zoo; - -create sequence seq_zoo_id; -create sequence seq_names_id; -create table zoo -( - id bigint not null default nextval(`seq_zoo_id`), - animal_name varchar(255) null, - hair tinyint(1) null, - feathers tinyint(1) null, - eggs tinyint(1) null, - milk tinyint(1) null, - airborne tinyint(1) null, - aquatic tinyint(1) null, - predator tinyint(1) null, - toothed tinyint(1) null, - backbone tinyint(1) null, - breathes tinyint(1) null, - venomous tinyint(1) null, - fins tinyint(1) null, - legs bigint null, - tail tinyint(1) null, - domestic tinyint(1) null, - catsize tinyint(1) null, - class_type bigint null, - primary key (id) -) with system versioning; - -create table names -( - id bigint not null default nextval(`seq_names_id`), - firstname varchar(255), - lastname varchar(255), - primary key (id), - unique key (firstname, lastname) -) with system versioning; - -create table likes -( - name_id bigint not null, - zoo_id bigint not null, - primary key (name_id, zoo_id), - foreign key (name_id) references names (id), - foreign key (zoo_id) references zoo (id) -) with system versioning; - -INSERT INTO zoo (id, animal_name, hair, feathers, eggs, milk, airborne, aquatic, predator, toothed, backbone, breathes, - venomous, fins, legs, tail, domestic, catsize, class_type) -VALUES (1, 'aardvark', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (2, 'antelope', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (3, 'bass', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (4, 'bear', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 0, 0, 1, 1), - (5, 'boar', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (6, 'buffalo', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (7, 'calf', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (8, 'carp', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 4), - (9, 'catfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (10, 'cavy', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 0, 1, 0, 1), - (11, 'cheetah', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (12, 'chicken', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (13, 'chub', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (14, 'clam', 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7), - (15, 'crab', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 7), - (16, 'crayfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (17, 'crow', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (18, 'deer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (19, 'dogfish', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (20, 'dolphin', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (21, 'dove', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (22, 'duck', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (23, 'elephant', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (24, 'flamingo', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (25, 'flea', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (26, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (27, 'frog', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, 0, 5), - (28, 'fruitbat', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (29, 'giraffe', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (30, 'girl', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 2, 0, 1, 1, 1), - (31, 'gnat', 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (32, 'goat', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (33, 'gorilla', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 1), - (34, 'gull', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (35, 'haddock', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (36, 'hamster', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 0, 1), - (37, 'hare', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (38, 'hawk', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (39, 'herring', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (40, 'honeybee', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 1, 0, 6), - (41, 'housefly', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (42, 'kiwi', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (43, 'ladybird', 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (44, 'lark', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (45, 'leopard', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (46, 'lion', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (47, 'lobster', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7), - (48, 'lynx', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (49, 'mink', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (50, 'mole', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (51, 'mongoose', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (52, 'moth', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (53, 'newt', 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 5), - (54, 'octopus', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 8, 0, 0, 1, 7), - (55, 'opossum', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (56, 'oryx', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (57, 'ostrich', 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (58, 'parakeet', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 0, 2), - (59, 'penguin', 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (60, 'pheasant', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (61, 'pike', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (62, 'piranha', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (63, 'pitviper', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 3), - (64, 'platypus', 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (65, 'polecat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (66, 'pony', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (67, 'porpoise', 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1), - (68, 'puma', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (69, 'pussycat', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (70, 'raccoon', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (71, 'reindeer', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 1, 1, 1), - (72, 'rhea', 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (73, 'scorpion', 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 8, 1, 0, 0, 7), - (74, 'seahorse', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (75, 'seal', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1), - (76, 'sealion', 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 2, 1, 0, 1, 1), - (77, 'seasnake', 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 3), - (78, 'seawasp', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 7), - (79, 'skimmer', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (80, 'skua', 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (81, 'slowworm', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 3), - (82, 'slug', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (83, 'sole', 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 4), - (84, 'sparrow', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2), - (85, 'squirrel', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (86, 'starfish', 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 7), - (87, 'stingray', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 4), - (88, 'swan', 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (89, 'termite', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 6), - (90, 'toad', 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 4, 0, 0, 0, 5), - (91, 'tortoise', 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 4, 1, 0, 1, 3), - (92, 'tuatara', 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 0, 3), - (93, 'tuna', 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4), - (94, 'vampire', 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 0, 1), - (95, 'vole', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 1), - (96, 'vulture', 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 2), - (97, 'wallaby', 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 0, 1, 1), - (98, 'wasp', 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 6, 0, 0, 0, 6), - (99, 'wolf', 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1), - (100, 'worm', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7), - (101, 'wren', 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2); - -INSERT INTO names (firstname, lastname) -VALUES ('Moritz', 'Staudinger'), - ('Martin', 'Weise'), - ('Eva', 'Gergely'), - ('Cornelia', 'Michlits'), - ('Kirill', 'Stytsenko'); - -INSERT INTO likes (name_id, zoo_id) -VALUES (1, 5), - (1, 10), - (2, 3), - (2, 80), - (3, 4), - (4, 4), - (5, 100); - -######################################################################################################################## -## TEST CASE PRE-REQUISITE ## -######################################################################################################################## - -CREATE VIEW mock_view AS -( -SELECT `id`, - `animal_name`, - `hair`, - `feathers`, - `eggs`, - `milk`, - `airborne`, - `aquatic`, - `predator`, - `toothed`, - `backbone`, - `breathes`, - `venomous`, - `fins`, - `legs`, - `tail`, - `domestic`, - `catsize`, - `class_type` -FROM `zoo` -WHERE `class_type` = 1); diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java deleted file mode 100644 index 92b60f4f8a5ed8a566e2504d71b63478b1593f68..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.auth; - -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.DecodedJWT; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.util.Arrays; -import java.util.Base64; -import java.util.stream.Collectors; - -@Slf4j -public class AuthTokenFilter extends OncePerRequestFilter { - - @Value("${fda.jwt.issuer}") - private String issuer; - - @Value("${fda.jwt.public_key}") - private String publicKey; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - final String jwt = parseJwt(request); - if (jwt != null) { - final UserDetails userDetails = verifyJwt(jwt); - log.debug("authenticated user {}", userDetails); - final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(request, response); - } - - public UserDetails verifyJwt(String token) throws ServletException { - final KeyFactory kf; - try { - kf = KeyFactory.getInstance("RSA"); - } catch (NoSuchAlgorithmException e) { - log.error("Failed to find RSA algorithm"); - throw new ServletException("Failed to find RSA algorithm", e); - } - final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); - final RSAPublicKey pubKey; - try { - pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); - } catch (InvalidKeySpecException e) { - log.error("Provided public key is invalid"); - throw new ServletException("Provided public key is invalid", e); - } - final Algorithm algorithm = Algorithm.RSA256(pubKey, null); - JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(issuer) - .withAudience("spring") - .build(); - final DecodedJWT jwt = verifier.verify(token); - final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); - return UserDetailsDto.builder() - .username(jwt.getClaim("client_id").asString()) - .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) - .build(); - } - - /** - * Parses the token from the HTTP header of the request - * - * @param request The request. - * @return The token. - */ - public String parseJwt(HttpServletRequest request) { - String headerAuth = request.getHeader("Authorization"); - if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); - } - return null; - } -} \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java deleted file mode 100644 index 5f959e6bf1284bc48a8850473d5ce107fdf1236c..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package at.tuwien.config; - -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -@Slf4j -@Getter -@Configuration -public class AmqpConfig { - - @Value("${spring.rabbitmq.host}") - private String ampqHost; - - @Value("${spring.rabbitmq.port:5672}") - private int ampqPort; - - @Value("${spring.rabbitmq.virtual-host}") - private String virtualHost; - - @Value("${spring.rabbitmq.username}") - private String amqpUsername; - - @Value("${spring.rabbitmq.password}") - private String amqpPassword; - - @Bean - public Channel getChannel() throws IOException, TimeoutException { - final ConnectionFactory factory = new ConnectionFactory(); - factory.setHost(ampqHost); - factory.setPort(ampqPort); - factory.setVirtualHost(virtualHost); - factory.setUsername(amqpUsername); - factory.setPassword(amqpPassword); - final Connection connection = factory.newConnection(); - return connection.createChannel(); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index 4dd0068634978d7fff069203febb24d69d02f845..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -package at.tuwien.config; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index a3feadeae5963188ca476842be099bd121554ecd..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,93 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/database/**/table/**", "GET") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java deleted file mode 100644 index 5af11d650624e98be32e64ac5a30eb4f8579d1fc..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/AccessDeniedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.FORBIDDEN) -public class AccessDeniedException extends Exception { - - public AccessDeniedException(String msg) { - super(msg); - } - - public AccessDeniedException(String msg, Throwable thr) { - super(msg, thr); - } - - public AccessDeniedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java deleted file mode 100644 index 85d49d4cb34b20b15fdc1441c69cbab0fe0a34f3..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/ContainerNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class ContainerNotFoundException extends Exception { - - public ContainerNotFoundException(String msg) { - super(msg); - } - - public ContainerNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public ContainerNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java deleted file mode 100644 index b9ca79c783048e8d0298db273abdb9462efeeec8..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class DatabaseNotFoundException extends Exception { - - public DatabaseNotFoundException(String msg) { - super(msg); - } - - public DatabaseNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public DatabaseNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/FileStorageException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/FileStorageException.java deleted file mode 100644 index 21968a6e680f88e85ec1406936dc973c20c5c09b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/FileStorageException.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.GONE) -public class FileStorageException extends Exception { - - public FileStorageException(String msg) { - super(msg); - } - - public FileStorageException(String msg, Throwable thr) { - super(msg, thr); - } - - public FileStorageException(Throwable thr) { - super(thr); - } -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java deleted file mode 100644 index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class NotAllowedException extends Exception { - - public NotAllowedException(String msg) { - super(msg); - } - - public NotAllowedException(String msg, Throwable thr) { - super(msg, thr); - } - - public NotAllowedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/PaginationException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/PaginationException.java deleted file mode 100644 index 9d56aec9c2752c2c37e7b31f227950ad94c95ef3..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/PaginationException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class PaginationException extends Exception { - - public PaginationException(String msg) { - super(msg); - } - - public PaginationException(String msg, Throwable thr) { - super(msg, thr); - } - - public PaginationException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java deleted file mode 100644 index 6d3d2bc052a734dd49bf58e309b063c11f55292a..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/QueryMalformedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.BAD_REQUEST) -public class QueryMalformedException extends Exception { - - public QueryMalformedException(String msg) { - super(msg); - } - - public QueryMalformedException(String msg, Throwable thr) { - super(msg, thr); - } - - public QueryMalformedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java deleted file mode 100644 index 0fc23bc2fd4779790986b3e9f1f3b29e4d75f6a2..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/TableNotFoundException.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -import java.io.IOException; - -@ResponseStatus(code = HttpStatus.NOT_FOUND) -public class TableNotFoundException extends Exception { - - public TableNotFoundException(String msg) { - super(msg); - } - - public TableNotFoundException(String msg, Throwable thr) { - super(msg, thr); - } - - public TableNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-table-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index 0abb87f609f0a6706c8e499eabc23e3d46d3304d..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found") -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String message) { - super(message); - } - - public UserNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/QueryServiceGateway.java b/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/QueryServiceGateway.java deleted file mode 100644 index cc9d4fbc98f4210ec486236ddca885ed32709a6e..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/QueryServiceGateway.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.exception.AmqpException; - -public interface QueryServiceGateway { - - /** - * Publish new data into a table with given database id, table id. - * - * @param databaseId The database id. - * @param tableId The table id. - * @param authorization The authentication token. - */ - void declareConsumer(Long databaseId, Long tableId, String authorization) throws AmqpException; - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/SemanticServiceGateway.java b/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/SemanticServiceGateway.java deleted file mode 100644 index df54e70226bb1519c46e5b7b074e5cda424098e3..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/SemanticServiceGateway.java +++ /dev/null @@ -1,8 +0,0 @@ -package at.tuwien.gateway; - -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.exception.SemanticEntityNotFoundException; - -public interface SemanticServiceGateway { - EntityDto getEntity(Long ontologyId, String uri, String authorization) throws SemanticEntityNotFoundException; -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/impl/QueryServiceGatewayImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/impl/QueryServiceGatewayImpl.java deleted file mode 100644 index 60b685c5e8a81377b952ac90905460add2ae6ba6..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/impl/QueryServiceGatewayImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package at.tuwien.gateway.impl; - -import at.tuwien.exception.AmqpException; -import at.tuwien.gateway.QueryServiceGateway; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.*; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -@Slf4j -@Service -public class QueryServiceGatewayImpl implements QueryServiceGateway { - - private final RestTemplate restTemplate; - - @Autowired - public QueryServiceGatewayImpl(RestTemplate restTemplate) { - this.restTemplate = restTemplate; - } - - @Override - public void declareConsumer(Long databaseId, Long tableId, String authorization) throws AmqpException { - final String url = "/api/database/" + databaseId + "/table/" + tableId + "/consumer"; - final HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", authorization); - final ResponseEntity<Void> response = restTemplate.exchange(url, HttpMethod.POST, - new HttpEntity<>(null, headers), Void.class); - if (!response.getStatusCode().equals(HttpStatus.ACCEPTED)) { - log.error("Failed to declare consumer for database with id {} table with id {}", databaseId, tableId); - throw new AmqpException("Failed to declare consumer"); - } - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/impl/SemanticServiceGatewayImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/impl/SemanticServiceGatewayImpl.java deleted file mode 100644 index 7b4f839984dd0f106758aefc320d110eff4c84f8..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/gateway/impl/SemanticServiceGatewayImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package at.tuwien.gateway.impl; - -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.exception.SemanticEntityNotFoundException; -import at.tuwien.gateway.SemanticServiceGateway; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.*; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -import java.net.URI; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -@Slf4j -@Service -public class SemanticServiceGatewayImpl implements SemanticServiceGateway { - - private final RestTemplate restTemplate; - - @Autowired - public SemanticServiceGatewayImpl(RestTemplate restTemplate) { - this.restTemplate = restTemplate; - } - - @Override - public EntityDto getEntity(Long ontologyId, String uri, String authorization) throws SemanticEntityNotFoundException { - final String url = "/api/semantic/ontology/" + ontologyId + "/entity?uri=" + uri; - final HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", authorization); - final ResponseEntity<EntityDto[]> response = restTemplate.exchange(url, HttpMethod.GET, - new HttpEntity<>(null, headers), EntityDto[].class); - if (!response.getStatusCode().equals(HttpStatus.OK) || response.getBody() == null) { - log.error("Failed to get semantic entity for uri {}", uri); - throw new SemanticEntityNotFoundException("Failed to get concept for uri " + uri); - } - if (response.getBody().length != 1) { - log.error("None or multiple entities found for uri {}", uri); - throw new SemanticEntityNotFoundException("None or multiple entities found for uri " + uri); - } - return response.getBody()[0]; - } - - private String urlEncode(String value) { - return URLEncoder.encode(value, StandardCharsets.UTF_8); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java deleted file mode 100644 index 80540955804af3cf86557f538a8c21f9cd8572fb..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.entities.database.DatabaseAccess; -import org.apache.http.auth.BasicUserPrincipal; -import org.mapstruct.Mapper; - -import java.security.Principal; - -@Mapper(componentModel = "spring") -public interface DatabaseMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class); - - default Principal userDetailsDtoToPrincipal(UserDetailsDto data) { - return new BasicUserPrincipal(data.getUsername()); - } - - DatabaseAccessDto databaseAccessToDatabaseAccessDto(DatabaseAccess data); - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java deleted file mode 100644 index ae85377f62543ef21eb9b44f13ebae4fc21e7775..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/IdentifierMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.entities.identifier.Identifier; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; - -@Mapper(componentModel = "spring") -public interface IdentifierMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(IdentifierMapper.class); - - @Mappings({ - @Mapping(target = "database.identifier", ignore = true) - }) - IdentifierDto identifierToIdentifierDto(Identifier data); - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index b57185b5c5499b4a7d61a520e0d2f3875183ddf6..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,49 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.auth.SignupRequestDto; -import at.tuwien.api.user.GrantedAuthorityDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.user.User; -import at.tuwien.entities.user.UserAttribute; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -import java.util.UUID; - - -@Mapper(componentModel = "spring") -public interface UserMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - - /* keep */ - @Mappings({ - @Mapping(target = "id", expression = "java(data.getId().toString())") - }) - UserDetailsDto userDtoToUserDetailsDto(UserDto data); - - UserDto userToUserDto(User data); - - UserBriefDto userToUserBriefDto(User data); - - User signupRequestDtoToUser(SignupRequestDto data); - - default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { - final GrantedAuthority authority = new SimpleGrantedAuthority(data.getAuthority()); - log.trace("mapped granted authority {} to granted authority {}", data, authority); - return authority; - } - - default UserAttribute tripleToUserAttribute(UUID userId, String name, String value) { - return UserAttribute.builder() - .userId(userId) - .name(name) - .value(value) - .build(); - } -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java deleted file mode 100644 index 04a8da854e9fdcc99a059c3aa1d7728e21b8780b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.Container; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ContainerRepository extends JpaRepository<Container, Long> { -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java deleted file mode 100644 index f117748c36d8d3cdcefc8074f9b37bc87c448e53..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.DatabaseAccessKey; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> { - - @Query("select a from DatabaseAccess a where a.hdbid = :databaseId and a.user.username = :username") - Optional<DatabaseAccess> findByDatabaseIdAndUsername(Long databaseId, String username); - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java deleted file mode 100644 index b1020fdcc532602d72cad5018b964edec4f25eea..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.container.image.ContainerImage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImageRepository extends JpaRepository<ContainerImage, Long> { -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java deleted file mode 100644 index 1be6bbd2549e0e8dc2fa00dea458ccb1211d52c0..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.Realm; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface RealmRepository extends JpaRepository<Realm, UUID> { -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java deleted file mode 100644 index bb29c1b3453d4d04fa92da625ce2661455043f6b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.database.table.columns.TableColumn; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableColumnRepository extends JpaRepository<TableColumn, Long> { -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java deleted file mode 100644 index a311002ac39720e119e81a050b0655cdb107aa36..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ConceptIdxRepository extends ElasticsearchRepository<ConceptDto, String> { -} \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java deleted file mode 100644 index d05a03a7b1c09a4917824b66ab4402e43c818057..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.ColumnDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; - -public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java deleted file mode 100644 index e9a69076c0caf10685f549853e4f7e88ea647e21..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.TableDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TableIdxRepository extends ElasticsearchRepository<TableDto, Long> { -} \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java deleted file mode 100644 index 5b7301819e945ea130bb868f90ef0fcb03474266..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface UnitIdxRepository extends ElasticsearchRepository<UnitDto, String> { -} \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/AccessService.java deleted file mode 100644 index e09173e665459818c8e5885c7f9296f8ced6d517..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/AccessService.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.AccessDeniedException; -import at.tuwien.exception.NotAllowedException; -import org.springframework.transaction.annotation.Transactional; - -public interface AccessService { - - @Transactional(readOnly = true) - DatabaseAccess find(Long databaseId, String username) throws NotAllowedException; - - /** - * Checks if the user with username has access to the database with given id. - * - * @param databaseId The database id. - * @param username The username. - * @return The access object. - * @throws AccessDeniedException The user does not have access. - */ - DatabaseAccess hasAccess(Long databaseId, String username) throws AccessDeniedException; -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/ContainerService.java deleted file mode 100644 index 31e8f11f17129e5552b0278917627d7c8ff66824..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerNotFoundException; - -public interface ContainerService { - - Container find(Long id) throws ContainerNotFoundException; -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/DatabaseService.java deleted file mode 100644 index 4564509ff95683695567fd1dfcf26785abe78bb9..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; - -public interface DatabaseService { - - /** - * Finds a specific database for a given id in the metadata database. - * - * @param databaseId The database id. - * @return The database if found. - * @throws DatabaseNotFoundException The database was not found. - */ - Database find(Long databaseId) throws DatabaseNotFoundException; -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java deleted file mode 100644 index 8c34a8a02111b0e20d7c7433d697c44c3e5e2527..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.AmqpException; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; - -public interface MessageQueueService { - - @EventListener(ApplicationReadyEvent.class) - void init() throws AmqpException; - - /** - * Creates a queue and consumer that re-routes the insert requests to the Query Service. Therefore and due to the - * dependency this method cannot take any input during startup or seeding phase as it would introduce a deadlock. - * Seeding is solely performed by the Query Service on startup. - * - * @param table The table. - * @throws AmqpException The broker service did not allow to create a consumer. - */ - void create(Table table) throws AmqpException; -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/UserService.java deleted file mode 100644 index 1134fa24d9c66d582052972654270b4da8450b62..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/UserService.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; - -public interface UserService { - - User findByUsername(String username) throws UserNotFoundException; -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java deleted file mode 100644 index 85fc7196d4adc6e86bdb84f68ffdfb88d48fec6b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ /dev/null @@ -1,48 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.exception.AccessDeniedException; -import at.tuwien.exception.NotAllowedException; -import at.tuwien.repository.mdb.DatabaseAccessRepository; -import at.tuwien.service.AccessService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Optional; - -@Log4j2 -@Service -public class AccessServiceImpl implements AccessService { - - private final DatabaseAccessRepository databaseAccessRepository; - - @Autowired - public AccessServiceImpl(DatabaseAccessRepository databaseAccessRepository) { - this.databaseAccessRepository = databaseAccessRepository; - } - - @Override - @Transactional(readOnly = true) - public DatabaseAccess find(Long databaseId, String username) throws NotAllowedException { - final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username); - if (optional.isEmpty()) { - log.error("Failed to find database access for database with id {}", databaseId); - throw new NotAllowedException("Failed to find database access"); - } - return optional.get(); - } - - @Override - @Transactional(readOnly = true) - public DatabaseAccess hasAccess(Long databaseId, String username) throws AccessDeniedException { - final Optional<DatabaseAccess> optional = databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username); - if (optional.isEmpty()) { - log.error("Failed to retrieve access, not found"); - throw new AccessDeniedException("Failed to retrieve access"); - } - return optional.get(); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java deleted file mode 100644 index 13d425c5a9ed1a1524997d27348b89db9ce49e1d..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.repository.mdb.ContainerRepository; -import at.tuwien.service.ContainerService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Slf4j -@Service -public class ContainerServiceImpl implements ContainerService { - - private final ContainerRepository containerRepository; - - @Autowired - public ContainerServiceImpl(ContainerRepository containerRepository) { - this.containerRepository = containerRepository; - } - - @Override - public Container find(Long id) throws ContainerNotFoundException { - final Optional<Container> container = containerRepository.findById(id); - if (container.isEmpty()) { - log.error("Failed to find container with id {}", id); - throw new ContainerNotFoundException("Failed to find container"); - } - return container.get(); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java deleted file mode 100644 index 4bbf56e20ace77276c17b60b6cdc96b50cfa96e7..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.repository.mdb.DatabaseRepository; -import at.tuwien.service.DatabaseService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class DatabaseServiceImpl implements DatabaseService { - - private final DatabaseRepository databaseRepository; - - @Autowired - public DatabaseServiceImpl(DatabaseRepository databaseRepository) { - this.databaseRepository = databaseRepository; - } - - @Override - public Database find(Long databaseId) throws DatabaseNotFoundException { - final Optional<Database> database = databaseRepository.findByContainerIdAndDatabaseId(databaseId); - if (database.isEmpty()) { - log.error("Failed to find database with id {}", databaseId); - throw new DatabaseNotFoundException("could not find database with this id"); - } - return database.get(); - } -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java deleted file mode 100644 index 144112ade064e0c0e938a326cfca0d71cd377250..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java +++ /dev/null @@ -1,33 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.database.Database; -import com.mchange.v2.c3p0.ComboPooledDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.stereotype.Service; - -@Log4j2 -@Service -public abstract class HibernateConnector { - - protected static ComboPooledDataSource getPrivilegedDataSource(ContainerImage image, Container container) { - return getPrivilegedDataSource(image, container, null); - } - - protected static ComboPooledDataSource getPrivilegedDataSource(ContainerImage image, Container container, Database database) { - final ComboPooledDataSource dataSource = new ComboPooledDataSource(); - final String url = "jdbc:" + image.getJdbcMethod() + "://" + container.getHost() + ":" + container.getPort() + "/" + (database != null ? database.getInternalName() : ""); - dataSource.setJdbcUrl(url); - dataSource.setUser(container.getPrivilegedUsername()); - dataSource.setPassword(container.getPrivilegedPassword()); - dataSource.setInitialPoolSize(5); - dataSource.setMinPoolSize(5); - dataSource.setAcquireIncrement(5); - dataSource.setMaxPoolSize(20); - dataSource.setMaxStatements(100); - log.trace("mapped data source {}", dataSource); - return dataSource; - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java deleted file mode 100644 index 1984eaf285320a5ab1a242e845047f1e37c6282e..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java +++ /dev/null @@ -1,54 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.*; -import at.tuwien.repository.mdb.TableRepository; -import at.tuwien.service.MessageQueueService; -import com.rabbitmq.client.*; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.io.IOException; -import java.util.List; - -@Log4j2 -@Service -public class RabbitMqService implements MessageQueueService { - - private final Channel channel; - private final TableRepository tableRepository; - - @Autowired - public RabbitMqService(Channel channel, TableRepository tableRepository) { - this.channel = channel; - this.tableRepository = tableRepository; - } - - @Override - @EventListener(ApplicationReadyEvent.class) - @Transactional(readOnly = true) - public void init() throws AmqpException { - final List<Table> tables = tableRepository.findAll(); - for (Table table : tables) { - create(table); - } - } - - @Override - @Transactional(readOnly = true) - public void create(Table table) throws AmqpException { - try { - channel.queueDeclare(table.getQueueName(), true, false, false, null); - channel.queueBind(table.getQueueName(), table.getDatabase().getExchangeName(), table.getRoutingKey()); - } catch (IOException e) { - log.error("Failed to create queue and bind for table with id {}", table.getId()); - throw new AmqpException("Failed to create", e); - } - log.info("Created queue for table with id {}", table.getId()); - } - -} diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java deleted file mode 100644 index 47f1ac286b3fa39407359baf5cdc58a4f8d700f5..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package at.tuwien.service.impl; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.repository.mdb.UserRepository; -import at.tuwien.service.UserService; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Log4j2 -@Service -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Autowired - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public User findByUsername(String username) throws UserNotFoundException { - final Optional<User> optional = userRepository.findByUsername(username); - if (optional.isEmpty()) { - log.error("Failed to retrieve user with username {}", username); - throw new UserNotFoundException("Failed to retrieve user"); - } - return optional.get(); - } - -} diff --git a/dbrepo-user-service/.gitignore b/dbrepo-user-service/.gitignore deleted file mode 100644 index d68acdb421ac6a167610221b2792e4dcafa4f935..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -# Documentation -docs/*.html -docs/css/ -docs/images/ - -# Docker -ready - -## JUnit -.attach_pid* - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-user-service/Dockerfile b/dbrepo-user-service/Dockerfile deleted file mode 100644 index 67f852e33708a84af2ae63024cb1968932394998..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:3-openjdk-17 as build -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:17-alpine as runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=root -ENV METADATA_PASSWORD=dbrepo -ENV GATEWAY_ENDPOINT=http://gateway-service -ENV JWT_ISSUER="http://localhost/realms/dbrepo" -ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" -ENV LOG_LEVEL=debug -ENV SEARCH_PASSWORD=admin - -WORKDIR /app - -COPY --from=build ./rest-service/target/rest-service-*.jar ./user-service.jar - -EXPOSE 9098 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./user-service.jar"] diff --git a/dbrepo-user-service/README.md b/dbrepo-user-service/README.md deleted file mode 100644 index ae61ee03af964f84a5e42666af5402e8ab930b8e..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# User Service - -## Actuator - -- Actuator Info: http://localhost:9098/actuator/info -- Actuator Health: http://localhost:9098/actuator/health -- Actuator Prometheus: http://localhost:9098/actuator/prometheus - -## Swagger UI Endpoints - -- Swagger UI: http://localhost:9098/swagger-ui/index.html - -## OpenAPI Endpoints - -- OpenAPI v3 as .yaml: http://localhost:9098/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-user-service/pom.xml b/dbrepo-user-service/pom.xml deleted file mode 100644 index 58c0085e5a10631b42b3258ad72aeceeea3244a1..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/pom.xml +++ /dev/null @@ -1,299 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.6</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-user-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-user-service</name> - <description> - The query service provides an interface to insert data into the tables created by the table service. It - also allows for view-only (possibly paginated and versioned) query execution to the raw data and consumes - messages in the message queue from the Broker Service. - </description> - <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/</url> - <developers> - <developer> - <name>Martin Weise</name> - <email>martin.weise@tuwien.ac.at</email> - <organization>TU Wien</organization> - </developer> - <developer> - <name>Moritz Staudinger</name> - <email>moritz.staudinger@tuwien.ac.at</email> - <organization>TU Wien</organization> - </developer> - </developers> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>services</module> - <module>report</module> - </modules> - - <properties> - <java.version>17</java.version> - <spring-cloud.version>4.0.2</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> - <jacoco.version>0.8.10</jacoco.version> - <jwt.version>4.3.0</jwt.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> - <opencsv.version>5.7.1</opencsv.version> - <super-csv.version>2.4.0</super-csv.version> - <jsql.version>4.6</jsql.version> - <keycloak.version>21.0.2</keycloak.version> - <hibernate.version>6.2.2.Final</hibernate.version> - <springdoc-openapi.version>2.1.0</springdoc-openapi.version> - <hsqldb.version>2.7.2</hsqldb.version> - <opensearch-client.version>1.1.0</opensearch-client.version> - <opensearch-rest-client.version>2.8.0</opensearch-rest-client.version> - <jackson.version>2.15.2</jackson.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-amqp</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-test</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Authentication --> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-common</artifactId> - <version>${keycloak.version}</version> - </dependency> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - <version>${jwt.version}</version> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>spring-data-opensearch-starter</artifactId> - <version>${opensearch-client.version}</version> - </dependency> - <!-- OpenSearch --> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-high-level-client</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <dependency> - <groupId>org.opensearch.client</groupId> - <artifactId>opensearch-rest-client-sniffer</artifactId> - <version>${opensearch-rest-client.version}</version> - </dependency> - <!-- Swagger --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Entity, API, QueryStore --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-api</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-entites</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <!-- Mapping --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - <optional>true</optional> - <!-- IntelliJ --> - </dependency> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - <version>${mapstruct.version}</version> - </dependency> - </dependencies> - - <build> - <resources> - <resource> - <directory>${basedir}/src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/application*.yml</include> - <include>**/templates/*.xml</include> - </includes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/entities/**/*</exclude> - <exclude>at/tuwien/seeder/**/*</exclude> - <exclude>at/tuwien/handlers/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>at/tuwien/auth/**/*</exclude> - <exclude>**/FdaUserServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-site-plugin</artifactId> - <version>3.7.1</version> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-project-info-reports-plugin</artifactId> - <version>3.0.0</version> - </plugin> - <plugin> - <groupId>com.soebes.maven.plugins</groupId> - <artifactId>doxygen-maven-plugin</artifactId> - <version>1.1.0</version> - <configuration> - <haveDot>false</haveDot> - <quiet>false</quiet> - <projectName>This is a Test Project (basicReportTest)</projectName> - <outputDirectory>docs</outputDirectory> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-user-service/report/pom.xml b/dbrepo-user-service/report/pom.xml deleted file mode 100644 index 2555a8836e2385b118e95ebf55545c25bdb4296b..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/report/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-user-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.3.0</version> - <name>dbrepo-user-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/pom.xml b/dbrepo-user-service/rest-service/pom.xml deleted file mode 100644 index 866460b9a9a780799cea903104f4fefb9c9414c4..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-user-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.3.0</version> - <name>dbrepo-user-service-rest</name> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.jetbrains</groupId> - <artifactId>annotations</artifactId> - <version>RELEASE</version> - <scope>compile</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java deleted file mode 100644 index 16286483e5305cf89e5ca53962bab42d0c18a730..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@EnableJpaAuditing -@EnableTransactionManagement -@EnableScheduling -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"}) -@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class}) -public class FdaUserServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(FdaUserServiceApplication.class, args); - } - -} \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java deleted file mode 100644 index 353d949c4b4fb39c8b93bc22ef45fd325e53d0c2..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ /dev/null @@ -1,46 +0,0 @@ -package at.tuwien.config; - -import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; -import org.springdoc.core.models.GroupedOpenApi; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class SwaggerConfig { - - @Value("${app.version:unknown}") - private String version; - - @Bean - public OpenAPI springShopOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("Database Repository User Service API") - .contact(new Contact() - .name("Prof. Andreas Rauber") - .email("andreas.rauber@tuwien.ac.at")) - .description("Service that manages the users") - .version(version) - .license(new License() - .name("Apache 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0"))) - .externalDocs(new ExternalDocumentation() - .description("Wiki Documentation") - .url("https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/wikis")); - } - - @Bean - public GroupedOpenApi publicApi() { - return GroupedOpenApi.builder() - .group("user-service") - .pathsToMatch("/api/**") - .build(); - } - -} - diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java deleted file mode 100644 index 78639cb60da78bc6b43743d957068c4d852d440b..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ /dev/null @@ -1,127 +0,0 @@ -package at.tuwien.handlers; - -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import io.swagger.v3.oas.annotations.Hidden; -import net.sf.jsqlparser.JSQLParserException; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ApiExceptionHandler extends ResponseEntityExceptionHandler { - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(ForeignUserException.class) - public ResponseEntity<ApiErrorDto> handle(ForeignUserException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.user.foreignpermission") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) - @ExceptionHandler(NotAllowedException.class) - public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.METHOD_NOT_ALLOWED) - .message(e.getLocalizedMessage()) - .code("error.user.permission") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(RealmNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(RealmNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.user.realmnotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NO_CONTENT) - @ExceptionHandler(RemoteUnavailableException.class) - public ResponseEntity<ApiErrorDto> handle(RemoteUnavailableException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NO_CONTENT) - .message(e.getLocalizedMessage()) - .code("error.user.remoteunavailable") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(RoleNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(RoleNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.user.rolenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.CONFLICT) - @ExceptionHandler(UserAlreadyExistsException.class) - public ResponseEntity<ApiErrorDto> handle(UserAlreadyExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.CONFLICT) - .message(e.getLocalizedMessage()) - .code("error.user.alreadyexists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(UserAttributeNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(UserAttributeNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.user.attributenotfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.EXPECTATION_FAILED) - @ExceptionHandler(UserEmailAlreadyExistsException.class) - public ResponseEntity<ApiErrorDto> handle(UserEmailAlreadyExistsException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.EXPECTATION_FAILED) - .message(e.getLocalizedMessage()) - .code("error.user.emailexists") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - - @Hidden - @ResponseStatus(HttpStatus.NOT_FOUND) - @ExceptionHandler(UserNotFoundException.class) - public ResponseEntity<ApiErrorDto> handle(UserNotFoundException e, WebRequest request) { - final ApiErrorDto response = ApiErrorDto.builder() - .status(HttpStatus.NOT_FOUND) - .message(e.getLocalizedMessage()) - .code("error.user.notfound") - .build(); - return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus()); - } - -} diff --git a/dbrepo-user-service/rest-service/src/main/resources/application-local.yml b/dbrepo-user-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index d207f4e24d3ebff8f1a952ddc1e40df1a80b59f5..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,54 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: localhost - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: user-service - rabbitmq: - host: localhost - virtual-host: dbrepo - username: fda - password: fda - opensearch: - username: admin - password: admin - host: localhost - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9098 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: trace - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - gateway.endpoint: http://localhost - default_role: default-researcher-roles - jwt: - issuer: http://localhost/realms/dbrepo - public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/main/resources/application.yml b/dbrepo-user-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index ce3b0aaa7debfef355ef4f57cea70c07da06bd29..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,69 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - autoconfigure: - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration - datasource: - url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}" - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - search: - default: - elasticsearch: - host: search-db - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: "${METADATA_DB}" - jdbc: - time_zone: UTC - application: - name: user-service - rabbitmq: - host: broker-service - virtual-host: dbrepo - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - opensearch: - username: "${SEARCH_USERNAME}" - password: "${SEARCH_PASSWORD}" - host: search-db - port: 9200 - protocol: http - cloud: - loadbalancer.ribbon.enabled: false -management: - endpoints: - web: - exposure: - include: health,info,prometheus - endpoint: - health: - probes: - enabled: true - health: - readinessState: - enabled: true - livenessState: - enabled: true -server: - port: 9098 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -fda: - gateway.endpoint: "${GATEWAY_ENDPOINT}" - default_role: "${DEFAULT_ROLE}" - jwt: - issuer: "${JWT_ISSUER}" - public_key: "${JWT_PUBKEY}" \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/main/resources/config.properties b/dbrepo-user-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-user-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml b/dbrepo-user-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml deleted file mode 100644 index 01f90448caca030263dade2fe9e4d07c20b938f0..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/main/resources/mariadb_hibernate.cfg.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> -<hibernate-configuration> - <session-factory> - <property name="current_session_context_class">thread</property> - <property name="transaction.coordinator_class">jdbc</property> - <property name="c3p0.min_size">1</property> - <property name="c3p0.max_size">30</property> - <property name="c3p0.acquire_increment">1</property> - <property name="c3p0.timeout">1800</property> - <property name="show_sql">true</property> - <property name="format_sql">true</property> - <property name="hbm2ddl.auto">update</property> - <mapping class="at.tuwien.querystore.Column" /> - <mapping class="at.tuwien.querystore.Query" /> - <mapping class="at.tuwien.querystore.Table" /> - </session-factory> -</hibernate-configuration> diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index c5adb93d3dddc50757d88380ed50857a1e034610..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java deleted file mode 100644 index 41c39be818ad7656ceaac0afa6a24c7d97e63aca..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.UserIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class ActuatorComponentTest extends BaseUnitTest { - - @MockBean - private UserIdxRepository userIdxRepository; - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @Test - public void actuatorInfo_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/info")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void actuatorLiveness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/liveness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorReadiness_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/health/readiness")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("UP")); - } - - @Test - public void actuatorPrometheus_succeeds() throws Exception { - this.mockMvc.perform(get("/actuator/prometheus")); - } - -} diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java deleted file mode 100644 index 4ced37e36342d85968a89064f82ec3d1b92dda1e..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package at.tuwien.endpoint; - -import at.tuwien.BaseUnitTest; -import at.tuwien.repository.sdb.UserIdxRepository; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@Log4j2 -@ExtendWith(SpringExtension.class) -@AutoConfigureMockMvc -@SpringBootTest -public class SwaggerComponentTest extends BaseUnitTest { - - @MockBean - private UserIdxRepository userIdxRepository; - - @Autowired - private MockMvc mockMvc; - - @MockBean - private Channel channel; - - @Test - public void swaggerUi_succeeds() throws Exception { - this.mockMvc.perform(get("/swagger-ui/index.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - -} diff --git a/dbrepo-user-service/rest-service/src/test/resources/application.properties b/dbrepo-user-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index a4240a2231c63c27442188323fd41ac1f35075b2..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,30 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable discovery -spring.cloud.discovery.enabled=false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled=false -spring.cloud.config.enabled=false - -# internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.sql.init.mode=always -spring.sql.init.schema-locations=classpath*:init/schema.sql -spring.jpa.hibernate.ddl-auto=create - -# additional logging -logging.level.root=error -logging.level.at.tuwien.=trace -logging.level.org.hibernate.SQL=debug -logging.level.org.hibernate.type=trace - -# search service -fda.consumers=2 -fda.gateway.endpoint: http://localhost:15672 -fda.elastic.endpoint=dbrepo-search-db:9200 \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/test/resources/init/schema.sql b/dbrepo-user-service/rest-service/src/test/resources/init/schema.sql deleted file mode 100644 index f8482e47d5b0827e87537d940b54900a8f2d8f3b..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/test/resources/init/schema.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS fda; \ No newline at end of file diff --git a/dbrepo-user-service/services/pom.xml b/dbrepo-user-service/services/pom.xml deleted file mode 100644 index 606fcdf70802e7c696625274561730ff739349de..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-user-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.3.0</version> - </parent> - - <artifactId>services</artifactId> - <version>1.3.0</version> - <name>dbrepo-user-service-services</name> - -</project> diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java deleted file mode 100644 index 92b60f4f8a5ed8a566e2504d71b63478b1593f68..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package at.tuwien.auth; - -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.DecodedJWT; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.util.Arrays; -import java.util.Base64; -import java.util.stream.Collectors; - -@Slf4j -public class AuthTokenFilter extends OncePerRequestFilter { - - @Value("${fda.jwt.issuer}") - private String issuer; - - @Value("${fda.jwt.public_key}") - private String publicKey; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - final String jwt = parseJwt(request); - if (jwt != null) { - final UserDetails userDetails = verifyJwt(jwt); - log.debug("authenticated user {}", userDetails); - final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(request, response); - } - - public UserDetails verifyJwt(String token) throws ServletException { - final KeyFactory kf; - try { - kf = KeyFactory.getInstance("RSA"); - } catch (NoSuchAlgorithmException e) { - log.error("Failed to find RSA algorithm"); - throw new ServletException("Failed to find RSA algorithm", e); - } - final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); - final RSAPublicKey pubKey; - try { - pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); - } catch (InvalidKeySpecException e) { - log.error("Provided public key is invalid"); - throw new ServletException("Provided public key is invalid", e); - } - final Algorithm algorithm = Algorithm.RSA256(pubKey, null); - JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(issuer) - .withAudience("spring") - .build(); - final DecodedJWT jwt = verifier.verify(token); - final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); - return UserDetailsDto.builder() - .username(jwt.getClaim("client_id").asString()) - .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) - .build(); - } - - /** - * Parses the token from the HTTP header of the request - * - * @param request The request. - * @return The token. - */ - public String parseJwt(HttpServletRequest request) { - String headerAuth = request.getHeader("Authorization"); - if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); - } - return null; - } -} \ No newline at end of file diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index 084171253fb67bc6bbd2ba70698360e0385c98d6..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,49 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.mapper.AuthenticationMapper; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Getter -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - private final AuthenticationMapper authenticationMapper; - - @Autowired - public GatewayConfig(AuthenticationMapper authenticationMapper) { - this.authenticationMapper = authenticationMapper; - } - - @Bean - public RestTemplate restTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getMessageConverters().add(authenticationMapper.mappingJackson2HttpMessageConverter()); - return restTemplate; - } - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index c4944a469174ad1962d5c54cc483400dbee12f1d..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java deleted file mode 100644 index 48f9f2eedab0c47715f263b9d51cfa0b3ab43fb3..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package at.tuwien.config; - -import lombok.extern.log4j.Log4j2; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.opensearch.client.RestClient; -import org.opensearch.client.RestClientBuilder; -import org.opensearch.client.RestHighLevelClient; -import org.opensearch.client.sniff.NodesSniffer; -import org.opensearch.client.sniff.OpenSearchNodesSniffer; -import org.opensearch.client.sniff.Sniffer; -import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Log4j2 -@Configuration -public class OpenSearchConfig extends AbstractOpenSearchConfiguration { - - @Value("${spring.opensearch.host}") - private String openSearchHost; - - @Value("${spring.opensearch.port}") - private Integer openSearchPort; - - @Value("${spring.opensearch.protocol}") - private String openSearchProtocol; - - @Value("${spring.opensearch.username}") - private String openSearchUsername; - - @Value("${spring.opensearch.password}") - private String openSearchPassword; - - @Bean - @Override - public RestHighLevelClient opensearchClient() { - log.debug("open search endpoint: {}://{}:{}", openSearchProtocol, openSearchHost, openSearchPort); - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(openSearchUsername, openSearchPassword)); - RestClientBuilder builder = RestClient.builder(new HttpHost(openSearchHost, openSearchPort, openSearchProtocol)) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); - return new RestHighLevelClient(builder); - } - - @Bean - public Sniffer nodesSniffer() { - final NodesSniffer nodesSniffer = new OpenSearchNodesSniffer(opensearchClient().getLowLevelClient(), - TimeUnit.SECONDS.toMillis(5), OpenSearchNodesSniffer.Scheme.HTTP); - return Sniffer.builder(opensearchClient().getLowLevelClient()) - .setNodesSniffer(nodesSniffer) - .build(); - - } -} \ No newline at end of file diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java deleted file mode 100644 index 5df540670976455fe25c8985718bd6a0e3a0d0d3..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ /dev/null @@ -1,96 +0,0 @@ -package at.tuwien.config; - -import at.tuwien.auth.AuthTokenFilter; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import org.springframework.security.web.util.matcher.OrRequestMatcher; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import jakarta.servlet.http.HttpServletResponse; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class WebSecurityConfig { - - @Bean - public AuthTokenFilter authTokenFilter() { - return new AuthTokenFilter(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - final OrRequestMatcher internalEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/actuator/**", "GET"), - new AntPathRequestMatcher("/v3/api-docs.yaml"), - new AntPathRequestMatcher("/v3/api-docs/**"), - new AntPathRequestMatcher("/swagger-ui/**"), - new AntPathRequestMatcher("/swagger-ui.html") - ); - final OrRequestMatcher publicEndpoints = new OrRequestMatcher( - new AntPathRequestMatcher("/api/user/**", "GET"), - new AntPathRequestMatcher("/api/user/**", "POST"), - new AntPathRequestMatcher("/api/maintenance/**", "GET") - ); - /* enable CORS and disable CSRF */ - http = http.cors().and().csrf().disable(); - /* set session management to stateless */ - http = http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and(); - /* set unauthorized requests exception handler */ - http = http - .exceptionHandling() - .authenticationEntryPoint( - (request, response, ex) -> { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, - ex.getMessage() - ); - } - ).and(); - /* set permissions on endpoints */ - http.authorizeHttpRequests() - /* our internal endpoints */ - .requestMatchers(internalEndpoints).permitAll() - /* our public endpoints */ - .requestMatchers(publicEndpoints).permitAll() - /* our private endpoints */ - .anyRequest().authenticated(); - /* add JWT token filter */ - http.addFilterBefore(authTokenFilter(), - UsernamePasswordAuthenticationFilter.class - ); - return http.build(); - } - - @Bean - public CorsFilter corsFilter() { - final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - final CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - } - -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-user-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java deleted file mode 100644 index 44c3d430f91d0ff44ce3fb4d1773b53231902d2b..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/NotAllowedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.METHOD_NOT_ALLOWED) -public class NotAllowedException extends Exception { - - public NotAllowedException(String msg) { - super(msg); - } - - public NotAllowedException(String msg, Throwable thr) { - super(msg, thr); - } - - public NotAllowedException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java deleted file mode 100644 index 0abb87f609f0a6706c8e499eabc23e3d46d3304d..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.exception; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - -@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "User not found") -public class UserNotFoundException extends Exception { - - public UserNotFoundException(String message) { - super(message); - } - - public UserNotFoundException(String message, Throwable thr) { - super(message, thr); - } - - public UserNotFoundException(Throwable thr) { - super(thr); - } - -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java deleted file mode 100644 index d6dd1414cfd26316d76920aaa1dfd67e160f12df..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/mapper/UserMapper.java +++ /dev/null @@ -1,58 +0,0 @@ -package at.tuwien.mapper; - -import at.tuwien.api.auth.SignupRequestDto; -import at.tuwien.api.user.GrantedAuthorityDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.entities.user.Group; -import at.tuwien.entities.user.GroupMembership; -import at.tuwien.entities.user.User; -import at.tuwien.entities.user.UserAttribute; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -import java.util.UUID; - -@Mapper(componentModel = "spring") -public interface UserMapper { - - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserMapper.class); - - /* keep */ - @Mappings({ - @Mapping(target = "id", expression = "java(data.getId().toString())") - }) - UserDetailsDto userBriefDtoToUserDetailsDto(UserBriefDto data); - - UserDto userToUserDto(User data); - - UserBriefDto userToUserBriefDto(User data); - - User signupRequestDtoToUser(SignupRequestDto data); - - default GroupMembership userGroupToGroupMembership(User user, Group group) { - return GroupMembership.builder() - .userId(user.getId()) - .groupId(group.getId()) - .build(); - } - - default GrantedAuthority grantedAuthorityDtoToGrantedAuthority(GrantedAuthorityDto data) { - final GrantedAuthority authority = new SimpleGrantedAuthority(data.getAuthority()); - log.trace("mapped granted authority {} to granted authority {}", data, authority); - return authority; - } - - default UserAttribute tripleToUserAttribute(UUID userId, String name, String value) { - return UserAttribute.builder() - .id(UUID.randomUUID()) - .userId(userId) - .name(name) - .value(value) - .build(); - } -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java deleted file mode 100644 index c4b162f681d89b74ce1c1f70970999e140e089b4..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.tuwien.repository.mdb; - -import at.tuwien.entities.user.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; -import java.util.UUID; - -@Repository -public interface UserRepository extends JpaRepository<User, UUID> { - - Optional<User> findByUsername(String username); - - Optional<User> findByEmail(String email); - -} diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java deleted file mode 100644 index 8f22ea7fe5e692a94a09799d74ae144605cd7bf3..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package at.tuwien.repository.sdb; - -import at.tuwien.api.user.UserDto; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface UserIdxRepository extends ElasticsearchRepository<UserDto, UUID> { -} \ No newline at end of file diff --git a/dbrepo-user-service/services/src/test/resources/application.properties b/dbrepo-user-service/services/src/test/resources/application.properties deleted file mode 100644 index 69df4a312304990e2f284318cd5428d960f14f0b..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/services/src/test/resources/application.properties +++ /dev/null @@ -1,14 +0,0 @@ -# disable discovery -spring.cloud.discovery.enabled = false - -# disable cloud config and config discovery -spring.cloud.config.discovery.enabled = false -spring.cloud.config.enabled = false - -# disable datasource -spring.datasource.url=jdbc:h2:mem:testdb -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1568347ab33c75530dae88da0691b8251a644344..7eb2942561bf935e4f7998b8379e37ea83edeffa 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -87,58 +87,6 @@ services: logging: driver: json-file - dbrepo-database-service: - restart: "no" - container_name: dbrepo-database-service - hostname: database-service - image: dbrepo/database-service:1.3 - networks: - core: - ports: - - "9092:9092" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9092/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-container-service: - condition: service_healthy - dbrepo-broker-service: - condition: service_started - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - - dbrepo-container-service: - restart: "no" - container_name: dbrepo-container-service - hostname: container-service - image: dbrepo/container-service:1.3 - networks: - core: - ports: - - "9091:9091" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9091/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - dbrepo-authentication-service: restart: "no" container_name: dbrepo-authentication-service @@ -159,92 +107,6 @@ services: logging: driver: json-file - dbrepo-query-service: - restart: "no" - container_name: dbrepo-query-service - hostname: query-service - image: dbrepo/query-service:1.3 - networks: - core: - ports: - - "9093:9093" - env_file: - - .env - volumes: - - "${SHARED_FILESYSTEM}:/tmp" - healthcheck: - test: wget -qO- localhost:9093/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-broker-service: - condition: service_healthy - dbrepo-table-service: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - - dbrepo-table-service: - restart: "no" - container_name: dbrepo-table-service - hostname: table-service - image: dbrepo/table-service:1.3 - networks: - core: - ports: - - "9094:9094" - env_file: - - .env - volumes: - - "${SHARED_FILESYSTEM}:/tmp" - healthcheck: - test: wget -qO- localhost:9094/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - dbrepo-broker-service: - condition: service_healthy - logging: - driver: json-file - - dbrepo-identifier-service: - restart: "no" - container_name: dbrepo-identifier-service - hostname: identifier-service - image: dbrepo/identifier-service:1.3 - networks: - core: - ports: - - "9096:9096" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9096/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-query-service: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - volumes: - - "${SHARED_FILESYSTEM}:/tmp" - logging: - driver: json-file - dbrepo-metadata-service: restart: "no" container_name: dbrepo-metadata-service @@ -287,60 +149,6 @@ services: logging: driver: json-file - dbrepo-user-service: - restart: "no" - container_name: dbrepo-user-service - hostname: user-service - image: dbrepo/user-service:1.3 - networks: - core: - ports: - - "9098:9098" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9098/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - - dbrepo-semantics-service: - restart: "no" - container_name: dbrepo-semantics-service - hostname: semantics-service - image: dbrepo/semantics-service:1.3 - networks: - core: - ports: - - "9097:9097" - env_file: - - .env - volumes: - - "${SHARED_FILESYSTEM}:/tmp" - healthcheck: - test: wget -qO- localhost:9097/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - dbrepo-broker-service: restart: "no" container_name: dbrepo-broker-service @@ -448,25 +256,11 @@ services: condition: service_healthy dbrepo-broker-service: condition: service_healthy - dbrepo-container-service: - condition: service_healthy - dbrepo-database-service: - condition: service_healthy - dbrepo-identifier-service: - condition: service_healthy dbrepo-metadata-service: condition: service_healthy - dbrepo-query-service: - condition: service_healthy dbrepo-search-db: condition: service_healthy - dbrepo-semantics-service: - condition: service_healthy - dbrepo-table-service: - condition: service_healthy dbrepo-ui: condition: service_started - dbrepo-user-service: - condition: service_healthy logging: driver: json-file diff --git a/docker-compose.yml b/docker-compose.yml index 39105d942b816094df22aceafbf15cb46d9360c7..0079831c05eeec07dc0d786c5baea289def102a1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -89,85 +89,6 @@ services: logging: driver: json-file - dbrepo-data-service: - restart: "no" - container_name: dbrepo-data-service - hostname: data-service - build: ./dbrepo-data-service - image: dbrepo-data-service - networks: - core: - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9050/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-data-db: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - logging: - driver: json-file - - dbrepo-database-service: - restart: "no" - container_name: dbrepo-database-service - hostname: database-service - build: ./dbrepo-database-service - image: dbrepo-database-service - networks: - core: - ports: - - "9092:9092" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9092/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-container-service: - condition: service_healthy - dbrepo-broker-service: - condition: service_started - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - - dbrepo-container-service: - restart: "no" - container_name: dbrepo-container-service - hostname: container-service - build: ./dbrepo-container-service - image: dbrepo-container-service - networks: - core: - ports: - - "9091:9091" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9091/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - dbrepo-authentication-service: restart: "no" container_name: dbrepo-authentication-service @@ -189,95 +110,6 @@ services: logging: driver: json-file - dbrepo-query-service: - restart: "no" - container_name: dbrepo-query-service - hostname: query-service - build: ./dbrepo-query-service - image: dbrepo-query-service - networks: - core: - ports: - - "9093:9093" - env_file: - - .env - volumes: - - "/tmp:/tmp" - healthcheck: - test: wget -qO- localhost:9093/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-broker-service: - condition: service_healthy - dbrepo-table-service: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - - dbrepo-table-service: - restart: "no" - container_name: dbrepo-table-service - hostname: table-service - build: ./dbrepo-table-service - image: dbrepo-table-service - networks: - core: - ports: - - "9094:9094" - env_file: - - .env - volumes: - - "/tmp:/tmp" - healthcheck: - test: wget -qO- localhost:9094/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - dbrepo-broker-service: - condition: service_healthy - logging: - driver: json-file - - dbrepo-identifier-service: - restart: "no" - container_name: dbrepo-identifier-service - hostname: identifier-service - build: ./dbrepo-identifier-service - image: dbrepo-identifier-service - networks: - core: - ports: - - "9096:9096" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9096/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-query-service: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - volumes: - - /tmp:/tmp - logging: - driver: json-file - dbrepo-metadata-service: restart: "no" container_name: dbrepo-metadata-service @@ -288,6 +120,8 @@ services: core: env_file: - .env + volumes: + - "/tmp:/tmp" ports: - "9099:9099" healthcheck: @@ -322,62 +156,6 @@ services: logging: driver: json-file - dbrepo-user-service: - restart: "no" - container_name: dbrepo-user-service - hostname: user-service - build: ./dbrepo-user-service - image: dbrepo-user-service - networks: - core: - ports: - - "9098:9098" - env_file: - - .env - healthcheck: - test: wget -qO- localhost:9098/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - - dbrepo-semantics-service: - restart: "no" - container_name: dbrepo-semantics-service - hostname: semantics-service - build: ./dbrepo-semantics-service - image: dbrepo-semantics-service - networks: - core: - ports: - - "9097:9097" - env_file: - - .env - volumes: - - "/tmp:/tmp" - healthcheck: - test: wget -qO- localhost:9097/actuator/health/readiness | grep -q "UP" || exit 1 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metadata-db: - condition: service_healthy - dbrepo-authentication-service: - condition: service_healthy - dbrepo-search-db: - condition: service_healthy - logging: - driver: json-file - dbrepo-broker-service: restart: "no" container_name: dbrepo-broker-service @@ -493,25 +271,11 @@ services: condition: service_healthy dbrepo-broker-service: condition: service_healthy - dbrepo-container-service: - condition: service_healthy - dbrepo-database-service: - condition: service_healthy - dbrepo-identifier-service: - condition: service_healthy dbrepo-metadata-service: condition: service_healthy - dbrepo-query-service: - condition: service_healthy dbrepo-search-db: condition: service_healthy - dbrepo-semantics-service: - condition: service_healthy - dbrepo-table-service: - condition: service_healthy dbrepo-ui: condition: service_started - dbrepo-user-service: - condition: service_healthy logging: driver: json-file