From 853660f26d8b6ac94a5880cef60bf9fee9e6aa09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 21:36:33 +0300 Subject: [PATCH 001/163] maven(deps): bump jacksonVersion from 2.17.0 to 2.17.1 (#4629) Bumps `jacksonVersion` from 2.17.0 to 2.17.1. Updates `com.fasterxml.jackson.core:jackson-core` from 2.17.0 to 2.17.1 - [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.17.0...jackson-core-2.17.1) Updates `com.fasterxml.jackson.core:jackson-annotations` from 2.17.0 to 2.17.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.17.0 to 2.17.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.17.0 to 2.17.1 --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.fasterxml.jackson.core:jackson-annotations dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d6a75efce9c9..fb326cf3892a 100644 --- a/pom.xml +++ b/pom.xml @@ -1211,7 +1211,7 @@ 5.11.12.Final 5.5.5 1.9.22 - 2.17.0 + 2.17.1 5.10.2 3.12.4 2.2 From d31b072afb50fca908eca3bb61e13e5646bf8192 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 22:46:36 +0300 Subject: [PATCH 002/163] maven(deps): bump net.bytebuddy:byte-buddy from 1.14.14 to 1.14.15 (#4632) Bumps [net.bytebuddy:byte-buddy](https://github.com/raphw/byte-buddy) from 1.14.14 to 1.14.15. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.14.14...byte-buddy-1.14.15) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fb326cf3892a..343821f30318 100644 --- a/pom.xml +++ b/pom.xml @@ -1124,7 +1124,7 @@ net.bytebuddy byte-buddy - 1.14.14 + 1.14.15 net.bytebuddy From 6eb52c9a18b78593cadd53a12be61868128551a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 22:47:50 +0300 Subject: [PATCH 003/163] maven(deps): bump net.bytebuddy:byte-buddy-agent from 1.14.14 to 1.14.15 (#4633) Bumps [net.bytebuddy:byte-buddy-agent](https://github.com/raphw/byte-buddy) from 1.14.14 to 1.14.15. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.14.14...byte-buddy-1.14.15) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy-agent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 343821f30318..8c2737ddbc62 100644 --- a/pom.xml +++ b/pom.xml @@ -1129,7 +1129,7 @@ net.bytebuddy byte-buddy-agent - 1.14.14 + 1.14.15 From 857bcd1bbe781aed221f79eb2c5ec389ed4a283d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 22:00:33 +0300 Subject: [PATCH 004/163] maven(deps-dev): bump org.testcontainers:mysql from 1.19.7 to 1.19.8 (#4634) Bumps [org.testcontainers:mysql](https://github.com/testcontainers/testcontainers-java) from 1.19.7 to 1.19.8. - [Release notes](https://github.com/testcontainers/testcontainers-java/releases) - [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.7...1.19.8) --- updated-dependencies: - dependency-name: org.testcontainers:mysql dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8c2737ddbc62..96da084468f8 100644 --- a/pom.xml +++ b/pom.xml @@ -580,7 +580,7 @@ org.testcontainers mysql - 1.19.7 + 1.19.8 test From b9e1542bc994a0a5323e727c19305a6429d84098 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 22:01:02 +0300 Subject: [PATCH 005/163] maven(deps-dev): bump org.testcontainers:postgresql (#4635) Bumps [org.testcontainers:postgresql](https://github.com/testcontainers/testcontainers-java) from 1.19.7 to 1.19.8. - [Release notes](https://github.com/testcontainers/testcontainers-java/releases) - [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.7...1.19.8) --- updated-dependencies: - dependency-name: org.testcontainers:postgresql dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 96da084468f8..3c9239a0de5d 100644 --- a/pom.xml +++ b/pom.xml @@ -586,7 +586,7 @@ org.testcontainers postgresql - 1.19.7 + 1.19.8 test From 9369eee6361b5a79eaff2762b55dfb9dc64574b8 Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Fri, 10 May 2024 14:57:19 +0200 Subject: [PATCH 006/163] TRUNK-6234 Provide JDK 11 and JDK 18 docker images --- Dockerfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 08955eee9daf..bfa6b81ba0ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,8 @@ # graphic logo is a trademark of OpenMRS Inc. ### Compile Stage (platform-agnostic) -FROM --platform=$BUILDPLATFORM maven:3.8-amazoncorretto-8 as compile +ARG DEV_JDK=amazoncorretto-8 +FROM --platform=$BUILDPLATFORM maven:3.8-$DEV_JDK as compile RUN yum -y update && yum -y install git && yum clean all @@ -46,7 +47,7 @@ ARG MVN_ARGS='clean install -DskipTests' RUN mvn $MVN_SETTINGS $MVN_ARGS ### Development Stage -FROM maven:3.8-amazoncorretto-8 as dev +FROM maven:3.8-$DEV_JDK as dev RUN yum -y update && yum -y install tar gzip git && yum clean all @@ -92,7 +93,8 @@ ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/mvn-entrypoint.sh"] CMD ["/openmrs/startup-dev.sh"] ### Production Stage -FROM tomcat:8.5-jdk8-corretto +ARG RUNTIME_JDK=jdk8-corretto +FROM tomcat:8.5-$RUNTIME_JDK RUN yum -y update && yum clean all && rm -rf /usr/local/tomcat/webapps/* From 6c99763fd5d1024fdb093c75e3504b49372f28d9 Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Fri, 10 May 2024 15:55:14 +0200 Subject: [PATCH 007/163] TRUNK-6234 Provide JDK 11 and JDK 18 docker images, fix --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index bfa6b81ba0ae..0a5fd157ea85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,10 @@ # Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS # graphic logo is a trademark of OpenMRS Inc. -### Compile Stage (platform-agnostic) ARG DEV_JDK=amazoncorretto-8 +ARG RUNTIME_JDK=jdk8-corretto + +### Compile Stage (platform-agnostic) FROM --platform=$BUILDPLATFORM maven:3.8-$DEV_JDK as compile RUN yum -y update && yum -y install git && yum clean all @@ -93,7 +95,6 @@ ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/mvn-entrypoint.sh"] CMD ["/openmrs/startup-dev.sh"] ### Production Stage -ARG RUNTIME_JDK=jdk8-corretto FROM tomcat:8.5-$RUNTIME_JDK RUN yum -y update && yum clean all && rm -rf /usr/local/tomcat/webapps/* From 982882722b155da4d86a4b964a0f4dd6cf01fa5f Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Fri, 10 May 2024 16:09:45 +0200 Subject: [PATCH 008/163] TRUNK-6234 Adding build config for dev --- bamboo-specs/bamboo.yml | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/bamboo-specs/bamboo.yml b/bamboo-specs/bamboo.yml index 7c6f41526773..1c04118cf6cc 100644 --- a/bamboo-specs/bamboo.yml +++ b/bamboo-specs/bamboo.yml @@ -23,6 +23,8 @@ stages: jobs: - Deploy to maven - Deploy to docker + - Deploy to docker JDK 11 + - Deploy to docker JDK 17 - Release: manual: true final: false @@ -152,6 +154,60 @@ Deploy to docker: --build-arg MVN_ARGS="clean install -DskipTests" -t ${IMAGE_NIGHTLY} . description: Deploy to docker artifact-subscriptions: [] +Deploy to docker JDK 11: + key: DTD + tasks: + - checkout: + force-clean-build: 'false' + description: Checkout source + - script: + interpreter: SHELL + scripts: + - |- + #!/bin/bash -eux + + set +x + + export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-amazoncorretto-11 + export IMAGE_DEV=${bamboo.docker.image.name}:dev-amazoncorretto-11 + + docker login -u ${bamboo.dockerhub.username} -p ${bamboo.dockerhub.password} + + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-to=type=registry,mode=max,ref=${IMAGE_NIGHTLY}-cache \ + --cache-from=${IMAGE_NIGHTLY}-cache \ + --build-arg MVN_ARGS="clean install -DskipTests" \ + --build-arg DEV_JDK="amazoncorretto-11" \ + -t ${IMAGE_NIGHTLY} -t ${IMAGE_DEV} . + description: Deploy to docker + artifact-subscriptions: [] +Deploy to docker JDK 17: + key: DTD + tasks: + - checkout: + force-clean-build: 'false' + description: Checkout source + - script: + interpreter: SHELL + scripts: + - |- + #!/bin/bash -eux + + set +x + + export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-amazoncorretto-17 + export IMAGE_DEV=${bamboo.docker.image.name}:dev-amazoncorretto-17 + + docker login -u ${bamboo.dockerhub.username} -p ${bamboo.dockerhub.password} + + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-to=type=registry,mode=max,ref=${IMAGE_NIGHTLY}-cache \ + --cache-from=${IMAGE_NIGHTLY}-cache \ + --build-arg MVN_ARGS="clean install -DskipTests" \ + --build-arg DEV_JDK="amazoncorretto-17" \ + -t ${IMAGE_NIGHTLY} -t ${IMAGE_DEV} . + description: Deploy to docker + artifact-subscriptions: [] Release: key: RTD tasks: From 7d70503404031469b8e3fa98cc4dd39edb38e0c8 Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Fri, 10 May 2024 16:10:29 +0200 Subject: [PATCH 009/163] TRUNK-6234 Adding build config for dev, fix --- bamboo-specs/bamboo.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bamboo-specs/bamboo.yml b/bamboo-specs/bamboo.yml index 1c04118cf6cc..546f68305d8a 100644 --- a/bamboo-specs/bamboo.yml +++ b/bamboo-specs/bamboo.yml @@ -155,7 +155,7 @@ Deploy to docker: description: Deploy to docker artifact-subscriptions: [] Deploy to docker JDK 11: - key: DTD + key: DTD11 tasks: - checkout: force-clean-build: 'false' @@ -182,7 +182,7 @@ Deploy to docker JDK 11: description: Deploy to docker artifact-subscriptions: [] Deploy to docker JDK 17: - key: DTD + key: DTD17 tasks: - checkout: force-clean-build: 'false' From 0060a1d80b91658bb2fbe381daff4e0a5919392f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 23:41:25 +0300 Subject: [PATCH 010/163] github-actions(deps): bump ossf/scorecard-action from 2.3.1 to 2.3.3 (#4636) Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.3.1 to 2.3.3. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/v2.3.1...v2.3.3) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 780f18af8f24..d61d7aa8b491 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -32,7 +32,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@v2.3.1 + uses: ossf/scorecard-action@v2.3.3 with: results_file: results.sarif results_format: sarif From e962f22be8ec4f02998e0f13b7918b792de71dcf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 12:25:24 +0300 Subject: [PATCH 011/163] maven(deps): bump aspectjVersion from 1.9.22 to 1.9.22.1 (#4638) Bumps `aspectjVersion` from 1.9.22 to 1.9.22.1. Updates `org.aspectj:aspectjrt` from 1.9.22 to 1.9.22.1 - [Release notes](https://github.com/eclipse/org.aspectj/releases) - [Commits](https://github.com/eclipse/org.aspectj/commits) Updates `org.aspectj:aspectjweaver` from 1.9.22 to 1.9.22.1 - [Release notes](https://github.com/eclipse/org.aspectj/releases) - [Commits](https://github.com/eclipse/org.aspectj/commits) --- updated-dependencies: - dependency-name: org.aspectj:aspectjrt dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.aspectj:aspectjweaver dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3c9239a0de5d..e07522d4e2f7 100644 --- a/pom.xml +++ b/pom.xml @@ -1210,7 +1210,7 @@ 5.6.15.Final 5.11.12.Final 5.5.5 - 1.9.22 + 1.9.22.1 2.17.1 5.10.2 3.12.4 From 1018560da6025eaaa3d611206abc666ded18d4a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 22:53:38 +0300 Subject: [PATCH 012/163] --- (#4643) updated-dependencies: - dependency-name: org.codehaus.mojo:build-helper-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e07522d4e2f7..a49e9aee2871 100644 --- a/pom.xml +++ b/pom.xml @@ -660,7 +660,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.5.0 + 3.6.0 com.googlecode.maven-java-formatter-plugin From 0102f60d99c10c853cbbbbcab9a46fc61c54e2a9 Mon Sep 17 00:00:00 2001 From: Ian <52504170+ibacher@users.noreply.github.com> Date: Tue, 21 May 2024 16:22:10 -0400 Subject: [PATCH 013/163] Update to Tomcat 9 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0a5fd157ea85..ad00abcba1ad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,7 +95,7 @@ ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/mvn-entrypoint.sh"] CMD ["/openmrs/startup-dev.sh"] ### Production Stage -FROM tomcat:8.5-$RUNTIME_JDK +FROM tomcat:9-$RUNTIME_JDK RUN yum -y update && yum clean all && rm -rf /usr/local/tomcat/webapps/* From 84d5db5d5c9d9bab06d2d5ed5fca08a8e846e082 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 23:08:10 +0300 Subject: [PATCH 014/163] --- (#4647) updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a49e9aee2871..c8d5a8f881b3 100644 --- a/pom.xml +++ b/pom.xml @@ -1124,7 +1124,7 @@ net.bytebuddy byte-buddy - 1.14.15 + 1.14.16 net.bytebuddy From 00b99cf2c9e83c28c174bff95ae77aea6e877bc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 23:08:44 +0300 Subject: [PATCH 015/163] --- (#4648) updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy-agent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c8d5a8f881b3..9874b04c550c 100644 --- a/pom.xml +++ b/pom.xml @@ -1129,7 +1129,7 @@ net.bytebuddy byte-buddy-agent - 1.14.15 + 1.14.16 From 28b69bddc2804f61b1efd2046ef491231b4b70f4 Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Tue, 28 May 2024 11:06:20 +0200 Subject: [PATCH 016/163] TRUNK-6234 Adding release config --- bamboo-specs/bamboo.yml | 148 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 134 insertions(+), 14 deletions(-) diff --git a/bamboo-specs/bamboo.yml b/bamboo-specs/bamboo.yml index 546f68305d8a..64653f550029 100644 --- a/bamboo-specs/bamboo.yml +++ b/bamboo-specs/bamboo.yml @@ -30,6 +30,12 @@ stages: final: false jobs: - Release + - Release image variants: + manual: false + final: false + jobs: + - Release JDK 11 image + - Release JDK 17 image Build: key: BUIL tasks: @@ -168,17 +174,31 @@ Deploy to docker JDK 11: set +x - export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-amazoncorretto-11 - export IMAGE_DEV=${bamboo.docker.image.name}:dev-amazoncorretto-11 + export JDK_IMAGE="amazoncorretto-11" + export RUNTIME_JDK="jdk8-corretto" + + export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-${JDK_IMAGE} + export IMAGE_DEV=${bamboo.docker.image.name}:dev-${JDK_IMAGE} docker login -u ${bamboo.dockerhub.username} -p ${bamboo.dockerhub.password} docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ - --cache-to=type=registry,mode=max,ref=${IMAGE_NIGHTLY}-cache \ - --cache-from=${IMAGE_NIGHTLY}-cache \ - --build-arg MVN_ARGS="clean install -DskipTests" \ - --build-arg DEV_JDK="amazoncorretto-11" \ - -t ${IMAGE_NIGHTLY} -t ${IMAGE_DEV} . + --target dev \ + --cache-to=type=registry,mode=max,ref=${IMAGE_DEV}-cache \ + --cache-from=${IMAGE_DEV}-cache \ + --build-arg MVN_ARGS="clean install -DskipTests" \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + -t ${IMAGE_DEV} . + + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-to=type=registry,mode=max,ref=${IMAGE_NIGHTLY}-cache \ + --cache-from=${IMAGE_DEV}-cache \ + --cache-from=${IMAGE_NIGHTLY}-cache \ + --build-arg MVN_ARGS="clean install -DskipTests" \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + -t ${IMAGE_NIGHTLY} . description: Deploy to docker artifact-subscriptions: [] Deploy to docker JDK 17: @@ -195,17 +215,31 @@ Deploy to docker JDK 17: set +x - export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-amazoncorretto-17 - export IMAGE_DEV=${bamboo.docker.image.name}:dev-amazoncorretto-17 + export JDK_IMAGE="amazoncorretto-17" + export RUNTIME_JDK="jdk17-corretto" + + export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-${JDK_IMAGE} + export IMAGE_DEV=${bamboo.docker.image.name}:dev-${JDK_IMAGE} docker login -u ${bamboo.dockerhub.username} -p ${bamboo.dockerhub.password} docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ - --cache-to=type=registry,mode=max,ref=${IMAGE_NIGHTLY}-cache \ - --cache-from=${IMAGE_NIGHTLY}-cache \ - --build-arg MVN_ARGS="clean install -DskipTests" \ - --build-arg DEV_JDK="amazoncorretto-17" \ - -t ${IMAGE_NIGHTLY} -t ${IMAGE_DEV} . + --target dev \ + --cache-to=type=registry,mode=max,ref=${IMAGE_DEV}-cache \ + --cache-from=${IMAGE_DEV}-cache \ + --build-arg MVN_ARGS="clean install -DskipTests" \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + -t ${IMAGE_DEV} . + + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-to=type=registry,mode=max,ref=${IMAGE_NIGHTLY}-cache \ + --cache-from=${IMAGE_DEV}-cache \ + --cache-from=${IMAGE_NIGHTLY}-cache \ + --build-arg MVN_ARGS="clean install -DskipTests" \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + -t ${IMAGE_NIGHTLY} . description: Deploy to docker artifact-subscriptions: [] Release: @@ -290,6 +324,92 @@ Release: variableScope: PLAN description: Save next release version artifact-subscriptions: [] +Release JDK 11 image: + key: RTD11 + tasks: + - checkout: + force-clean-build: 'false' + description: Checkout Default Repository + - script: + interpreter: SHELL + scripts: + - |- + #!/bin/bash -eux + + set +x + + export OMRS_VERSION=${bamboo.maven.release.version} + export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-${JDK_IMAGE} + + export IMAGE=${bamboo.docker.image.name}:${OMRS_VERSION} + export DEV_IMAGE=${bamboo.docker.image.name}:${OMRS_VERSION}-dev + export JDK_IMAGE="amazoncorretto-11" + export RUNTIME_JDK="jdk11-corretto" + + docker login -u ${bamboo.dockerhub.username} -p ${bamboo.dockerhub.password} + + echo "Checkout the release version" + git checkout ${OMRS_VERSION} + + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-from ${DEV_IMAGE}-${JDK_IMAGE}-cache \ + --target dev \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + --build-arg MVN_ARGS="clean install -DskipTests" -t ${DEV_IMAGE}-${JDK_IMAGE} . + + echo "Building the production image" + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-from ${DEV_IMAGE}-${JDK_IMAGE}-cache \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + --build-arg MVN_ARGS="clean install -DskipTests" -t ${IMAGE}-${JDK_IMAGE} . + + description: Build and push JDK 11 images + artifact-subscriptions: [] +Release JDK 17 image: + key: RTD17 + tasks: + - checkout: + force-clean-build: 'false' + description: Checkout Default Repository + - script: + interpreter: SHELL + scripts: + - |- + #!/bin/bash -eux + + set +x + + export OMRS_VERSION=${bamboo.maven.release.version} + export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-${JDK_IMAGE} + + export IMAGE=${bamboo.docker.image.name}:${OMRS_VERSION} + export DEV_IMAGE=${bamboo.docker.image.name}:${OMRS_VERSION}-dev + export JDK_IMAGE="amazoncorretto-17" + export RUNTIME_JDK="jdk17-corretto" + + docker login -u ${bamboo.dockerhub.username} -p ${bamboo.dockerhub.password} + + echo "Checkout the release version" + git checkout ${OMRS_VERSION} + + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-from ${DEV_IMAGE}-${JDK_IMAGE}-cache \ + --target dev \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + --build-arg MVN_ARGS="clean install -DskipTests" -t ${DEV_IMAGE}-${JDK_IMAGE} . + + echo "Building the production image" + docker buildx build --pull --push --platform ${bamboo.docker.image.platforms} \ + --cache-from ${DEV_IMAGE}-${JDK_IMAGE}-cache \ + --build-arg DEV_JDK="${JDK_IMAGE}" \ + --build-arg RUNTIME_JDK="${RUNTIME_JDK}" \ + --build-arg MVN_ARGS="clean install -DskipTests" -t ${IMAGE}-${JDK_IMAGE} . + + description: Build and push JDK 17 images + artifact-subscriptions: [] variables: docker.image.name: openmrs/openmrs-core docker.image.tag: nightly From b289591149e21822bf0e88c52522de88adc3118d Mon Sep 17 00:00:00 2001 From: rkorytkowski Date: Tue, 28 May 2024 11:44:15 +0200 Subject: [PATCH 017/163] TRUNK-6234 Fixing runtime jdk11 --- bamboo-specs/bamboo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bamboo-specs/bamboo.yml b/bamboo-specs/bamboo.yml index 64653f550029..5787c46261c2 100644 --- a/bamboo-specs/bamboo.yml +++ b/bamboo-specs/bamboo.yml @@ -175,7 +175,7 @@ Deploy to docker JDK 11: set +x export JDK_IMAGE="amazoncorretto-11" - export RUNTIME_JDK="jdk8-corretto" + export RUNTIME_JDK="jdk11-corretto" export IMAGE_NIGHTLY=${bamboo.docker.image.name}:${bamboo.docker.image.tag}-${JDK_IMAGE} export IMAGE_DEV=${bamboo.docker.image.name}:dev-${JDK_IMAGE} From a8ab02db43bc886764964d00b3642589ee8547fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 23:08:01 +0300 Subject: [PATCH 018/163] maven(deps): bump net.bytebuddy:byte-buddy-agent from 1.14.16 to 1.14.17 (#4651) Bumps [net.bytebuddy:byte-buddy-agent](https://github.com/raphw/byte-buddy) from 1.14.16 to 1.14.17. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.14.16...byte-buddy-1.14.17) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy-agent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9874b04c550c..4a9f426be423 100644 --- a/pom.xml +++ b/pom.xml @@ -1129,7 +1129,7 @@ net.bytebuddy byte-buddy-agent - 1.14.16 + 1.14.17 From 4ea3471fc5affde52b3c3b58da5b92ee2ec32b81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 23:41:58 +0300 Subject: [PATCH 019/163] maven(deps): bump net.bytebuddy:byte-buddy from 1.14.16 to 1.14.17 (#4653) Bumps [net.bytebuddy:byte-buddy](https://github.com/raphw/byte-buddy) from 1.14.16 to 1.14.17. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.14.16...byte-buddy-1.14.17) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a9f426be423..ba6b68f867d1 100644 --- a/pom.xml +++ b/pom.xml @@ -1124,7 +1124,7 @@ net.bytebuddy byte-buddy - 1.14.16 + 1.14.17 net.bytebuddy From 7b3bb535e6324f47e698aca31cb4967490b4acb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 23:49:27 +0300 Subject: [PATCH 020/163] maven(deps): bump commons-validator:commons-validator (#4652) Bumps commons-validator:commons-validator from 1.8.0 to 1.9.0. --- updated-dependencies: - dependency-name: commons-validator:commons-validator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba6b68f867d1..338687348991 100644 --- a/pom.xml +++ b/pom.xml @@ -528,7 +528,7 @@ commons-validator commons-validator - 1.8.0 + 1.9.0 org.aspectj From d5f53efa6d1121f4ed0ac7199ff77a43acab90e2 Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Fri, 31 May 2024 01:35:57 +0530 Subject: [PATCH 021/163] TRUNK-6240: Field Answer - Switching from Hibernate Mapping to JPA annotations (#4645) --- .../main/java/org/openmrs/FieldAnswer.java | 23 +++++- api/src/main/resources/hibernate.cfg.xml | 1 - .../api/db/hibernate/FieldAnswer.hbm.xml | 75 ------------------- 3 files changed, 21 insertions(+), 78 deletions(-) delete mode 100644 api/src/main/resources/org/openmrs/api/db/hibernate/FieldAnswer.hbm.xml diff --git a/api/src/main/java/org/openmrs/FieldAnswer.java b/api/src/main/java/org/openmrs/FieldAnswer.java index 30e54d131838..d426c8d874ba 100644 --- a/api/src/main/java/org/openmrs/FieldAnswer.java +++ b/api/src/main/java/org/openmrs/FieldAnswer.java @@ -13,25 +13,45 @@ import org.codehaus.jackson.annotate.JsonIgnore; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Transient; + /** * FieldAnswer * * @version 1.0 */ +@Entity +@Table(name = "field_answer") public class FieldAnswer extends BaseOpenmrsObject { public static final long serialVersionUID = 5656L; // Fields - + @Column(name = "date_created", length = 19) private Date dateCreated; + @ManyToOne + @JoinColumn(name = "answer_id") + @Id private Concept concept; + @ManyToOne + @JoinColumn(name = "creator", nullable = false) private User creator; + + @ManyToOne + @JoinColumn(name = "field_id") + @Id private Field field; + @Transient private boolean dirty; // Constructors @@ -63,7 +83,6 @@ public void setClean() { } // Property accessors - /** * @return Returns the concept. */ diff --git a/api/src/main/resources/hibernate.cfg.xml b/api/src/main/resources/hibernate.cfg.xml index c40eced51978..25888c751c95 100644 --- a/api/src/main/resources/hibernate.cfg.xml +++ b/api/src/main/resources/hibernate.cfg.xml @@ -46,7 +46,6 @@ - diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/FieldAnswer.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/FieldAnswer.hbm.xml deleted file mode 100644 index 867a91352bf6..000000000000 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/FieldAnswer.hbm.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From f57b1d6760d1218607433c4915693ba694121cc3 Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Fri, 31 May 2024 18:40:58 +0530 Subject: [PATCH 022/163] TRUNK-6239: AlertRecipient - Switching from Hibernate Mapping to JPA annotations (#4646) --- .../openmrs/notification/AlertRecipient.java | 23 ++++++++++- api/src/main/resources/hibernate.cfg.xml | 1 - .../db/hibernate/AlertRecipient.hbm.xml | 39 ------------------- .../org/openmrs/api/OrderServiceTest.java | 2 + 4 files changed, 23 insertions(+), 42 deletions(-) delete mode 100644 api/src/main/resources/org/openmrs/notification/db/hibernate/AlertRecipient.hbm.xml diff --git a/api/src/main/java/org/openmrs/notification/AlertRecipient.java b/api/src/main/java/org/openmrs/notification/AlertRecipient.java index ac28c4ab4783..4fa30dd578e7 100644 --- a/api/src/main/java/org/openmrs/notification/AlertRecipient.java +++ b/api/src/main/java/org/openmrs/notification/AlertRecipient.java @@ -14,26 +14,45 @@ import org.openmrs.BaseOpenmrsObject; import org.openmrs.User; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + + /** * This class is essentially a wrapper for the user object. The alert is assigned to each recipient. * A recipient then has either "read" the alert or has not. * * @see org.openmrs.notification.Alert */ +@Entity +@Table(name = "notification_alert_recipient") public class AlertRecipient extends BaseOpenmrsObject { private static final long serialVersionUID = -507111109155L; + @JoinColumn(name = "alert_id") + @Id + @ManyToOne private Alert alert; - + + @JoinColumn(name = "user_id", updatable = false, insertable = false) + @Id + @ManyToOne private User recipient; + @Column(name = "alert_read", length = 1) private Boolean alertRead = false; + @Column(name = "date_changed", length = 19, updatable = false, insertable = false) private Date dateChanged; // necessary for hql queries - private transient Integer recipientId; + @Column(name = "user_id", nullable = false, updatable = false, insertable = false) + private Integer recipientId; /** Default empty constructor */ public AlertRecipient() { diff --git a/api/src/main/resources/hibernate.cfg.xml b/api/src/main/resources/hibernate.cfg.xml index 25888c751c95..acddeedea4b0 100644 --- a/api/src/main/resources/hibernate.cfg.xml +++ b/api/src/main/resources/hibernate.cfg.xml @@ -99,7 +99,6 @@ - diff --git a/api/src/main/resources/org/openmrs/notification/db/hibernate/AlertRecipient.hbm.xml b/api/src/main/resources/org/openmrs/notification/db/hibernate/AlertRecipient.hbm.xml deleted file mode 100644 index 0698c9c4eb9c..000000000000 --- a/api/src/main/resources/org/openmrs/notification/db/hibernate/AlertRecipient.hbm.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/api/src/test/java/org/openmrs/api/OrderServiceTest.java b/api/src/test/java/org/openmrs/api/OrderServiceTest.java index 075a7cdb0193..b3b62d31a4bb 100644 --- a/api/src/test/java/org/openmrs/api/OrderServiceTest.java +++ b/api/src/test/java/org/openmrs/api/OrderServiceTest.java @@ -70,6 +70,7 @@ import org.openmrs.api.impl.OrderServiceImpl; import org.openmrs.customdatatype.datatype.FreeTextDatatype; import org.openmrs.messagesource.MessageSourceService; +import org.openmrs.notification.AlertRecipient; import org.openmrs.order.OrderUtil; import org.openmrs.order.OrderUtilTest; import org.openmrs.orders.TimestampOrderNumberGenerator; @@ -2664,6 +2665,7 @@ public void saveOrder_shouldFailIfTheJavaTypeOfThePreviousOrderDoesNotMatch() th .addAnnotatedClass(LocationAttributeType.class) .addAnnotatedClass(SerializedObject.class) .addAnnotatedClass(PatientState.class) + .addAnnotatedClass(AlertRecipient.class) .getMetadataBuilder().build(); From 4b5f83feb9bf2ddb5d5ec5e28da02ff2f1e8dba1 Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Sun, 2 Jun 2024 01:38:53 +0530 Subject: [PATCH 023/163] TRUNK-6238: Drug Ingredients - Switching from Hibernate Mapping to JPA annotations (#4644) --- .../main/java/org/openmrs/DrugIngredient.java | 28 +++++++++-- api/src/main/resources/hibernate.cfg.xml | 1 - .../api/db/hibernate/DrugIngredient.hbm.xml | 48 ------------------- .../org/openmrs/api/OrderServiceTest.java | 3 ++ 4 files changed, 26 insertions(+), 54 deletions(-) delete mode 100644 api/src/main/resources/org/openmrs/api/db/hibernate/DrugIngredient.hbm.xml diff --git a/api/src/main/java/org/openmrs/DrugIngredient.java b/api/src/main/java/org/openmrs/DrugIngredient.java index 8f4c709dac57..916785904f67 100644 --- a/api/src/main/java/org/openmrs/DrugIngredient.java +++ b/api/src/main/java/org/openmrs/DrugIngredient.java @@ -9,21 +9,40 @@ */ package org.openmrs; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import java.io.Serializable; + /** * DrugIngredient */ -public class DrugIngredient extends BaseOpenmrsObject implements java.io.Serializable, OpenmrsObject { +@Entity +@Table(name = "drug_ingredient") +public class DrugIngredient extends BaseOpenmrsObject implements Serializable, OpenmrsObject { public static final long serialVersionUID = 94023L; // Fields - + @ManyToOne + @JoinColumn(name = "drug_id", updatable = false, insertable = false) + @Id private Drug drug; - + + @ManyToOne + @JoinColumn(name = "ingredient_id", updatable = false, insertable = false) + @Id private Concept ingredient; - + + @Column(name = "strength") private Double strength; + @JoinColumn(name = "units", insertable = false, updatable = false) + @ManyToOne private Concept units; // Constructors @@ -33,7 +52,6 @@ public DrugIngredient() { } // Property accessors - /** * @return the drug */ diff --git a/api/src/main/resources/hibernate.cfg.xml b/api/src/main/resources/hibernate.cfg.xml index acddeedea4b0..f8695300e5c1 100644 --- a/api/src/main/resources/hibernate.cfg.xml +++ b/api/src/main/resources/hibernate.cfg.xml @@ -43,7 +43,6 @@ - diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/DrugIngredient.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/DrugIngredient.hbm.xml deleted file mode 100644 index 19bee799e749..000000000000 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/DrugIngredient.hbm.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/api/src/test/java/org/openmrs/api/OrderServiceTest.java b/api/src/test/java/org/openmrs/api/OrderServiceTest.java index b3b62d31a4bb..cbb56999954a 100644 --- a/api/src/test/java/org/openmrs/api/OrderServiceTest.java +++ b/api/src/test/java/org/openmrs/api/OrderServiceTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; + import org.openmrs.Allergy; import org.openmrs.CareSetting; import org.openmrs.Concept; @@ -31,6 +32,7 @@ import org.openmrs.Condition; import org.openmrs.Diagnosis; import org.openmrs.Drug; +import org.openmrs.DrugIngredient; import org.openmrs.DrugOrder; import org.openmrs.Encounter; import org.openmrs.FreeTextDosingInstructions; @@ -2665,6 +2667,7 @@ public void saveOrder_shouldFailIfTheJavaTypeOfThePreviousOrderDoesNotMatch() th .addAnnotatedClass(LocationAttributeType.class) .addAnnotatedClass(SerializedObject.class) .addAnnotatedClass(PatientState.class) + .addAnnotatedClass(DrugIngredient.class) .addAnnotatedClass(AlertRecipient.class) .getMetadataBuilder().build(); From 4b08bc75c54122e6d8717793aef0395375562ba1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Jun 2024 22:13:03 +0300 Subject: [PATCH 024/163] maven(deps): bump org.sonarsource.scanner.maven:sonar-maven-plugin (#4654) Bumps [org.sonarsource.scanner.maven:sonar-maven-plugin](https://github.com/SonarSource/sonar-scanner-maven) from 3.11.0.3922 to 4.0.0.4121. - [Release notes](https://github.com/SonarSource/sonar-scanner-maven/releases) - [Commits](https://github.com/SonarSource/sonar-scanner-maven/compare/3.11.0.3922...4.0.0.4121) --- updated-dependencies: - dependency-name: org.sonarsource.scanner.maven:sonar-maven-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 338687348991..cebfe7b880bb 100644 --- a/pom.xml +++ b/pom.xml @@ -815,7 +815,7 @@ org.sonarsource.scanner.maven sonar-maven-plugin - 3.11.0.3922 + 4.0.0.4121 org.jacoco From 67ed5edd64a9fb37066fd491393219f8ef62d9b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:06:20 +0300 Subject: [PATCH 025/163] maven(deps): bump org.apache.maven.plugins:maven-javadoc-plugin (#4655) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.6.3 to 3.7.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.6.3...maven-javadoc-plugin-3.7.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index cebfe7b880bb..687846578549 100644 --- a/pom.xml +++ b/pom.xml @@ -725,7 +725,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.3 + 3.7.0 @@ -1142,7 +1142,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.3 + 3.7.0 true <em><small> Generated ${TIMESTAMP} NOTE - these libraries are in active development and subject to change</small></em> From 3a12e4fd867638135ac9f6b8a56e4094a9dadc05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:07:09 +0300 Subject: [PATCH 026/163] maven(deps): bump org.dbunit:dbunit from 2.7.3 to 2.8.0 (#4656) Bumps org.dbunit:dbunit from 2.7.3 to 2.8.0. --- updated-dependencies: - dependency-name: org.dbunit:dbunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 687846578549..ef781487bbb4 100644 --- a/pom.xml +++ b/pom.xml @@ -508,7 +508,7 @@ org.dbunit dbunit - 2.7.3 + 2.8.0 javax.validation From 45f12533429f4de7fa34de741728c6fef38710d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:09:01 +0300 Subject: [PATCH 027/163] maven(deps): bump com.google.guava:guava from 33.2.0-jre to 33.2.1-jre (#4657) Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.2.0-jre to 33.2.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ef781487bbb4..7da688874c3f 100644 --- a/pom.xml +++ b/pom.xml @@ -558,7 +558,7 @@ com.google.guava guava - 33.2.0-jre + 33.2.1-jre jakarta.xml.bind From 6ee0ed56ba76af23553dc74c98682c92b17b230f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 22:50:21 +0300 Subject: [PATCH 028/163] maven(deps): bump org.apache.maven.plugins:maven-jxr-plugin (#4658) Bumps [org.apache.maven.plugins:maven-jxr-plugin](https://github.com/apache/maven-jxr) from 3.3.2 to 3.4.0. - [Release notes](https://github.com/apache/maven-jxr/releases) - [Commits](https://github.com/apache/maven-jxr/compare/jxr-3.3.2...jxr-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jxr-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7da688874c3f..6ebc2ea4358c 100644 --- a/pom.xml +++ b/pom.xml @@ -1153,7 +1153,7 @@ org.apache.maven.plugins maven-jxr-plugin - 3.3.2 + 3.4.0 From 8f50e492bc5bf64f077f6386fbb5b431d39e17a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 22:07:17 +0300 Subject: [PATCH 029/163] maven(deps): bump org.apache.maven.plugins:maven-checkstyle-plugin (#4659) Bumps [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.3.1 to 3.4.0. - [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.3.1...maven-checkstyle-plugin-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6ebc2ea4358c..e6c7391cd2fe 100644 --- a/pom.xml +++ b/pom.xml @@ -684,7 +684,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.3.1 + 3.4.0 checkstyle.xml From 8d3e65b48ea3d41c1270c609a081b363849c8c41 Mon Sep 17 00:00:00 2001 From: Ssegujja Joseph Bate <38130891+josephbate@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:36:54 +0300 Subject: [PATCH 030/163] TRUNK-6242: editing the hydrate() to fetch concepts by id/Uuid/mappings by replacing ConceptService#getConcept() with ConceptService#getConceptByReference() (#4660) --- api/src/main/java/org/openmrs/Concept.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/openmrs/Concept.java b/api/src/main/java/org/openmrs/Concept.java index ecd9833cd7eb..8a63b0e1b4b0 100644 --- a/api/src/main/java/org/openmrs/Concept.java +++ b/api/src/main/java/org/openmrs/Concept.java @@ -1436,9 +1436,9 @@ public List getPossibleValues() { * @see org.openmrs.Attributable#hydrate(java.lang.String) */ @Override - public Concept hydrate(String s) { + public Concept hydrate(String reference) { try { - return Context.getConceptService().getConcept(Integer.valueOf(s)); + return Context.getConceptService().getConceptByReference(reference); } catch (Exception e) { // pass From d17bd15ae67e2bb92538640c3bfd4bde5220c3de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:49:05 +0300 Subject: [PATCH 031/163] maven(deps): bump org.apache.maven.plugins:maven-dependency-plugin (#4661) Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.6.1 to 3.7.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.6.1...maven-dependency-plugin-3.7.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e6c7391cd2fe..c3ab2cc4fae0 100644 --- a/pom.xml +++ b/pom.xml @@ -942,7 +942,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.6.1 + 3.7.0 org.apache.maven.plugins From 2111f62acc036525fbf45b4e7b1f864503cad940 Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Thu, 13 Jun 2024 19:18:00 +0530 Subject: [PATCH 032/163] OMRS-131: Detailed Audit Logging (#4620) --- api/pom.xml | 4 ++ api/src/main/java/org/openmrs/Allergy.java | 2 + .../java/org/openmrs/AllergyReaction.java | 2 + .../main/java/org/openmrs/CareSetting.java | 3 ++ api/src/main/java/org/openmrs/Cohort.java | 2 + .../java/org/openmrs/CohortMembership.java | 2 + api/src/main/java/org/openmrs/Concept.java | 2 + .../main/java/org/openmrs/ConceptAnswer.java | 3 ++ .../java/org/openmrs/ConceptAttribute.java | 2 + .../main/java/org/openmrs/ConceptClass.java | 2 + .../main/java/org/openmrs/ConceptComplex.java | 2 + .../java/org/openmrs/ConceptDatatype.java | 2 + .../java/org/openmrs/ConceptDescription.java | 3 ++ api/src/main/java/org/openmrs/ConceptMap.java | 2 + .../main/java/org/openmrs/ConceptMapType.java | 2 + .../main/java/org/openmrs/ConceptName.java | 2 + .../main/java/org/openmrs/ConceptNameTag.java | 2 + .../org/openmrs/ConceptReferenceTerm.java | 2 + .../org/openmrs/ConceptReferenceTermMap.java | 3 ++ api/src/main/java/org/openmrs/ConceptSet.java | 2 + .../main/java/org/openmrs/ConceptSource.java | 3 ++ api/src/main/java/org/openmrs/Condition.java | 2 + api/src/main/java/org/openmrs/Diagnosis.java | 2 + .../java/org/openmrs/DiagnosisAttribute.java | 2 + .../org/openmrs/DiagnosisAttributeType.java | 2 + api/src/main/java/org/openmrs/Drug.java | 3 ++ .../main/java/org/openmrs/DrugIngredient.java | 3 ++ api/src/main/java/org/openmrs/DrugOrder.java | 2 + .../java/org/openmrs/DrugReferenceMap.java | 4 +- api/src/main/java/org/openmrs/Encounter.java | 2 + .../java/org/openmrs/EncounterProvider.java | 3 ++ .../main/java/org/openmrs/EncounterRole.java | 3 ++ .../main/java/org/openmrs/EncounterType.java | 3 ++ api/src/main/java/org/openmrs/Field.java | 2 + .../main/java/org/openmrs/FieldAnswer.java | 2 + api/src/main/java/org/openmrs/FieldType.java | 3 ++ api/src/main/java/org/openmrs/Form.java | 3 ++ api/src/main/java/org/openmrs/FormField.java | 2 + .../main/java/org/openmrs/FormResource.java | 2 + .../main/java/org/openmrs/GlobalProperty.java | 2 + api/src/main/java/org/openmrs/Location.java | 2 + .../java/org/openmrs/LocationAttribute.java | 2 + .../org/openmrs/LocationAttributeType.java | 2 + .../main/java/org/openmrs/LocationTag.java | 3 ++ api/src/main/java/org/openmrs/Obs.java | 3 ++ api/src/main/java/org/openmrs/Order.java | 4 +- .../main/java/org/openmrs/OrderAttribute.java | 4 +- .../java/org/openmrs/OrderAttributeType.java | 2 + .../main/java/org/openmrs/OrderFrequency.java | 3 ++ api/src/main/java/org/openmrs/OrderGroup.java | 2 + .../java/org/openmrs/OrderGroupAttribute.java | 2 + .../org/openmrs/OrderGroupAttributeType.java | 2 + api/src/main/java/org/openmrs/OrderSet.java | 2 + .../java/org/openmrs/OrderSetAttribute.java | 2 + .../org/openmrs/OrderSetAttributeType.java | 2 + .../main/java/org/openmrs/OrderSetMember.java | 3 ++ api/src/main/java/org/openmrs/OrderType.java | 2 + api/src/main/java/org/openmrs/Patient.java | 2 + .../java/org/openmrs/PatientIdentifier.java | 2 + .../org/openmrs/PatientIdentifierType.java | 2 + .../main/java/org/openmrs/PatientProgram.java | 2 + .../org/openmrs/PatientProgramAttribute.java | 4 +- .../main/java/org/openmrs/PatientState.java | 2 + api/src/main/java/org/openmrs/Person.java | 12 +++-- .../main/java/org/openmrs/PersonAddress.java | 2 + .../java/org/openmrs/PersonAttribute.java | 2 + .../java/org/openmrs/PersonAttributeType.java | 2 + api/src/main/java/org/openmrs/PersonName.java | 2 + api/src/main/java/org/openmrs/Privilege.java | 3 ++ api/src/main/java/org/openmrs/Program.java | 2 + .../org/openmrs/ProgramAttributeType.java | 4 +- .../java/org/openmrs/ProgramWorkflow.java | 2 + .../org/openmrs/ProgramWorkflowState.java | 3 ++ api/src/main/java/org/openmrs/Provider.java | 2 + .../java/org/openmrs/ProviderAttribute.java | 2 + .../org/openmrs/ProviderAttributeType.java | 2 + .../main/java/org/openmrs/ReferralOrder.java | 3 ++ .../main/java/org/openmrs/Relationship.java | 2 + .../java/org/openmrs/RelationshipType.java | 2 + api/src/main/java/org/openmrs/Role.java | 2 + api/src/main/java/org/openmrs/User.java | 4 ++ api/src/main/java/org/openmrs/Visit.java | 2 + .../main/java/org/openmrs/VisitAttribute.java | 2 + api/src/main/java/org/openmrs/VisitType.java | 3 ++ .../envers/OpenMRSRevisionEntity.java | 46 +++++++++++++++++++ .../envers/OpenMRSRevisionEntityListener.java | 31 +++++++++++++ .../java/org/openmrs/notification/Alert.java | 2 + .../openmrs/notification/AlertRecipient.java | 2 + .../resources/hibernate.default.properties | 6 ++- .../db/hibernate/ConceptDescription.hbm.xml | 2 +- .../api/db/hibernate/ConceptName.hbm.xml | 2 +- .../api/db/hibernate/ConceptNameTag.hbm.xml | 2 +- .../openmrs/api/db/hibernate/Field.hbm.xml | 4 +- .../api/db/hibernate/FormResource.hbm.xml | 2 +- .../api/db/hibernate/GlobalProperty.hbm.xml | 4 +- .../org/openmrs/api/db/hibernate/Obs.hbm.xml | 2 +- .../openmrs/api/db/hibernate/Order.hbm.xml | 8 ++-- .../api/db/hibernate/OrderSetMember.hbm.xml | 2 +- .../org/openmrs/api/db/hibernate/Role.hbm.xml | 2 +- .../ValidateHibernateMappingsDatabaseIT.java | 8 ++-- pom.xml | 5 ++ .../autocomplete/OpenmrsAutoComplete.js | 2 +- 102 files changed, 314 insertions(+), 30 deletions(-) create mode 100644 api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntity.java create mode 100644 api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntityListener.java diff --git a/api/pom.xml b/api/pom.xml index d92c3468cc44..0864ba6f1df0 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -152,6 +152,10 @@ org.hibernate hibernate-search-orm + + org.hibernate + hibernate-envers + org.apache.lucene lucene-queryparser diff --git a/api/src/main/java/org/openmrs/Allergy.java b/api/src/main/java/org/openmrs/Allergy.java index 99c60695fa4a..6f0316215341 100644 --- a/api/src/main/java/org/openmrs/Allergy.java +++ b/api/src/main/java/org/openmrs/Allergy.java @@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollectionOption; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; /** @@ -37,6 +38,7 @@ */ @Entity @Table(name = "allergy") +@Audited public class Allergy extends BaseFormRecordableOpenmrsData { public static final long serialVersionUID = 1; diff --git a/api/src/main/java/org/openmrs/AllergyReaction.java b/api/src/main/java/org/openmrs/AllergyReaction.java index 2db04225fb2d..28d5e416e95c 100644 --- a/api/src/main/java/org/openmrs/AllergyReaction.java +++ b/api/src/main/java/org/openmrs/AllergyReaction.java @@ -10,11 +10,13 @@ package org.openmrs; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; /** * Represent allergy reactions */ +@Audited public class AllergyReaction extends BaseOpenmrsObject implements java.io.Serializable{ public static final long serialVersionUID = 1; diff --git a/api/src/main/java/org/openmrs/CareSetting.java b/api/src/main/java/org/openmrs/CareSetting.java index 165cff29b533..145a753cbeb0 100644 --- a/api/src/main/java/org/openmrs/CareSetting.java +++ b/api/src/main/java/org/openmrs/CareSetting.java @@ -9,6 +9,8 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * Care Setting defines the scope of care for any piece of data within the medical record. Clinical * data (treatments, notes, etc.) apply within their associated care setting. Implementations @@ -24,6 +26,7 @@ * * @since 1.10 */ +@Audited public class CareSetting extends BaseChangeableOpenmrsMetadata { public enum CareSettingType { diff --git a/api/src/main/java/org/openmrs/Cohort.java b/api/src/main/java/org/openmrs/Cohort.java index fdc0d806c469..881a128cc322 100644 --- a/api/src/main/java/org/openmrs/Cohort.java +++ b/api/src/main/java/org/openmrs/Cohort.java @@ -10,6 +10,7 @@ package org.openmrs; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import java.util.Arrays; import java.util.Collection; @@ -21,6 +22,7 @@ /** * This class represents a list of patientIds. */ +@Audited public class Cohort extends BaseChangeableOpenmrsData { public static final long serialVersionUID = 0L; diff --git a/api/src/main/java/org/openmrs/CohortMembership.java b/api/src/main/java/org/openmrs/CohortMembership.java index 69ec240e05d3..f459f7847567 100644 --- a/api/src/main/java/org/openmrs/CohortMembership.java +++ b/api/src/main/java/org/openmrs/CohortMembership.java @@ -12,11 +12,13 @@ import java.util.Date; import java.util.Objects; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; /** * @since 2.1.0 */ +@Audited public class CohortMembership extends BaseChangeableOpenmrsData implements Comparable { public static final long serialVersionUID = 0L; diff --git a/api/src/main/java/org/openmrs/Concept.java b/api/src/main/java/org/openmrs/Concept.java index 8a63b0e1b4b0..8a1753b29f55 100644 --- a/api/src/main/java/org/openmrs/Concept.java +++ b/api/src/main/java/org/openmrs/Concept.java @@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.ContainedIn; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; @@ -69,6 +70,7 @@ * @see ConceptService */ @FullTextFilterDefs( { @FullTextFilterDef(name = "termsFilterFactory", impl = TermsFilterFactory.class) }) +@Audited public class Concept extends BaseOpenmrsObject implements Auditable, Retireable, Serializable, Attributable,Customizable { public static final long serialVersionUID = 57332L; diff --git a/api/src/main/java/org/openmrs/ConceptAnswer.java b/api/src/main/java/org/openmrs/ConceptAnswer.java index 4552f3b97e4c..9a476af6e026 100644 --- a/api/src/main/java/org/openmrs/ConceptAnswer.java +++ b/api/src/main/java/org/openmrs/ConceptAnswer.java @@ -9,6 +9,8 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + import java.util.Date; /** @@ -18,6 +20,7 @@ * * @see Concept#getAnswers() */ +@Audited public class ConceptAnswer extends BaseOpenmrsObject implements Auditable, java.io.Serializable, Comparable { public static final long serialVersionUID = 3744L; diff --git a/api/src/main/java/org/openmrs/ConceptAttribute.java b/api/src/main/java/org/openmrs/ConceptAttribute.java index b43fafd8fd4a..f2a71ce26382 100644 --- a/api/src/main/java/org/openmrs/ConceptAttribute.java +++ b/api/src/main/java/org/openmrs/ConceptAttribute.java @@ -9,9 +9,11 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; +@Audited public class ConceptAttribute extends BaseAttribute implements Attribute { private Integer conceptAttributeId; diff --git a/api/src/main/java/org/openmrs/ConceptClass.java b/api/src/main/java/org/openmrs/ConceptClass.java index 1aab341bdf67..1e4937857a62 100644 --- a/api/src/main/java/org/openmrs/ConceptClass.java +++ b/api/src/main/java/org/openmrs/ConceptClass.java @@ -9,11 +9,13 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.DocumentId; /** * ConceptClass */ +@Audited public class ConceptClass extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 33473L; diff --git a/api/src/main/java/org/openmrs/ConceptComplex.java b/api/src/main/java/org/openmrs/ConceptComplex.java index c2201692f7a9..7fa5764e6fc8 100644 --- a/api/src/main/java/org/openmrs/ConceptComplex.java +++ b/api/src/main/java/org/openmrs/ConceptComplex.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Indexed; import org.openmrs.obs.ComplexObsHandler; @@ -18,6 +19,7 @@ * @since 1.5 */ @Indexed +@Audited public class ConceptComplex extends Concept { public static final long serialVersionUID = 473231233L; diff --git a/api/src/main/java/org/openmrs/ConceptDatatype.java b/api/src/main/java/org/openmrs/ConceptDatatype.java index e29831240f7b..bb891a213cdc 100644 --- a/api/src/main/java/org/openmrs/ConceptDatatype.java +++ b/api/src/main/java/org/openmrs/ConceptDatatype.java @@ -9,11 +9,13 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.DocumentId; /** * ConceptDatatype */ +@Audited public class ConceptDatatype extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 473L; diff --git a/api/src/main/java/org/openmrs/ConceptDescription.java b/api/src/main/java/org/openmrs/ConceptDescription.java index 5d9f29bc2be8..dd476facdf70 100644 --- a/api/src/main/java/org/openmrs/ConceptDescription.java +++ b/api/src/main/java/org/openmrs/ConceptDescription.java @@ -9,12 +9,15 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + import java.util.Date; import java.util.Locale; /** * ConceptDescription is the localized description of a concept. */ +@Audited public class ConceptDescription extends BaseOpenmrsObject implements Auditable, java.io.Serializable { private static final long serialVersionUID = -7223075113369136584L; diff --git a/api/src/main/java/org/openmrs/ConceptMap.java b/api/src/main/java/org/openmrs/ConceptMap.java index 7ccc9e2b33ea..c7f1df342411 100644 --- a/api/src/main/java/org/openmrs/ConceptMap.java +++ b/api/src/main/java/org/openmrs/ConceptMap.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.ContainedIn; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.IndexedEmbedded; @@ -17,6 +18,7 @@ * The concept map object represents a mapping of Concept to ConceptSource. A concept can have 0 to * N mappings to any and all concept sources in the database. */ +@Audited public class ConceptMap extends BaseConceptMap { public static final long serialVersionUID = 754677L; diff --git a/api/src/main/java/org/openmrs/ConceptMapType.java b/api/src/main/java/org/openmrs/ConceptMapType.java index 605d75728a36..323b3f3f2ec7 100644 --- a/api/src/main/java/org/openmrs/ConceptMapType.java +++ b/api/src/main/java/org/openmrs/ConceptMapType.java @@ -10,6 +10,7 @@ package org.openmrs; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import javax.persistence.Column; import javax.persistence.Entity; @@ -26,6 +27,7 @@ */ @Entity @Table(name = "concept_map_type") +@Audited public class ConceptMapType extends BaseChangeableOpenmrsMetadata { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/ConceptName.java b/api/src/main/java/org/openmrs/ConceptName.java index 8816525a75cb..b8ba7f856aaa 100644 --- a/api/src/main/java/org/openmrs/ConceptName.java +++ b/api/src/main/java/org/openmrs/ConceptName.java @@ -20,6 +20,7 @@ import org.apache.lucene.analysis.standard.StandardFilterFactory; import org.apache.lucene.analysis.standard.StandardTokenizerFactory; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.Analyzer; import org.hibernate.search.annotations.AnalyzerDef; @@ -45,6 +46,7 @@ @TokenFilterDef(factory = ASCIIFoldingFilterFactory.class) }) @Analyzer(definition = "ConceptNameAnalyzer") +@Audited public class ConceptName extends BaseOpenmrsObject implements Auditable, Voidable, java.io.Serializable { public static final long serialVersionUID = 2L; diff --git a/api/src/main/java/org/openmrs/ConceptNameTag.java b/api/src/main/java/org/openmrs/ConceptNameTag.java index b8f992777cd7..f2adc82797ae 100644 --- a/api/src/main/java/org/openmrs/ConceptNameTag.java +++ b/api/src/main/java/org/openmrs/ConceptNameTag.java @@ -12,10 +12,12 @@ import java.util.Date; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; /** * ConceptNameTag is a textual tag which can be applied to a ConceptName. */ +@Audited public class ConceptNameTag extends BaseOpenmrsObject implements Auditable, Voidable, java.io.Serializable { public static final long serialVersionUID = 33226787L; diff --git a/api/src/main/java/org/openmrs/ConceptReferenceTerm.java b/api/src/main/java/org/openmrs/ConceptReferenceTerm.java index 4792c1a32556..4959bfd4209a 100644 --- a/api/src/main/java/org/openmrs/ConceptReferenceTerm.java +++ b/api/src/main/java/org/openmrs/ConceptReferenceTerm.java @@ -12,6 +12,7 @@ import java.util.LinkedHashSet; import java.util.Set; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; @@ -23,6 +24,7 @@ * * @since 1.9 */ +@Audited public class ConceptReferenceTerm extends BaseChangeableOpenmrsMetadata { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/ConceptReferenceTermMap.java b/api/src/main/java/org/openmrs/ConceptReferenceTermMap.java index 80648f5bca84..92dfe6b84335 100644 --- a/api/src/main/java/org/openmrs/ConceptReferenceTermMap.java +++ b/api/src/main/java/org/openmrs/ConceptReferenceTermMap.java @@ -9,6 +9,8 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * The concept Reference Term map object represents a mapping between two Concept Reference Terms. A * concept reference term can have 0 to N concept reference term mappings to any or all Concept @@ -16,6 +18,7 @@ * * @since 1.9 */ +@Audited public class ConceptReferenceTermMap extends BaseConceptMap { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/ConceptSet.java b/api/src/main/java/org/openmrs/ConceptSet.java index be6c1da3e148..6b0cd3736ca3 100644 --- a/api/src/main/java/org/openmrs/ConceptSet.java +++ b/api/src/main/java/org/openmrs/ConceptSet.java @@ -11,11 +11,13 @@ import java.util.Date; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; /** * This represents a single concept within a concept set. */ +@Audited public class ConceptSet extends BaseOpenmrsObject implements Auditable, java.io.Serializable, Comparable { public static final long serialVersionUID = 3787L; diff --git a/api/src/main/java/org/openmrs/ConceptSource.java b/api/src/main/java/org/openmrs/ConceptSource.java index 5db6c8f12e76..fff53481c957 100644 --- a/api/src/main/java/org/openmrs/ConceptSource.java +++ b/api/src/main/java/org/openmrs/ConceptSource.java @@ -9,12 +9,15 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + import java.util.Date; /** * A concept source is defined as any institution that keeps a concept dictionary. Examples are * ICD9, ICD10, SNOMED, or any other OpenMRS implementation */ +@Audited public class ConceptSource extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 375L; diff --git a/api/src/main/java/org/openmrs/Condition.java b/api/src/main/java/org/openmrs/Condition.java index c16e86f6c1f4..b571cf3f819d 100644 --- a/api/src/main/java/org/openmrs/Condition.java +++ b/api/src/main/java/org/openmrs/Condition.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; import javax.persistence.AssociationOverride; @@ -40,6 +41,7 @@ */ @Entity @Table(name = "conditions") +@Audited public class Condition extends BaseFormRecordableOpenmrsData { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/Diagnosis.java b/api/src/main/java/org/openmrs/Diagnosis.java index e80c1d05845e..e4dff03156dd 100644 --- a/api/src/main/java/org/openmrs/Diagnosis.java +++ b/api/src/main/java/org/openmrs/Diagnosis.java @@ -10,6 +10,7 @@ package org.openmrs; import org.hibernate.annotations.BatchSize; +import org.hibernate.envers.Audited; import javax.persistence.Access; import javax.persistence.AccessType; @@ -44,6 +45,7 @@ */ @Entity @Table(name = "encounter_diagnosis") +@Audited public class Diagnosis extends BaseCustomizableData implements FormRecordable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/DiagnosisAttribute.java b/api/src/main/java/org/openmrs/DiagnosisAttribute.java index 1dc4241a26c9..f0ddb0568e22 100644 --- a/api/src/main/java/org/openmrs/DiagnosisAttribute.java +++ b/api/src/main/java/org/openmrs/DiagnosisAttribute.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -17,6 +18,7 @@ * @see Attribute * @since 2.5.0 */ +@Audited public class DiagnosisAttribute extends BaseAttribute implements Attribute { private Integer diagnosisAttributeId; diff --git a/api/src/main/java/org/openmrs/DiagnosisAttributeType.java b/api/src/main/java/org/openmrs/DiagnosisAttributeType.java index b93e690b11bc..71ea06125ed9 100644 --- a/api/src/main/java/org/openmrs/DiagnosisAttributeType.java +++ b/api/src/main/java/org/openmrs/DiagnosisAttributeType.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; @@ -17,6 +18,7 @@ * @see AttributeType * @since 2.5.0 */ +@Audited public class DiagnosisAttributeType extends BaseAttributeType implements AttributeType { private Integer diagnosisAttributeTypeId; diff --git a/api/src/main/java/org/openmrs/Drug.java b/api/src/main/java/org/openmrs/Drug.java index 8bf00699d390..1fd5adb86668 100644 --- a/api/src/main/java/org/openmrs/Drug.java +++ b/api/src/main/java/org/openmrs/Drug.java @@ -16,6 +16,8 @@ import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; +import org.hibernate.envers.NotAudited; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.annotations.IndexedEmbedded; @@ -25,6 +27,7 @@ * Drug */ @Indexed +@Audited public class Drug extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 285L; diff --git a/api/src/main/java/org/openmrs/DrugIngredient.java b/api/src/main/java/org/openmrs/DrugIngredient.java index 916785904f67..3705ae70f398 100644 --- a/api/src/main/java/org/openmrs/DrugIngredient.java +++ b/api/src/main/java/org/openmrs/DrugIngredient.java @@ -10,6 +10,8 @@ package org.openmrs; +import org.hibernate.envers.Audited; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; @@ -23,6 +25,7 @@ */ @Entity @Table(name = "drug_ingredient") +@Audited public class DrugIngredient extends BaseOpenmrsObject implements Serializable, OpenmrsObject { public static final long serialVersionUID = 94023L; diff --git a/api/src/main/java/org/openmrs/DrugOrder.java b/api/src/main/java/org/openmrs/DrugOrder.java index f2d0a187c656..c304f8b0e21e 100644 --- a/api/src/main/java/org/openmrs/DrugOrder.java +++ b/api/src/main/java/org/openmrs/DrugOrder.java @@ -12,6 +12,7 @@ import static org.openmrs.Order.Action.DISCONTINUE; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; /** @@ -19,6 +20,7 @@ * * @version 1.0 */ +@Audited public class DrugOrder extends Order { public static final long serialVersionUID = 72232L; diff --git a/api/src/main/java/org/openmrs/DrugReferenceMap.java b/api/src/main/java/org/openmrs/DrugReferenceMap.java index e28b99c54258..bd28135ea9a6 100644 --- a/api/src/main/java/org/openmrs/DrugReferenceMap.java +++ b/api/src/main/java/org/openmrs/DrugReferenceMap.java @@ -12,6 +12,7 @@ import java.io.Serializable; import java.util.Date; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.ContainedIn; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.IndexedEmbedded; @@ -22,6 +23,7 @@ * * @since 1.10 */ +@Audited public class DrugReferenceMap extends BaseOpenmrsObject implements Auditable, Serializable { public static final long serialVersionUID = 1L; @@ -40,7 +42,7 @@ public class DrugReferenceMap extends BaseOpenmrsObject implements Auditable, Se private User creator; private Date dateCreated; - + private User changedBy; private Date dateChanged; diff --git a/api/src/main/java/org/openmrs/Encounter.java b/api/src/main/java/org/openmrs/Encounter.java index 9b5daced688f..b8e27c144bdf 100644 --- a/api/src/main/java/org/openmrs/Encounter.java +++ b/api/src/main/java/org/openmrs/Encounter.java @@ -37,6 +37,7 @@ import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Cascade; +import org.hibernate.envers.Audited; import org.openmrs.annotation.AllowDirectAccess; import org.openmrs.annotation.DisableHandlers; import org.openmrs.api.context.Context; @@ -54,6 +55,7 @@ @Entity @Table(name = "encounter") @BatchSize(size = 25) +@Audited public class Encounter extends BaseChangeableOpenmrsData { public static final long serialVersionUID = 2L; diff --git a/api/src/main/java/org/openmrs/EncounterProvider.java b/api/src/main/java/org/openmrs/EncounterProvider.java index 298e512b2d52..cf4ee70141de 100644 --- a/api/src/main/java/org/openmrs/EncounterProvider.java +++ b/api/src/main/java/org/openmrs/EncounterProvider.java @@ -9,11 +9,14 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * Mapping Class between Encounters and Providers which allows many to many relationship. * * @since 1.9 */ +@Audited public class EncounterProvider extends BaseChangeableOpenmrsData { public static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/EncounterRole.java b/api/src/main/java/org/openmrs/EncounterRole.java index d9ae94d3b856..0d3f7564cac1 100644 --- a/api/src/main/java/org/openmrs/EncounterRole.java +++ b/api/src/main/java/org/openmrs/EncounterRole.java @@ -9,12 +9,15 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * An EncounterRole a role specific to the encounter. While these could match up to existing * organizational roles (e.g., "Nurse"), they don't have to (e.g., "Lead Surgeon") * * @since 1.9 */ +@Audited public class EncounterRole extends BaseChangeableOpenmrsMetadata { public static final String UNKNOWN_ENCOUNTER_ROLE_UUID = "a0b03050-c99b-11e0-9572-0800200c9a66"; diff --git a/api/src/main/java/org/openmrs/EncounterType.java b/api/src/main/java/org/openmrs/EncounterType.java index 0b5542644bdd..5c2e72670eb1 100644 --- a/api/src/main/java/org/openmrs/EncounterType.java +++ b/api/src/main/java/org/openmrs/EncounterType.java @@ -9,11 +9,14 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * An EncounterType defines how a certain kind of {@link Encounter}. * * @see Encounter */ +@Audited public class EncounterType extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 789L; diff --git a/api/src/main/java/org/openmrs/Field.java b/api/src/main/java/org/openmrs/Field.java index bced97649505..d70496557745 100644 --- a/api/src/main/java/org/openmrs/Field.java +++ b/api/src/main/java/org/openmrs/Field.java @@ -13,12 +13,14 @@ import java.util.Set; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; /** * Field * * @version 1.0 */ +@Audited public class Field extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 4454L; diff --git a/api/src/main/java/org/openmrs/FieldAnswer.java b/api/src/main/java/org/openmrs/FieldAnswer.java index d426c8d874ba..51ad62055d6d 100644 --- a/api/src/main/java/org/openmrs/FieldAnswer.java +++ b/api/src/main/java/org/openmrs/FieldAnswer.java @@ -12,6 +12,7 @@ import java.util.Date; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import javax.persistence.Column; import javax.persistence.Entity; @@ -28,6 +29,7 @@ */ @Entity @Table(name = "field_answer") +@Audited public class FieldAnswer extends BaseOpenmrsObject { public static final long serialVersionUID = 5656L; diff --git a/api/src/main/java/org/openmrs/FieldType.java b/api/src/main/java/org/openmrs/FieldType.java index e5009dba2e61..31c4d4506dd1 100644 --- a/api/src/main/java/org/openmrs/FieldType.java +++ b/api/src/main/java/org/openmrs/FieldType.java @@ -9,9 +9,12 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * FieldType */ +@Audited public class FieldType extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 35467L; diff --git a/api/src/main/java/org/openmrs/Form.java b/api/src/main/java/org/openmrs/Form.java index 0b5e2f63664b..bc006cd9cf0f 100644 --- a/api/src/main/java/org/openmrs/Form.java +++ b/api/src/main/java/org/openmrs/Form.java @@ -9,6 +9,8 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -19,6 +21,7 @@ * * @version 1.0 */ +@Audited public class Form extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 845634L; diff --git a/api/src/main/java/org/openmrs/FormField.java b/api/src/main/java/org/openmrs/FormField.java index 777a5c103143..e1ebc9a6e8ea 100755 --- a/api/src/main/java/org/openmrs/FormField.java +++ b/api/src/main/java/org/openmrs/FormField.java @@ -13,6 +13,7 @@ import java.util.Comparator; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; /** * The FormField object relates/orders the fields on a form A form can @@ -22,6 +23,7 @@ * @see org.openmrs.Form * @see org.openmrs.Field */ +@Audited public class FormField extends BaseChangeableOpenmrsMetadata implements java.io.Serializable, Comparable { public static final long serialVersionUID = 3456L; diff --git a/api/src/main/java/org/openmrs/FormResource.java b/api/src/main/java/org/openmrs/FormResource.java index ed85652518d0..2f701a49bd6a 100644 --- a/api/src/main/java/org/openmrs/FormResource.java +++ b/api/src/main/java/org/openmrs/FormResource.java @@ -12,6 +12,7 @@ import java.util.Date; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.openmrs.customdatatype.CustomDatatypeUtil; import org.openmrs.customdatatype.CustomValueDescriptor; import org.openmrs.customdatatype.NotYetPersistedException; @@ -29,6 +30,7 @@ * * @since 1.9 */ +@Audited public class FormResource extends BaseOpenmrsObject implements CustomValueDescriptor, SingleCustomValue { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/GlobalProperty.java b/api/src/main/java/org/openmrs/GlobalProperty.java index acc8ccae05ce..ce7b503b2eae 100644 --- a/api/src/main/java/org/openmrs/GlobalProperty.java +++ b/api/src/main/java/org/openmrs/GlobalProperty.java @@ -12,6 +12,7 @@ import java.util.Date; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.openmrs.customdatatype.CustomDatatype; import org.openmrs.customdatatype.CustomDatatypeUtil; import org.openmrs.customdatatype.CustomValueDescriptor; @@ -21,6 +22,7 @@ * Global properties are simple key-value pairs persisted in the database GPs can be thought of as * something similar to environment variables used in operating systems. */ +@Audited public class GlobalProperty extends BaseOpenmrsObject implements CustomValueDescriptor, SingleCustomValue { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/Location.java b/api/src/main/java/org/openmrs/Location.java index 329f063a8c75..ed5f00ddc52a 100644 --- a/api/src/main/java/org/openmrs/Location.java +++ b/api/src/main/java/org/openmrs/Location.java @@ -12,6 +12,7 @@ import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.envers.Audited; import org.openmrs.annotation.Independent; import org.openmrs.api.APIException; import org.openmrs.api.context.Context; @@ -47,6 +48,7 @@ @Table(name = "location") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @AttributeOverride(name = "attributes", column = @Column(name = "location_id")) +@Audited public class Location extends BaseCustomizableMetadata implements java.io.Serializable, Attributable, Address { public static final long serialVersionUID = 455634L; diff --git a/api/src/main/java/org/openmrs/LocationAttribute.java b/api/src/main/java/org/openmrs/LocationAttribute.java index bbbf72580cab..76d802f4c67e 100644 --- a/api/src/main/java/org/openmrs/LocationAttribute.java +++ b/api/src/main/java/org/openmrs/LocationAttribute.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -17,6 +18,7 @@ * @see Attribute * @since 1.9 */ +@Audited public class LocationAttribute extends BaseAttribute implements Attribute { private Integer locationAttributeId; diff --git a/api/src/main/java/org/openmrs/LocationAttributeType.java b/api/src/main/java/org/openmrs/LocationAttributeType.java index c9f1e67225bb..1fe43226c635 100644 --- a/api/src/main/java/org/openmrs/LocationAttributeType.java +++ b/api/src/main/java/org/openmrs/LocationAttributeType.java @@ -11,6 +11,7 @@ import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; @@ -28,6 +29,7 @@ */ @Entity @Table(name = "location_attribute_type") +@Audited public class LocationAttributeType extends BaseAttributeType implements AttributeType { @Id diff --git a/api/src/main/java/org/openmrs/LocationTag.java b/api/src/main/java/org/openmrs/LocationTag.java index 4bd9eb3acdad..6c0a2902e4ca 100644 --- a/api/src/main/java/org/openmrs/LocationTag.java +++ b/api/src/main/java/org/openmrs/LocationTag.java @@ -9,12 +9,15 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * An LocationTag allows categorization of {@link Location}s * * @see Location * @since 1.5 */ +@Audited public class LocationTag extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 7654L; diff --git a/api/src/main/java/org/openmrs/Obs.java b/api/src/main/java/org/openmrs/Obs.java index c8a12b758511..1e650363c36e 100644 --- a/api/src/main/java/org/openmrs/Obs.java +++ b/api/src/main/java/org/openmrs/Obs.java @@ -21,6 +21,7 @@ import java.util.Set; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import org.openmrs.annotation.AllowDirectAccess; import org.openmrs.api.APIException; import org.openmrs.api.context.Context; @@ -61,6 +62,7 @@ * * @see Encounter */ +@Audited public class Obs extends BaseFormRecordableOpenmrsData { /** @@ -675,6 +677,7 @@ public Boolean getValueBoolean() { /** * @return Returns the valueCoded. */ + public Concept getValueCoded() { return valueCoded; } diff --git a/api/src/main/java/org/openmrs/Order.java b/api/src/main/java/org/openmrs/Order.java index e9157dc3aeca..430d32a0871e 100644 --- a/api/src/main/java/org/openmrs/Order.java +++ b/api/src/main/java/org/openmrs/Order.java @@ -9,14 +9,13 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.api.APIException; import org.openmrs.api.db.hibernate.HibernateUtil; import org.openmrs.order.OrderUtil; import org.openmrs.util.OpenmrsUtil; import java.util.Date; -import java.util.LinkedHashSet; -import java.util.Set; /** * Encapsulates information about the clinical action of a provider requesting something for a @@ -32,6 +31,7 @@ * * @version 1.0 */ +@Audited public class Order extends BaseCustomizableData implements FormRecordable { public static final long serialVersionUID = 4334343L; diff --git a/api/src/main/java/org/openmrs/OrderAttribute.java b/api/src/main/java/org/openmrs/OrderAttribute.java index 81dc0118b2a4..37b7a3ce8184 100644 --- a/api/src/main/java/org/openmrs/OrderAttribute.java +++ b/api/src/main/java/org/openmrs/OrderAttribute.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -17,6 +18,7 @@ * @see Attribute * @since 2.5.0 */ +@Audited public class OrderAttribute extends BaseAttribute implements Attribute { @@ -65,4 +67,4 @@ public Integer getOrderAttributeId() { public void setOrderAttributeId(Integer orderAttributeId) { this.orderAttributeId = orderAttributeId; } -} \ No newline at end of file +} diff --git a/api/src/main/java/org/openmrs/OrderAttributeType.java b/api/src/main/java/org/openmrs/OrderAttributeType.java index f8fb65e6d885..f2c17e740076 100644 --- a/api/src/main/java/org/openmrs/OrderAttributeType.java +++ b/api/src/main/java/org/openmrs/OrderAttributeType.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; @@ -17,6 +18,7 @@ * @see AttributeType * @since 2.5.0 */ +@Audited public class OrderAttributeType extends BaseAttributeType implements AttributeType { private Integer orderAttributeTypeId; diff --git a/api/src/main/java/org/openmrs/OrderFrequency.java b/api/src/main/java/org/openmrs/OrderFrequency.java index c8fb3872f179..58653f3b8153 100644 --- a/api/src/main/java/org/openmrs/OrderFrequency.java +++ b/api/src/main/java/org/openmrs/OrderFrequency.java @@ -9,6 +9,8 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * The frequency at which an Order's action should be repeated, e.g. TWICE DAILY or EVERY 6 HOURS. * This class is backed by a Concept for i18n, synonyms, mappings, etc, but it contains additional @@ -16,6 +18,7 @@ * * @since 1.10 */ +@Audited public class OrderFrequency extends BaseChangeableOpenmrsMetadata { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/OrderGroup.java b/api/src/main/java/org/openmrs/OrderGroup.java index 0aa4aeb696fc..f15ddb8d6dee 100644 --- a/api/src/main/java/org/openmrs/OrderGroup.java +++ b/api/src/main/java/org/openmrs/OrderGroup.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.Set; +import org.hibernate.envers.Audited; import org.openmrs.api.APIException; /** @@ -22,6 +23,7 @@ * * @since 1.12 */ +@Audited public class OrderGroup extends BaseCustomizableData { public static final long serialVersionUID = 72232L; diff --git a/api/src/main/java/org/openmrs/OrderGroupAttribute.java b/api/src/main/java/org/openmrs/OrderGroupAttribute.java index 560d0ce9a944..248a931caf86 100644 --- a/api/src/main/java/org/openmrs/OrderGroupAttribute.java +++ b/api/src/main/java/org/openmrs/OrderGroupAttribute.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -17,6 +18,7 @@ * @see Attribute * @since 2.4.0 */ +@Audited public class OrderGroupAttribute extends BaseAttribute implements Attribute { private Integer orderGroupAttributeId; diff --git a/api/src/main/java/org/openmrs/OrderGroupAttributeType.java b/api/src/main/java/org/openmrs/OrderGroupAttributeType.java index 8e40c5714057..b81f08ba7367 100644 --- a/api/src/main/java/org/openmrs/OrderGroupAttributeType.java +++ b/api/src/main/java/org/openmrs/OrderGroupAttributeType.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; @@ -17,6 +18,7 @@ * @see AttributeType * @since 2.4.0 */ +@Audited public class OrderGroupAttributeType extends BaseAttributeType implements AttributeType { private Integer orderGroupAttributeTypeId; diff --git a/api/src/main/java/org/openmrs/OrderSet.java b/api/src/main/java/org/openmrs/OrderSet.java index 6064e2948e87..b8d904aff6e8 100644 --- a/api/src/main/java/org/openmrs/OrderSet.java +++ b/api/src/main/java/org/openmrs/OrderSet.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; +import org.hibernate.envers.Audited; import org.openmrs.api.APIException; /** @@ -20,6 +21,7 @@ * * @since 1.12 */ +@Audited public class OrderSet extends BaseCustomizableMetadata { public static final long serialVersionUID = 72232L; diff --git a/api/src/main/java/org/openmrs/OrderSetAttribute.java b/api/src/main/java/org/openmrs/OrderSetAttribute.java index 282a0df10638..4a3785bb7def 100644 --- a/api/src/main/java/org/openmrs/OrderSetAttribute.java +++ b/api/src/main/java/org/openmrs/OrderSetAttribute.java @@ -10,6 +10,7 @@ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -18,6 +19,7 @@ * @see Attribute * @since 2.4.0 */ +@Audited public class OrderSetAttribute extends BaseAttribute implements Attribute{ private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/OrderSetAttributeType.java b/api/src/main/java/org/openmrs/OrderSetAttributeType.java index 5d0752cb32a7..e58a223961ca 100644 --- a/api/src/main/java/org/openmrs/OrderSetAttributeType.java +++ b/api/src/main/java/org/openmrs/OrderSetAttributeType.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; @@ -17,6 +18,7 @@ * @see AttributeType * @since 2.4.0 */ +@Audited public class OrderSetAttributeType extends BaseAttributeType implements AttributeType { private Integer orderSetAttributeTypeId; diff --git a/api/src/main/java/org/openmrs/OrderSetMember.java b/api/src/main/java/org/openmrs/OrderSetMember.java index 27488c9c5ed1..991b858ae32f 100644 --- a/api/src/main/java/org/openmrs/OrderSetMember.java +++ b/api/src/main/java/org/openmrs/OrderSetMember.java @@ -9,10 +9,13 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * @since 1.12 * OrderSetMember */ +@Audited public class OrderSetMember extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 72232L; diff --git a/api/src/main/java/org/openmrs/OrderType.java b/api/src/main/java/org/openmrs/OrderType.java index 9d3d99b01c3a..610a857d65dd 100644 --- a/api/src/main/java/org/openmrs/OrderType.java +++ b/api/src/main/java/org/openmrs/OrderType.java @@ -13,6 +13,7 @@ import java.util.LinkedHashSet; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import org.openmrs.annotation.Independent; import org.openmrs.api.APIException; import org.openmrs.api.context.Context; @@ -22,6 +23,7 @@ * Radiology TestOrders * */ +@Audited public class OrderType extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 23232L; diff --git a/api/src/main/java/org/openmrs/Patient.java b/api/src/main/java/org/openmrs/Patient.java index 3ce619e4edfc..efc6c8d90900 100644 --- a/api/src/main/java/org/openmrs/Patient.java +++ b/api/src/main/java/org/openmrs/Patient.java @@ -16,6 +16,7 @@ import java.util.Set; import java.util.TreeSet; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.ContainedIn; /** @@ -24,6 +25,7 @@ * * @version 2.0 */ +@Audited public class Patient extends Person { public static final long serialVersionUID = 93123L; diff --git a/api/src/main/java/org/openmrs/PatientIdentifier.java b/api/src/main/java/org/openmrs/PatientIdentifier.java index f95c6f4c1a26..516f7bf09bc5 100644 --- a/api/src/main/java/org/openmrs/PatientIdentifier.java +++ b/api/src/main/java/org/openmrs/PatientIdentifier.java @@ -15,6 +15,7 @@ import java.util.Comparator; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Analyzer; import org.hibernate.search.annotations.Boost; import org.hibernate.search.annotations.DocumentId; @@ -37,6 +38,7 @@ * @see org.openmrs.PatientIdentifierType */ @Indexed +@Audited public class PatientIdentifier extends BaseChangeableOpenmrsData implements java.io.Serializable, Cloneable, Comparable { public static final long serialVersionUID = 1123121L; diff --git a/api/src/main/java/org/openmrs/PatientIdentifierType.java b/api/src/main/java/org/openmrs/PatientIdentifierType.java index 2853ebb65158..600530bba2b4 100644 --- a/api/src/main/java/org/openmrs/PatientIdentifierType.java +++ b/api/src/main/java/org/openmrs/PatientIdentifierType.java @@ -10,12 +10,14 @@ package org.openmrs; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; /** * PatientIdentifierType */ +@Audited public class PatientIdentifierType extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 211231L; diff --git a/api/src/main/java/org/openmrs/PatientProgram.java b/api/src/main/java/org/openmrs/PatientProgram.java index 8de2c51311d7..62af3c07d197 100644 --- a/api/src/main/java/org/openmrs/PatientProgram.java +++ b/api/src/main/java/org/openmrs/PatientProgram.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.customdatatype.CustomValueDescriptor; import org.openmrs.customdatatype.Customizable; import org.openmrs.util.OpenmrsUtil; @@ -27,6 +28,7 @@ /** * PatientProgram */ +@Audited public class PatientProgram extends BaseChangeableOpenmrsData implements Customizable{ public static final long serialVersionUID = 0L; diff --git a/api/src/main/java/org/openmrs/PatientProgramAttribute.java b/api/src/main/java/org/openmrs/PatientProgramAttribute.java index 6015f99655ff..abb91ed24a82 100644 --- a/api/src/main/java/org/openmrs/PatientProgramAttribute.java +++ b/api/src/main/java/org/openmrs/PatientProgramAttribute.java @@ -10,9 +10,11 @@ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; +@Audited public class PatientProgramAttribute extends BaseAttribute implements Attribute { private Integer patientProgramAttributeId; @@ -41,4 +43,4 @@ public Integer getPatientProgramAttributeId() { public void setPatientProgramAttributeId(Integer id) { this.patientProgramAttributeId = id; } -} \ No newline at end of file +} diff --git a/api/src/main/java/org/openmrs/PatientState.java b/api/src/main/java/org/openmrs/PatientState.java index 9166d2b78175..548037c080f7 100644 --- a/api/src/main/java/org/openmrs/PatientState.java +++ b/api/src/main/java/org/openmrs/PatientState.java @@ -13,6 +13,7 @@ import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; import javax.persistence.Column; @@ -29,6 +30,7 @@ */ @Entity @Table(name = "patient_state") +@Audited public class PatientState extends BaseFormRecordableOpenmrsData implements java.io.Serializable, Comparable { public static final long serialVersionUID = 0L; diff --git a/api/src/main/java/org/openmrs/Person.java b/api/src/main/java/org/openmrs/Person.java index 421349661e79..a23577e8ed53 100644 --- a/api/src/main/java/org/openmrs/Person.java +++ b/api/src/main/java/org/openmrs/Person.java @@ -22,6 +22,8 @@ import javax.persistence.Transient; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; +import org.hibernate.envers.NotAudited; import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.ContainedIn; import org.hibernate.search.annotations.DateBridge; @@ -42,6 +44,7 @@ * * @see org.openmrs.Patient */ +@Audited public class Person extends BaseChangeableOpenmrsData { public static final long serialVersionUID = 2L; @@ -81,17 +84,17 @@ public class Person extends BaseChangeableOpenmrsData { private Concept causeOfDeath; private String causeOfDeathNonCoded; - + private User personCreator; private Date personDateCreated; - + private User personChangedBy; private Date personDateChanged; private Boolean personVoided = false; - + private User personVoidedBy; private Date personDateVoided; @@ -99,6 +102,7 @@ public class Person extends BaseChangeableOpenmrsData { private String personVoidReason; @Field + @NotAudited private boolean isPatient; /** @@ -1049,10 +1053,12 @@ public void setPersonVoidReason(String voidReason) { */ @Deprecated @JsonIgnore + @NotAudited public boolean isPatient() { return getIsPatient(); } + @NotAudited public boolean getIsPatient() { return isPatient; } diff --git a/api/src/main/java/org/openmrs/PersonAddress.java b/api/src/main/java/org/openmrs/PersonAddress.java index 17c5da255c83..b28b3f681bb8 100644 --- a/api/src/main/java/org/openmrs/PersonAddress.java +++ b/api/src/main/java/org/openmrs/PersonAddress.java @@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsUtil; import javax.persistence.Column; @@ -33,6 +34,7 @@ */ @Entity @Table(name = "person_address") +@Audited public class PersonAddress extends BaseChangeableOpenmrsData implements java.io.Serializable, Cloneable, Comparable, Address { public static final long serialVersionUID = 343333L; diff --git a/api/src/main/java/org/openmrs/PersonAttribute.java b/api/src/main/java/org/openmrs/PersonAttribute.java index ddfb00c3f2f4..4d5cb6332da0 100644 --- a/api/src/main/java/org/openmrs/PersonAttribute.java +++ b/api/src/main/java/org/openmrs/PersonAttribute.java @@ -16,6 +16,7 @@ import java.util.Date; import org.apache.commons.lang3.StringUtils; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Analyzer; import org.hibernate.search.annotations.Boost; import org.hibernate.search.annotations.DocumentId; @@ -42,6 +43,7 @@ * @see org.openmrs.Attributable */ @Indexed +@Audited public class PersonAttribute extends BaseChangeableOpenmrsData implements java.io.Serializable, Comparable { public static final long serialVersionUID = 11231211232111L; diff --git a/api/src/main/java/org/openmrs/PersonAttributeType.java b/api/src/main/java/org/openmrs/PersonAttributeType.java index 751dfe991c26..9e740f76e258 100644 --- a/api/src/main/java/org/openmrs/PersonAttributeType.java +++ b/api/src/main/java/org/openmrs/PersonAttributeType.java @@ -10,6 +10,7 @@ package org.openmrs; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Field; import org.openmrs.util.OpenmrsUtil; @@ -29,6 +30,7 @@ */ @Entity @Table(name = "person_attribute_type") +@Audited public class PersonAttributeType extends BaseChangeableOpenmrsMetadata implements java.io.Serializable, Comparable { public static final long serialVersionUID = 2112313431211L; diff --git a/api/src/main/java/org/openmrs/PersonName.java b/api/src/main/java/org/openmrs/PersonName.java index ec0d88a22a03..6492fe6650e6 100644 --- a/api/src/main/java/org/openmrs/PersonName.java +++ b/api/src/main/java/org/openmrs/PersonName.java @@ -19,6 +19,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Analyzer; import org.hibernate.search.annotations.Boost; import org.hibernate.search.annotations.DocumentId; @@ -40,6 +41,7 @@ * A Person can have zero to n PersonName(s). */ @Indexed +@Audited public class PersonName extends BaseChangeableOpenmrsData implements java.io.Serializable, Cloneable, Comparable { public static final long serialVersionUID = 4353L; diff --git a/api/src/main/java/org/openmrs/Privilege.java b/api/src/main/java/org/openmrs/Privilege.java index 3c0ad1a6c555..9995c9e4aef1 100644 --- a/api/src/main/java/org/openmrs/Privilege.java +++ b/api/src/main/java/org/openmrs/Privilege.java @@ -9,11 +9,14 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * Privilege * * @version 1.0 */ +@Audited public class Privilege extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 312L; diff --git a/api/src/main/java/org/openmrs/Program.java b/api/src/main/java/org/openmrs/Program.java index 348c342f3666..753032a61816 100644 --- a/api/src/main/java/org/openmrs/Program.java +++ b/api/src/main/java/org/openmrs/Program.java @@ -13,11 +13,13 @@ import java.util.Locale; import java.util.Set; +import org.hibernate.envers.Audited; import org.openmrs.annotation.AllowDirectAccess; /** * Program */ +@Audited public class Program extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 3214567L; diff --git a/api/src/main/java/org/openmrs/ProgramAttributeType.java b/api/src/main/java/org/openmrs/ProgramAttributeType.java index 61e9e18b25c0..a2313c694f4d 100644 --- a/api/src/main/java/org/openmrs/ProgramAttributeType.java +++ b/api/src/main/java/org/openmrs/ProgramAttributeType.java @@ -10,9 +10,11 @@ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; +@Audited public class ProgramAttributeType extends BaseAttributeType implements AttributeType { private Integer programAttributeTypeId; @@ -33,4 +35,4 @@ public Integer getProgramAttributeTypeId() { public void setProgramAttributeTypeId(Integer programAttributeTypeId) { this.programAttributeTypeId = programAttributeTypeId; } -} \ No newline at end of file +} diff --git a/api/src/main/java/org/openmrs/ProgramWorkflow.java b/api/src/main/java/org/openmrs/ProgramWorkflow.java index e2ae42937686..93715d068092 100644 --- a/api/src/main/java/org/openmrs/ProgramWorkflow.java +++ b/api/src/main/java/org/openmrs/ProgramWorkflow.java @@ -17,11 +17,13 @@ import java.util.Set; import java.util.TreeSet; +import org.hibernate.envers.Audited; import org.openmrs.util.NaturalStrings; /** * ProgramWorkflow */ +@Audited public class ProgramWorkflow extends BaseChangeableOpenmrsMetadata { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/ProgramWorkflowState.java b/api/src/main/java/org/openmrs/ProgramWorkflowState.java index 915d3eae5512..2e21faaabb8d 100644 --- a/api/src/main/java/org/openmrs/ProgramWorkflowState.java +++ b/api/src/main/java/org/openmrs/ProgramWorkflowState.java @@ -9,9 +9,12 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * ProgramWorkflowState */ +@Audited public class ProgramWorkflowState extends BaseChangeableOpenmrsMetadata { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/Provider.java b/api/src/main/java/org/openmrs/Provider.java index 8722ad595bf9..2b26d3f35d7f 100644 --- a/api/src/main/java/org/openmrs/Provider.java +++ b/api/src/main/java/org/openmrs/Provider.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +18,7 @@ * * @since 1.9 */ +@Audited public class Provider extends BaseCustomizableMetadata { private static final Logger log = LoggerFactory.getLogger(Provider.class); diff --git a/api/src/main/java/org/openmrs/ProviderAttribute.java b/api/src/main/java/org/openmrs/ProviderAttribute.java index f9144aec5207..8a7d91fd5742 100644 --- a/api/src/main/java/org/openmrs/ProviderAttribute.java +++ b/api/src/main/java/org/openmrs/ProviderAttribute.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -18,6 +19,7 @@ * @see Attribute * @since 1.9 */ +@Audited public class ProviderAttribute extends BaseAttribute implements Attribute { private Integer providerAttributeId; diff --git a/api/src/main/java/org/openmrs/ProviderAttributeType.java b/api/src/main/java/org/openmrs/ProviderAttributeType.java index 3ad57ffa17f0..f241621a5255 100644 --- a/api/src/main/java/org/openmrs/ProviderAttributeType.java +++ b/api/src/main/java/org/openmrs/ProviderAttributeType.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.AttributeType; import org.openmrs.attribute.BaseAttributeType; @@ -26,6 +27,7 @@ */ @Entity @Table(name = "provider_attribute_type") +@Audited public class ProviderAttributeType extends BaseAttributeType implements AttributeType { @Id diff --git a/api/src/main/java/org/openmrs/ReferralOrder.java b/api/src/main/java/org/openmrs/ReferralOrder.java index 888f23737f6e..cb1084e68671 100644 --- a/api/src/main/java/org/openmrs/ReferralOrder.java +++ b/api/src/main/java/org/openmrs/ReferralOrder.java @@ -9,11 +9,14 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * This is a type of order that adds referral specific attributes. * * @since 2.5.0 */ +@Audited public class ReferralOrder extends ServiceOrder { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/Relationship.java b/api/src/main/java/org/openmrs/Relationship.java index 59c840693ec1..ac9a02ab6e55 100644 --- a/api/src/main/java/org/openmrs/Relationship.java +++ b/api/src/main/java/org/openmrs/Relationship.java @@ -11,6 +11,7 @@ import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; +import org.hibernate.envers.Audited; import javax.persistence.Column; import javax.persistence.Entity; @@ -27,6 +28,7 @@ */ @Entity @Table(name = "relationship") +@Audited public class Relationship extends BaseChangeableOpenmrsData { public static final long serialVersionUID = 323423L; diff --git a/api/src/main/java/org/openmrs/RelationshipType.java b/api/src/main/java/org/openmrs/RelationshipType.java index 6f82ca44a62a..0a7bdfa6e904 100644 --- a/api/src/main/java/org/openmrs/RelationshipType.java +++ b/api/src/main/java/org/openmrs/RelationshipType.java @@ -10,6 +10,7 @@ package org.openmrs; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; /** * Defines a type of relationship between two people in the database.
@@ -32,6 +33,7 @@ * In English, we run into a tricky RelationshipType with aunts and uncles. We have chosen to define * them as aunt/uncle-niece/nephew. */ +@Audited public class RelationshipType extends BaseChangeableOpenmrsMetadata{ public static final long serialVersionUID = 4223L; diff --git a/api/src/main/java/org/openmrs/Role.java b/api/src/main/java/org/openmrs/Role.java index 6158ada4591e..daf1a3ece963 100644 --- a/api/src/main/java/org/openmrs/Role.java +++ b/api/src/main/java/org/openmrs/Role.java @@ -13,6 +13,7 @@ import java.util.HashSet; import java.util.Set; +import org.hibernate.envers.Audited; import org.openmrs.util.RoleConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +26,7 @@ * * @see Privilege */ +@Audited public class Role extends BaseChangeableOpenmrsMetadata { public static final long serialVersionUID = 1234233L; diff --git a/api/src/main/java/org/openmrs/User.java b/api/src/main/java/org/openmrs/User.java index 77c51355c50e..cddda88bea88 100644 --- a/api/src/main/java/org/openmrs/User.java +++ b/api/src/main/java/org/openmrs/User.java @@ -43,6 +43,8 @@ import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollectionOption; import org.hibernate.annotations.Parameter; +import org.hibernate.envers.Audited; +import org.hibernate.envers.NotAudited; import org.openmrs.api.context.Context; import org.openmrs.util.LocaleUtility; import org.openmrs.util.OpenmrsConstants; @@ -62,6 +64,7 @@ @Entity @Table(name = "users") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) +@Audited public class User extends BaseOpenmrsObject implements java.io.Serializable, Attributable, Auditable, Retireable { public static final long serialVersionUID = 2L ; @@ -106,6 +109,7 @@ public class User extends BaseOpenmrsObject implements java.io.Serializable, Att @MapKeyColumn(name = "property", length = 255) @Column(name = "property_value", length = Integer.MAX_VALUE) @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.EVICT }) + @NotAudited private Map userProperties; @Transient diff --git a/api/src/main/java/org/openmrs/Visit.java b/api/src/main/java/org/openmrs/Visit.java index 81cbf49c2417..25bc7c0f0281 100644 --- a/api/src/main/java/org/openmrs/Visit.java +++ b/api/src/main/java/org/openmrs/Visit.java @@ -31,6 +31,7 @@ import javax.persistence.Table; import org.hibernate.annotations.BatchSize; +import org.hibernate.envers.Audited; import org.openmrs.customdatatype.Customizable; /** @@ -41,6 +42,7 @@ */ @Entity @Table(name = "visit") +@Audited public class Visit extends BaseCustomizableData implements Auditable, Customizable { @Id diff --git a/api/src/main/java/org/openmrs/VisitAttribute.java b/api/src/main/java/org/openmrs/VisitAttribute.java index cd75bd2b77bf..a79a9aad6f08 100644 --- a/api/src/main/java/org/openmrs/VisitAttribute.java +++ b/api/src/main/java/org/openmrs/VisitAttribute.java @@ -9,6 +9,7 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; import org.openmrs.attribute.Attribute; import org.openmrs.attribute.BaseAttribute; @@ -17,6 +18,7 @@ * @see Attribute * @since 1.9 */ +@Audited public class VisitAttribute extends BaseAttribute implements Attribute { private Integer visitAttributeId; diff --git a/api/src/main/java/org/openmrs/VisitType.java b/api/src/main/java/org/openmrs/VisitType.java index 34edae0d2585..71ec486642de 100644 --- a/api/src/main/java/org/openmrs/VisitType.java +++ b/api/src/main/java/org/openmrs/VisitType.java @@ -9,12 +9,15 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * Represents the assortment of visit types available to an implementation. These could include * items like "Initial HIV Clinic Visit", "Return TB Clinic Visit", and "Hospitalization". * * @since 1.9 */ +@Audited public class VisitType extends BaseChangeableOpenmrsMetadata{ private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntity.java b/api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntity.java new file mode 100644 index 000000000000..0fc095399462 --- /dev/null +++ b/api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntity.java @@ -0,0 +1,46 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + * + * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ + +package org.openmrs.api.db.hibernate.envers; + +import org.hibernate.envers.DefaultRevisionEntity; +import org.hibernate.envers.RevisionEntity; + +import javax.persistence.Entity; +import java.util.Date; + +/** + * Custom revision entity for OpenMRS application + * Can be used to store revision metadata + */ +@RevisionEntity(OpenMRSRevisionEntityListener.class) +@Entity +public class OpenMRSRevisionEntity extends DefaultRevisionEntity { + + private Integer changedBy; + + private Date changedOn; + + public Integer getChangedBy() { + return changedBy; + } + + public void setChangedBy(Integer userId) { + this.changedBy = userId; + } + + public Date getChangedOn() { + return changedOn; + } + + public void setChangedOn(Date changedOn) { + this.changedOn = changedOn; + } +} diff --git a/api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntityListener.java b/api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntityListener.java new file mode 100644 index 000000000000..2b2928057bed --- /dev/null +++ b/api/src/main/java/org/openmrs/api/db/hibernate/envers/OpenMRSRevisionEntityListener.java @@ -0,0 +1,31 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + * + * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ + +package org.openmrs.api.db.hibernate.envers; + +import org.hibernate.envers.RevisionListener; +import org.openmrs.api.context.Context; +import org.openmrs.api.context.Daemon; + +import java.util.Date; + +public class OpenMRSRevisionEntityListener implements RevisionListener { + @Override + public void newRevision(Object o) { + OpenMRSRevisionEntity customRevisionEntity = (OpenMRSRevisionEntity) o; + if(Context.getUserContext().isAuthenticated()) { + customRevisionEntity.setChangedBy(Context.getUserContext().getAuthenticatedUser().getUserId()); + } + else if(Daemon.getDaemonThreadUser() != null) { + customRevisionEntity.setChangedBy(Daemon.getDaemonThreadUser().getUserId()); + } + customRevisionEntity.setChangedOn(new Date()); + } +} diff --git a/api/src/main/java/org/openmrs/notification/Alert.java b/api/src/main/java/org/openmrs/notification/Alert.java index 630f54aad477..26d42b3c4fe4 100644 --- a/api/src/main/java/org/openmrs/notification/Alert.java +++ b/api/src/main/java/org/openmrs/notification/Alert.java @@ -15,6 +15,7 @@ import java.util.HashSet; import java.util.Set; +import org.hibernate.envers.Audited; import org.openmrs.Auditable; import org.openmrs.BaseOpenmrsObject; import org.openmrs.User; @@ -25,6 +26,7 @@ * to attribute the alert to. Alerts are not intended to be sent from user to user and a user cannot * send a "reply alert" */ +@Audited public class Alert extends BaseOpenmrsObject implements Auditable, Serializable { private static final long serialVersionUID = -507111111109152L; diff --git a/api/src/main/java/org/openmrs/notification/AlertRecipient.java b/api/src/main/java/org/openmrs/notification/AlertRecipient.java index 4fa30dd578e7..7929f0cb70bb 100644 --- a/api/src/main/java/org/openmrs/notification/AlertRecipient.java +++ b/api/src/main/java/org/openmrs/notification/AlertRecipient.java @@ -11,6 +11,7 @@ import java.util.Date; +import org.hibernate.envers.Audited; import org.openmrs.BaseOpenmrsObject; import org.openmrs.User; @@ -30,6 +31,7 @@ */ @Entity @Table(name = "notification_alert_recipient") +@Audited public class AlertRecipient extends BaseOpenmrsObject { private static final long serialVersionUID = -507111109155L; diff --git a/api/src/main/resources/hibernate.default.properties b/api/src/main/resources/hibernate.default.properties index 253719630e9c..b4e66128d827 100644 --- a/api/src/main/resources/hibernate.default.properties +++ b/api/src/main/resources/hibernate.default.properties @@ -10,7 +10,7 @@ hibernate.connection.url=jdbc:mysql://localhost:3306/openmrs?autoReconnect=true hibernate.show_sql=false hibernate.format_sql=true hibernate.lazy=true -hibernate.dialect=org.hibernate.dialect.MySQLDialect +hibernate.dialect=org.hibernate.dialect.MySQL5Dialect # Hibernate specific connection pool properties hibernate.c3p0.max_size=50 @@ -40,3 +40,7 @@ hibernate.order_updates=true #For Backward Compatibility of Sequences after Hibernate 5 hibernate.id.new_generator_mappings=false + +# Hibernate envers options +hibernate.integration.envers.enabled=false +org.hibernate.envers.revision_listener=org.openmrs.api.db.hibernate.envers.OpenMRSRevisionEntityListener diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptDescription.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptDescription.hbm.xml index 3d7b4057ae70..d78a95c179dd 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptDescription.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptDescription.hbm.xml @@ -29,7 +29,7 @@ class="Concept" not-null="true"/> - + diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptName.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptName.hbm.xml index c7636012c0b5..aeb2e83f422d 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptName.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptName.hbm.xml @@ -29,7 +29,7 @@ class="Concept" not-null="true"/> - + diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptNameTag.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptNameTag.hbm.xml index 0ee4c6eb2caa..cb13ee6c1f97 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptNameTag.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/ConceptNameTag.hbm.xml @@ -24,7 +24,7 @@ - + diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/Field.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/Field.hbm.xml index a0e47c97f7d6..2be5c7bed175 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/Field.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/Field.hbm.xml @@ -31,7 +31,7 @@ - + @@ -45,7 +45,7 @@ - - diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/GlobalProperty.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/GlobalProperty.hbm.xml index f254bdd91541..e67ea95d39e6 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/GlobalProperty.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/GlobalProperty.hbm.xml @@ -23,10 +23,10 @@ - - + diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/Obs.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/Obs.hbm.xml index 428211f8b41c..caafce676d92 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/Obs.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/Obs.hbm.xml @@ -42,7 +42,7 @@ column="value_numeric" length="22" /> - diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/Order.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/Order.hbm.xml index 95a52f72f9fd..3a3fba31ca0a 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/Order.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/Order.hbm.xml @@ -28,7 +28,7 @@ - + @@ -116,7 +116,7 @@ - + @@ -137,7 +137,7 @@ true - + @@ -156,7 +156,7 @@ true - + diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/OrderSetMember.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/OrderSetMember.hbm.xml index 6b036c67cbc8..8f4a7b4bdd1f 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/OrderSetMember.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/OrderSetMember.hbm.xml @@ -33,7 +33,7 @@ - diff --git a/api/src/main/resources/org/openmrs/api/db/hibernate/Role.hbm.xml b/api/src/main/resources/org/openmrs/api/db/hibernate/Role.hbm.xml index 7bcdfe236b79..0db83faf8626 100644 --- a/api/src/main/resources/org/openmrs/api/db/hibernate/Role.hbm.xml +++ b/api/src/main/resources/org/openmrs/api/db/hibernate/Role.hbm.xml @@ -19,7 +19,7 @@ - + diff --git a/api/src/test/java/org/openmrs/util/databasechange/ValidateHibernateMappingsDatabaseIT.java b/api/src/test/java/org/openmrs/util/databasechange/ValidateHibernateMappingsDatabaseIT.java index 6f11558114a3..d202c231f985 100644 --- a/api/src/test/java/org/openmrs/util/databasechange/ValidateHibernateMappingsDatabaseIT.java +++ b/api/src/test/java/org/openmrs/util/databasechange/ValidateHibernateMappingsDatabaseIT.java @@ -19,6 +19,7 @@ import org.hibernate.cfg.Environment; import org.junit.jupiter.api.Test; import org.openmrs.api.OrderServiceTest; +import org.openmrs.api.db.hibernate.envers.OpenMRSRevisionEntity; import org.openmrs.liquibase.ChangeLogVersionFinder; import org.openmrs.util.H2DatabaseIT; import org.openmrs.util.OpenmrsClassScanner; @@ -81,9 +82,8 @@ private SessionFactory buildSessionFactory() { Configuration configuration = new Configuration().configure(); Set> entityClasses = OpenmrsClassScanner.getInstance().getClassesWithAnnotation(Entity.class); - if (entityClasses.contains(OrderServiceTest.SomeTestOrder.class)) { - entityClasses.remove(OrderServiceTest.SomeTestOrder.class); - } + entityClasses.remove(OrderServiceTest.SomeTestOrder.class); + entityClasses.remove(OpenMRSRevisionEntity.class); for (Class clazz : entityClasses) { configuration.addAnnotatedClass(clazz); } @@ -94,7 +94,7 @@ private SessionFactory buildSessionFactory() { configuration.setProperty(Environment.PASS, PASSWORD); configuration.setProperty(Environment.USE_SECOND_LEVEL_CACHE, "false"); configuration.setProperty(Environment.USE_QUERY_CACHE, "false"); - + configuration.setProperty("hibernate.integration.envers.enabled", "false"); // Validate HBMs against the actual schema configuration.setProperty(Environment.HBM2DDL_AUTO, "validate"); diff --git a/pom.xml b/pom.xml index c3ab2cc4fae0..84f1d0719e75 100644 --- a/pom.xml +++ b/pom.xml @@ -246,6 +246,11 @@ hibernate-search-orm ${hibernateSearchVersion}
+ + org.hibernate + hibernate-envers + ${hibernateVersion} + org.apache.lucene lucene-queryparser diff --git a/webapp/src/main/webapp/WEB-INF/view/scripts/jquery/autocomplete/OpenmrsAutoComplete.js b/webapp/src/main/webapp/WEB-INF/view/scripts/jquery/autocomplete/OpenmrsAutoComplete.js index 61a02c504b1a..4d667ceeeb30 100644 --- a/webapp/src/main/webapp/WEB-INF/view/scripts/jquery/autocomplete/OpenmrsAutoComplete.js +++ b/webapp/src/main/webapp/WEB-INF/view/scripts/jquery/autocomplete/OpenmrsAutoComplete.js @@ -388,4 +388,4 @@ function CreateCallback(options) { return { label: textShown, value: value, object: item}; }; }; -} \ No newline at end of file +} From 28820e573f03eadbd6b356a014686c995f02aded Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 01:04:32 +0300 Subject: [PATCH 033/163] maven(deps): bump org.apache.maven.plugins:maven-surefire-plugin (#4664) Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.5 to 3.3.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.5...surefire-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 84f1d0719e75..4bb2d2fd8b4e 100644 --- a/pom.xml +++ b/pom.xml @@ -603,7 +603,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.5 + 3.3.0 org.apache.maven.plugins @@ -935,7 +935,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.5 + 3.3.0 false false From 26163bbb092dcc33d77a465997a3ec97660d3cf5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:36:08 +0300 Subject: [PATCH 034/163] maven(deps): bump org.apache.maven.plugins:maven-release-plugin (#4667) Bumps [org.apache.maven.plugins:maven-release-plugin](https://github.com/apache/maven-release) from 3.0.1 to 3.1.0. - [Release notes](https://github.com/apache/maven-release/releases) - [Commits](https://github.com/apache/maven-release/compare/maven-release-3.0.1...maven-release-3.1.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-release-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4bb2d2fd8b4e..f2ca9ebbaad2 100644 --- a/pom.xml +++ b/pom.xml @@ -705,7 +705,7 @@ org.apache.maven.plugins maven-release-plugin - 3.0.1 + 3.1.0 clean install true From 8b769a733729bd3013854cfefb62c18c8cfa1d42 Mon Sep 17 00:00:00 2001 From: Michael Seaton Date: Mon, 17 Jun 2024 15:54:36 -0400 Subject: [PATCH 035/163] TRUNK-6244 - Obs with numeric concept with `allowDecimal = false` shows value as decimal instead of int (#4666) --- api/src/main/java/org/openmrs/Obs.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/openmrs/Obs.java b/api/src/main/java/org/openmrs/Obs.java index 1e650363c36e..7f2648588ca5 100644 --- a/api/src/main/java/org/openmrs/Obs.java +++ b/api/src/main/java/org/openmrs/Obs.java @@ -25,6 +25,7 @@ import org.openmrs.annotation.AllowDirectAccess; import org.openmrs.api.APIException; import org.openmrs.api.context.Context; +import org.openmrs.api.db.hibernate.HibernateUtil; import org.openmrs.obs.ComplexData; import org.openmrs.obs.ComplexObsHandler; import org.openmrs.util.Format; @@ -980,8 +981,9 @@ public String getValueAsString(Locale locale) { if (getValueNumeric() == null) { return ""; } else { - if (getConcept() instanceof ConceptNumeric) { - ConceptNumeric cn = (ConceptNumeric) getConcept(); + Concept deproxiedConcept = HibernateUtil.getRealObjectFromProxy(getConcept()); + if (deproxiedConcept instanceof ConceptNumeric) { + ConceptNumeric cn = (ConceptNumeric) deproxiedConcept; if (!cn.getAllowDecimal()) { double d = getValueNumeric(); int i = (int) d; From 0ce2587784f22d515c757ae6617d84c4fd4018f1 Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Tue, 18 Jun 2024 14:25:43 +0530 Subject: [PATCH 036/163] OMRS-131: Detailed Audit Logging (#4665) Enabled logging to the tables that we did not include in last PR. --- api/src/main/java/org/openmrs/ConceptNumeric.java | 2 ++ api/src/main/java/org/openmrs/ConceptProposal.java | 2 ++ api/src/main/java/org/openmrs/ConceptStateConversion.java | 3 +++ api/src/main/java/org/openmrs/ConceptStopWord.java | 2 ++ api/src/main/java/org/openmrs/TestOrder.java | 3 +++ .../main/java/org/openmrs/api/db/ClobDatatypeStorage.java | 2 ++ api/src/main/java/org/openmrs/api/db/SerializedObject.java | 2 ++ api/src/main/java/org/openmrs/hl7/HL7InArchive.java | 3 +++ api/src/main/java/org/openmrs/hl7/HL7InError.java | 2 ++ api/src/main/java/org/openmrs/hl7/HL7InQueue.java | 3 +++ api/src/main/java/org/openmrs/hl7/HL7Source.java | 2 ++ api/src/main/java/org/openmrs/notification/Template.java | 2 ++ api/src/main/java/org/openmrs/scheduler/TaskDefinition.java | 5 +++++ 13 files changed, 33 insertions(+) diff --git a/api/src/main/java/org/openmrs/ConceptNumeric.java b/api/src/main/java/org/openmrs/ConceptNumeric.java index 5426ca06befa..82d1de6df6d5 100644 --- a/api/src/main/java/org/openmrs/ConceptNumeric.java +++ b/api/src/main/java/org/openmrs/ConceptNumeric.java @@ -13,6 +13,7 @@ import java.util.TreeSet; import org.codehaus.jackson.annotate.JsonIgnore; +import org.hibernate.envers.Audited; import org.hibernate.search.annotations.Indexed; /** @@ -21,6 +22,7 @@ * @see Concept */ @Indexed +@Audited public class ConceptNumeric extends Concept { public static final long serialVersionUID = 47323L; diff --git a/api/src/main/java/org/openmrs/ConceptProposal.java b/api/src/main/java/org/openmrs/ConceptProposal.java index ab7c25215c9e..6e28be510834 100644 --- a/api/src/main/java/org/openmrs/ConceptProposal.java +++ b/api/src/main/java/org/openmrs/ConceptProposal.java @@ -11,6 +11,7 @@ import java.util.Date; +import org.hibernate.envers.Audited; import org.openmrs.util.OpenmrsConstants; /** @@ -20,6 +21,7 @@ * encounter that prompted this proposal is updated with a new observation pointing at the new (or * edited) concept. */ +@Audited public class ConceptProposal extends BaseOpenmrsObject { public static final long serialVersionUID = 57344L; diff --git a/api/src/main/java/org/openmrs/ConceptStateConversion.java b/api/src/main/java/org/openmrs/ConceptStateConversion.java index 2d08c9c066d3..d29e8257bf30 100644 --- a/api/src/main/java/org/openmrs/ConceptStateConversion.java +++ b/api/src/main/java/org/openmrs/ConceptStateConversion.java @@ -9,9 +9,12 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * ConceptStateConversion */ +@Audited public class ConceptStateConversion extends BaseOpenmrsObject { public static final long serialVersionUID = 3214511L; diff --git a/api/src/main/java/org/openmrs/ConceptStopWord.java b/api/src/main/java/org/openmrs/ConceptStopWord.java index dd59c386b7ff..d49508ac9883 100644 --- a/api/src/main/java/org/openmrs/ConceptStopWord.java +++ b/api/src/main/java/org/openmrs/ConceptStopWord.java @@ -11,6 +11,7 @@ import java.util.Locale; +import org.hibernate.envers.Audited; import org.openmrs.api.context.Context; import org.springframework.util.StringUtils; @@ -21,6 +22,7 @@ * * @since 1.8 */ +@Audited public class ConceptStopWord extends BaseOpenmrsObject { private static final long serialVersionUID = 3671020002642184656L; diff --git a/api/src/main/java/org/openmrs/TestOrder.java b/api/src/main/java/org/openmrs/TestOrder.java index d1a6c3a101fa..e74588894ca5 100644 --- a/api/src/main/java/org/openmrs/TestOrder.java +++ b/api/src/main/java/org/openmrs/TestOrder.java @@ -9,12 +9,15 @@ */ package org.openmrs; +import org.hibernate.envers.Audited; + /** * This is a type of order that adds tests specific attributes like: laterality, clinical history, * etc. * * @since 1.9.2, 1.10 */ +@Audited public class TestOrder extends ServiceOrder { public static final long serialVersionUID = 1L; diff --git a/api/src/main/java/org/openmrs/api/db/ClobDatatypeStorage.java b/api/src/main/java/org/openmrs/api/db/ClobDatatypeStorage.java index d7e6200e0b91..01df85a5c8b0 100644 --- a/api/src/main/java/org/openmrs/api/db/ClobDatatypeStorage.java +++ b/api/src/main/java/org/openmrs/api/db/ClobDatatypeStorage.java @@ -9,6 +9,7 @@ */ package org.openmrs.api.db; +import org.hibernate.envers.Audited; import org.openmrs.BaseOpenmrsObject; /** @@ -16,6 +17,7 @@ * * @since 1.9 */ +@Audited public class ClobDatatypeStorage extends BaseOpenmrsObject { private Integer id; diff --git a/api/src/main/java/org/openmrs/api/db/SerializedObject.java b/api/src/main/java/org/openmrs/api/db/SerializedObject.java index d357e3a2a834..7c0aff5026a8 100644 --- a/api/src/main/java/org/openmrs/api/db/SerializedObject.java +++ b/api/src/main/java/org/openmrs/api/db/SerializedObject.java @@ -11,6 +11,7 @@ import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; +import org.hibernate.envers.Audited; import org.openmrs.BaseChangeableOpenmrsMetadata; import org.openmrs.serialization.OpenmrsSerializer; @@ -26,6 +27,7 @@ */ @Entity @Table(name = "serialized_object") +@Audited public class SerializedObject extends BaseChangeableOpenmrsMetadata { @Id diff --git a/api/src/main/java/org/openmrs/hl7/HL7InArchive.java b/api/src/main/java/org/openmrs/hl7/HL7InArchive.java index 21ecba83b6c5..fa03afb1f529 100644 --- a/api/src/main/java/org/openmrs/hl7/HL7InArchive.java +++ b/api/src/main/java/org/openmrs/hl7/HL7InArchive.java @@ -9,12 +9,15 @@ */ package org.openmrs.hl7; +import org.hibernate.envers.Audited; + /** * Represents a successfully processed hl7 message. * * @see HL7InQueue * @see HL7Service */ +@Audited public class HL7InArchive extends HL7QueueItem { private int hl7InArchiveId; diff --git a/api/src/main/java/org/openmrs/hl7/HL7InError.java b/api/src/main/java/org/openmrs/hl7/HL7InError.java index d5641891794e..a2eb90dfdaca 100644 --- a/api/src/main/java/org/openmrs/hl7/HL7InError.java +++ b/api/src/main/java/org/openmrs/hl7/HL7InError.java @@ -9,6 +9,7 @@ */ package org.openmrs.hl7; +import org.hibernate.envers.Audited; import org.openmrs.api.APIException; /** @@ -17,6 +18,7 @@ * @see HL7InQueue * @see HL7Service */ +@Audited public class HL7InError extends HL7QueueItem { private static final int MAX_ERROR_DETAILS_LENGTH = 16777215; diff --git a/api/src/main/java/org/openmrs/hl7/HL7InQueue.java b/api/src/main/java/org/openmrs/hl7/HL7InQueue.java index 705d31f8a3f2..7eaefe43d24a 100644 --- a/api/src/main/java/org/openmrs/hl7/HL7InQueue.java +++ b/api/src/main/java/org/openmrs/hl7/HL7InQueue.java @@ -9,11 +9,14 @@ */ package org.openmrs.hl7; +import org.hibernate.envers.Audited; + /** * Represents an hl7 message that has yet to be processed. * * @see HL7Service */ +@Audited public class HL7InQueue extends HL7QueueItem { private static final long serialVersionUID = 8882704913734764446L; diff --git a/api/src/main/java/org/openmrs/hl7/HL7Source.java b/api/src/main/java/org/openmrs/hl7/HL7Source.java index c95c2fa71a9c..f6674b359456 100644 --- a/api/src/main/java/org/openmrs/hl7/HL7Source.java +++ b/api/src/main/java/org/openmrs/hl7/HL7Source.java @@ -9,11 +9,13 @@ */ package org.openmrs.hl7; +import org.hibernate.envers.Audited; import org.openmrs.BaseChangeableOpenmrsMetadata; /** * Names a unique location that hl7 messages could be coming from. */ +@Audited public class HL7Source extends BaseChangeableOpenmrsMetadata { private static final long serialVersionUID = 3062136520728193223L; diff --git a/api/src/main/java/org/openmrs/notification/Template.java b/api/src/main/java/org/openmrs/notification/Template.java index d6e6a592f6b9..691232f41b16 100644 --- a/api/src/main/java/org/openmrs/notification/Template.java +++ b/api/src/main/java/org/openmrs/notification/Template.java @@ -11,8 +11,10 @@ import java.util.Map; +import org.hibernate.envers.Audited; import org.openmrs.BaseOpenmrsObject; +@Audited public class Template extends BaseOpenmrsObject { /** diff --git a/api/src/main/java/org/openmrs/scheduler/TaskDefinition.java b/api/src/main/java/org/openmrs/scheduler/TaskDefinition.java index 2cb37356380b..5c07e02be5e5 100644 --- a/api/src/main/java/org/openmrs/scheduler/TaskDefinition.java +++ b/api/src/main/java/org/openmrs/scheduler/TaskDefinition.java @@ -13,6 +13,8 @@ import java.util.HashMap; import java.util.Map; +import org.hibernate.envers.Audited; +import org.hibernate.envers.NotAudited; import org.openmrs.BaseChangeableOpenmrsMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,6 +22,7 @@ /** * Represents the metadata for a task that can be scheduled. */ +@Audited public class TaskDefinition extends BaseChangeableOpenmrsMetadata { private static final Logger log = LoggerFactory.getLogger(TaskDefinition.class); @@ -49,6 +52,7 @@ public class TaskDefinition extends BaseChangeableOpenmrsMetadata { private Boolean started; // Relationships + @NotAudited private Map properties; /** @@ -98,6 +102,7 @@ public void setId(Integer id) { * * @return the data map */ + @NotAudited public Map getProperties() { return this.properties; } From 3a7925a3484c098078db6e70f9b6f4a6cbb4e884 Mon Sep 17 00:00:00 2001 From: Ryan McCauley <32387857+k4pran@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:43:54 +0100 Subject: [PATCH 037/163] TRUNK-6208: Upgrade 2.7 Platform to Liquibase 4.27.0 (#4637) * TRUNK-6208: Upgrade 2.7 Platform to Liquibase 4.27.0 * TRUNK-6208 remove h2 changeset * TRUNK-6208 update changeset count after remove h2 changeset * TRUNK-6208 change type from int(11) to int --------- Co-authored-by: dkayiwa --- .../db/hibernate/HibernateEncounterDAO.java | 3 -- .../openmrs/liquibase/ChangeLogDetective.java | 21 +++++++-- .../liquibase/LiquibaseScopeHandling.java | 33 +++++++++++++ .../OpenmrsClassLoaderResourceAccessor.java | 23 +++++++-- .../org/openmrs/util/DatabaseUpdater.java | 44 +++++++++++++++--- .../org/openmrs/util/OpenmrsConstants.java | 4 ++ .../liquibase-update-to-latest-2.0.x.xml | 2 + .../liquibase-update-to-latest-2.2.x.xml | 2 +- .../Database1_9_7UpgradeIT.java | 16 +++---- .../util/databasechange/openmrs-1.9.7.h2.db | Bin 6303744 -> 3110912 bytes .../org/openmrs/util/testLiquibase.xml | 2 +- liquibase/pom.xml | 2 +- liquibase/src/main/resources/log4j2.xml | 1 + pom.xml | 2 +- webapp/src/main/resources/log4j2.xml | 1 + 15 files changed, 126 insertions(+), 30 deletions(-) create mode 100644 api/src/main/java/org/openmrs/liquibase/LiquibaseScopeHandling.java diff --git a/api/src/main/java/org/openmrs/api/db/hibernate/HibernateEncounterDAO.java b/api/src/main/java/org/openmrs/api/db/hibernate/HibernateEncounterDAO.java index 407d3f727329..1aef8c39cfa2 100644 --- a/api/src/main/java/org/openmrs/api/db/hibernate/HibernateEncounterDAO.java +++ b/api/src/main/java/org/openmrs/api/db/hibernate/HibernateEncounterDAO.java @@ -19,7 +19,6 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -27,13 +26,11 @@ import java.util.Map; import java.util.stream.Collectors; -import liquibase.pro.packaged.Q; import org.apache.commons.lang3.StringUtils; import org.hibernate.FlushMode; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.criterion.Order; import org.openmrs.Cohort; import org.openmrs.Encounter; import org.openmrs.EncounterProvider; diff --git a/api/src/main/java/org/openmrs/liquibase/ChangeLogDetective.java b/api/src/main/java/org/openmrs/liquibase/ChangeLogDetective.java index c8b9673934e3..f08df226397b 100644 --- a/api/src/main/java/org/openmrs/liquibase/ChangeLogDetective.java +++ b/api/src/main/java/org/openmrs/liquibase/ChangeLogDetective.java @@ -17,6 +17,7 @@ import liquibase.LabelExpression; import liquibase.Liquibase; import liquibase.changelog.ChangeSet; +import liquibase.command.core.StatusCommandStep; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,9 +86,16 @@ public String getInitialLiquibaseSnapshotVersion(String context, LiquibaseProvid Liquibase liquibase = null; try { for (String filename : changeSets) { + String scopeId = LiquibaseScopeHandling.enterLiquibaseUILoggingService(); + liquibase = liquibaseProvider.getLiquibase(filename); - List rawUnrunChangeSets = liquibase.listUnrunChangeSets(new Contexts(context), - new LabelExpression()); + + List rawUnrunChangeSets = new StatusCommandStep() + .listUnrunChangeSets(new Contexts(context), + new LabelExpression(), liquibase.getDatabaseChangeLog(), liquibase.getDatabase()); + + + LiquibaseScopeHandling.exitLiquibaseScope(scopeId); liquibase.close(); List refinedUnrunChangeSets = excludeVintageChangeSets(filename, rawUnrunChangeSets); @@ -141,9 +149,14 @@ public List getUnrunLiquibaseUpdateFileNames(String snapshotVersion, Str Liquibase liquibase = null; try { for (String filename : updateFileNames) { + String scopeId = LiquibaseScopeHandling.enterLiquibaseUILoggingService(); liquibase = liquibaseProvider.getLiquibase(filename); - List unrunChangeSets = liquibase.listUnrunChangeSets(new Contexts(context), - new LabelExpression()); + + List unrunChangeSets = new StatusCommandStep() + .listUnrunChangeSets(new Contexts(context), + new LabelExpression(), liquibase.getDatabaseChangeLog(), liquibase.getDatabase()); + + LiquibaseScopeHandling.exitLiquibaseScope(scopeId); liquibase.close(); log.info("file '{}' contains {} un-run change sets", filename, unrunChangeSets.size()); diff --git a/api/src/main/java/org/openmrs/liquibase/LiquibaseScopeHandling.java b/api/src/main/java/org/openmrs/liquibase/LiquibaseScopeHandling.java new file mode 100644 index 000000000000..971cf4c72294 --- /dev/null +++ b/api/src/main/java/org/openmrs/liquibase/LiquibaseScopeHandling.java @@ -0,0 +1,33 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + * + * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ +package org.openmrs.liquibase; + +import java.util.Collections; +import java.util.Map; +import java.util.logging.Level; + +import liquibase.Scope; +import liquibase.ui.LoggerUIService; + +public class LiquibaseScopeHandling { + + public static String enterLiquibaseUILoggingService() throws Exception { + // Temp workaround to silence liquibase writing to stdout - https://github.com/liquibase/liquibase/issues/2396, + // https://github.com/liquibase/liquibase/issues/3651 + LoggerUIService loggerUIService = new LoggerUIService(); + loggerUIService.setStandardLogLevel(Level.FINE); + Map m = Collections.singletonMap(Scope.Attr.ui.name(), loggerUIService); + return Scope.enter(m); + } + + public static void exitLiquibaseScope(String scopeId) throws Exception { + Scope.exit(scopeId); + } +} diff --git a/api/src/main/java/org/openmrs/liquibase/OpenmrsClassLoaderResourceAccessor.java b/api/src/main/java/org/openmrs/liquibase/OpenmrsClassLoaderResourceAccessor.java index dd859362de9c..92a621525c57 100644 --- a/api/src/main/java/org/openmrs/liquibase/OpenmrsClassLoaderResourceAccessor.java +++ b/api/src/main/java/org/openmrs/liquibase/OpenmrsClassLoaderResourceAccessor.java @@ -11,16 +11,21 @@ import liquibase.resource.ClassLoaderResourceAccessor; import liquibase.resource.InputStreamList; +import liquibase.resource.Resource; import org.openmrs.util.OpenmrsClassLoader; import java.io.IOException; -import java.io.InputStream; import java.net.URI; +import java.util.List; /** * A customization of Liquibase's {@link ClassLoaderResourceAccessor} which defaults to the OpenMRS ClassLoader and has * special handling for our liquibase.xml files, which occur multiple times on the classpath. + * @deprecated As of 2.7.0, replaced by the usage of {@link #search(String, boolean)} or {@link #getAll(String)}, + * as this provides a better handling of paths that map to multiple resources using Liquibase's DUPLICATE_FILE_MODE. + * Refer to {@link liquibase.GlobalConfiguration#DUPLICATE_FILE_MODE} for the configuration and usage details. */ +@Deprecated public class OpenmrsClassLoaderResourceAccessor extends ClassLoaderResourceAccessor { public OpenmrsClassLoaderResourceAccessor() { @@ -33,15 +38,23 @@ public OpenmrsClassLoaderResourceAccessor(ClassLoader classLoader) { @Override public InputStreamList openStreams(String relativeTo, String streamPath) throws IOException { - InputStreamList result = super.openStreams(relativeTo, streamPath); - if (result != null && !result.isEmpty() && result.size() > 1) { + List resources = super.getAll(streamPath); + InputStreamList result = new InputStreamList(); + if (resources == null || resources.isEmpty()) { + return result; + } + + for (Resource resource : resources) { + result.add(resource.getUri(), resource.openInputStream()); + } + if (!result.isEmpty() && result.size() > 1) { try (InputStreamList oldResult = result) { URI uri = oldResult.getURIs().get(0); result = new InputStreamList(uri, uri.toURL().openStream()); } - + } - + return result; } } diff --git a/api/src/main/java/org/openmrs/util/DatabaseUpdater.java b/api/src/main/java/org/openmrs/util/DatabaseUpdater.java index b7a6dcb7009e..101850fcbf4b 100644 --- a/api/src/main/java/org/openmrs/util/DatabaseUpdater.java +++ b/api/src/main/java/org/openmrs/util/DatabaseUpdater.java @@ -10,6 +10,7 @@ package org.openmrs.util; import liquibase.Contexts; +import liquibase.GlobalConfiguration; import liquibase.LabelExpression; import liquibase.Liquibase; import liquibase.RuntimeEnvironment; @@ -23,6 +24,7 @@ import liquibase.changelog.filter.DbmsChangeSetFilter; import liquibase.changelog.filter.ShouldRunChangeSetFilter; import liquibase.changelog.visitor.UpdateVisitor; +import liquibase.command.core.StatusCommandStep; import liquibase.database.Database; import liquibase.database.DatabaseFactory; import liquibase.database.jvm.JdbcConnection; @@ -33,6 +35,7 @@ import liquibase.resource.CompositeResourceAccessor; import liquibase.resource.FileSystemResourceAccessor; import liquibase.resource.ResourceAccessor; +import liquibase.ui.LoggerUIService; import org.apache.commons.io.IOUtils; import org.openmrs.annotation.Authorized; import org.openmrs.api.context.Context; @@ -40,6 +43,7 @@ import org.openmrs.liquibase.ChangeLogVersionFinder; import org.openmrs.liquibase.ChangeSetExecutorCallback; import org.openmrs.liquibase.LiquibaseProvider; +import org.openmrs.liquibase.LiquibaseScopeHandling; import org.openmrs.liquibase.OpenmrsClassLoaderResourceAccessor; import org.openmrs.module.ModuleClassLoader; import org.slf4j.Logger; @@ -68,6 +72,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.logging.Level; /** * This class uses Liquibase to update the database.
@@ -214,8 +219,13 @@ public static List executeChangelog(String changeLogFile, Contexts conte log.debug("Setting up liquibase object to run changelog: {}", changeLogFile); Liquibase liquibase = getLiquibase(changeLogFile, cl); - - int numChangeSetsToRun = liquibase.listUnrunChangeSets(contexts, new LabelExpression()).size(); + + String scopeId = LiquibaseScopeHandling.enterLiquibaseUILoggingService(); + int numChangeSetsToRun = new StatusCommandStep() + .listUnrunChangeSets(contexts, + new LabelExpression(), liquibase.getDatabaseChangeLog(), liquibase.getDatabase()).size(); + LiquibaseScopeHandling.exitLiquibaseScope(scopeId); + Database database = null; LockService lockHandler = null; @@ -233,7 +243,7 @@ public static List executeChangelog(String changeLogFile, Contexts conte // ensure that the change log history service is initialised // - ChangeLogHistoryServiceFactory.getInstance().getChangeLogService(database).init(); + Scope.getCurrentScope().getSingleton(ChangeLogHistoryServiceFactory.class).getChangeLogService(database).init(); logIterator.run(new OpenmrsUpdateVisitor(database, callback, numChangeSetsToRun), new RuntimeEnvironment(database, contexts, new LabelExpression())); @@ -426,8 +436,13 @@ private static Liquibase getLiquibase(String changeLogFile, ClassLoader cl) thro changeLogFile = EMPTY_CHANGE_LOG_FILE; } + configureLiquibaseDuplicateFileMode(); + // ensure that the change log history service is initialised - ChangeLogHistoryServiceFactory.getInstance().getChangeLogService(database).init(); + Scope.getCurrentScope() + .getSingleton(ChangeLogHistoryServiceFactory.class) + .getChangeLogService(database) + .init(); return new Liquibase(changeLogFile, getCompositeResourceAccessor(cl), database); } catch (Exception e) { @@ -604,6 +619,7 @@ public static List getDatabaseChanges() throws Exception { Liquibase liquibase = null; try { for (String filename : changeLogFileNames) { + String scopeId = LiquibaseScopeHandling.enterLiquibaseUILoggingService(); liquibase = getLiquibase(filename); List changeSets = liquibase.getDatabaseChangeLog().getChangeSets(); @@ -611,6 +627,7 @@ public static List getDatabaseChanges() throws Exception { OpenMRSChangeSet openMRSChangeSet = new OpenMRSChangeSet(changeSet, liquibase.getDatabase()); result.add(openMRSChangeSet); } + LiquibaseScopeHandling.exitLiquibaseScope(scopeId); liquibase.close(); } } @@ -669,18 +686,22 @@ public static List getUnrunDatabaseChanges(String... changeLog List results = new ArrayList<>(); + String scopeId = LiquibaseScopeHandling.enterLiquibaseUILoggingService(); for (String changelogFile : changeLogFilenames) { Liquibase liquibase = getLiquibase(changelogFile, null); database = liquibase.getDatabase(); - List changeSets = liquibase.listUnrunChangeSets(new Contexts(CONTEXT), new LabelExpression()); - + List changeSets = new StatusCommandStep() + .listUnrunChangeSets(new Contexts(CONTEXT), + new LabelExpression(), liquibase.getDatabaseChangeLog(), liquibase.getDatabase()); + for (ChangeSet changeSet : changeSets) { OpenMRSChangeSet omrschangeset = new OpenMRSChangeSet(changeSet, database); results.add(omrschangeset); } } + LiquibaseScopeHandling.exitLiquibaseScope(scopeId); return results; } @@ -884,4 +905,15 @@ private static CompositeResourceAccessor getCompositeResourceAccessor(ClassLoade ResourceAccessor fsFO = new FileSystemResourceAccessor(OpenmrsUtil.getApplicationDataDirectoryAsFile()); return new CompositeResourceAccessor(openmrsFO, fsFO); } + + private static void configureLiquibaseDuplicateFileMode() { + final String dupFlagModeKey = GlobalConfiguration.DUPLICATE_FILE_MODE.getKey(); + final String dupFlagMode = Context.getRuntimeProperties().getProperty(dupFlagModeKey); + + if (dupFlagMode != null) { + System.setProperty(dupFlagModeKey, dupFlagMode); + } else if (System.getProperty(dupFlagModeKey) == null) { + System.setProperty(dupFlagModeKey, OpenmrsConstants.LIQUIBASE_DUPLICATE_FILE_MODE_DEFAULT); + } + } } diff --git a/api/src/main/java/org/openmrs/util/OpenmrsConstants.java b/api/src/main/java/org/openmrs/util/OpenmrsConstants.java index 94294a8c3984..c692dea0debc 100644 --- a/api/src/main/java/org/openmrs/util/OpenmrsConstants.java +++ b/api/src/main/java/org/openmrs/util/OpenmrsConstants.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Properties; +import liquibase.GlobalConfiguration; import org.apache.commons.io.IOUtils; import org.openmrs.GlobalProperty; import org.openmrs.api.context.Context; @@ -1314,6 +1315,9 @@ public static enum PERSON_TYPE { /** Value for the long person name format */ public static final String PERSON_NAME_FORMAT_LONG = "long"; + // Liquibase Constants + public static final String LIQUIBASE_DUPLICATE_FILE_MODE_DEFAULT = GlobalConfiguration.DuplicateFileMode.WARN.name(); + private OpenmrsConstants() { } diff --git a/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.0.x.xml b/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.0.x.xml index e319301c2a4a..d3c8f368363e 100644 --- a/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.0.x.xml +++ b/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.0.x.xml @@ -1790,6 +1790,7 @@ 1b6141be59a8a243b9e56d0aad952af 89cc7a14b0582f157ea2dbb9de092fd Changes to new concept_reference tables3:4edd135921eb263d4811cf1c22ef4846 + Account for trailing whitespace9:5d41399f930d6de5c0030986b78f35e5 @@ -3521,6 +3522,7 @@ After changing to boolean3:b57c0f651ed477457fd16e503eaf51a4 3:002108aacdf55731f4fd472d5308c5c8 3:6a72bbb390155596e52da4e8d065d1a2 + Account for trailing whitespace9:f41906e41efde3f7473abaa52fa161dc Fixing TRUNK-40403:74026cd4543ebbf561999a81c276224d diff --git a/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.2.x.xml b/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.2.x.xml index 823ddfe4e95d..45d9d6084430 100644 --- a/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.2.x.xml +++ b/api/src/main/resources/org/openmrs/liquibase/updates/liquibase-update-to-latest-2.2.x.xml @@ -63,7 +63,7 @@ - + diff --git a/api/src/test/java/org/openmrs/util/databasechange/Database1_9_7UpgradeIT.java b/api/src/test/java/org/openmrs/util/databasechange/Database1_9_7UpgradeIT.java index cb10a0c119b2..86b81dcee28e 100644 --- a/api/src/test/java/org/openmrs/util/databasechange/Database1_9_7UpgradeIT.java +++ b/api/src/test/java/org/openmrs/util/databasechange/Database1_9_7UpgradeIT.java @@ -157,7 +157,7 @@ public void shouldUpgradeFromClean1_9To1_10() throws IOException, SQLException { public void shouldFailMigratingDrugOrdersIfUnitsToConceptsMappingsIsNotSet() throws IOException, SQLException { upgradeTestUtil.executeDataset(STANDARD_TEST_1_9_7_DATASET); createOrderEntryUpgradeFileWithTestData(""); - String errorMsgSubString1 = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; + String errorMsgSubString1 = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; String errorMsgSubString2 = Context.getMessageSourceService().getMessage("upgrade.settings.file.not.have.mapping", new Object[] { "mg" }, null); IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); @@ -174,7 +174,7 @@ public void shouldFailMigratingDrugOrdersIfUnitsToConceptsMappingsDoesNotPointTo "mg=111\ntab(s)=112\n1/day\\ x\\ 7\\ days/week=113\n2/day\\ x\\ 7\\ days/week=114"); createOrderEntryUpgradeFileWithTestData("mg=111\ntab(s)=invalid"); - String errorMsgSubString1 = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; + String errorMsgSubString1 = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getMessage(), containsString(errorMsgSubString1)); assertThat(exception.getMessage(), containsString("For input string: \"invalid\"")); @@ -224,7 +224,7 @@ public void shouldFailIfAnyDrugOrderUnitsNotMappedToConceptsAreFound() throws Ex //map the frequencies only createOrderEntryUpgradeFileWithTestData("1/day\\ x\\ 7\\ days/week=113\n2/day\\ x\\ 7\\ days/week=114"); - String errorMsgSubString1 = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; + String errorMsgSubString1 = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getMessage(), containsString(errorMsgSubString1)); } @@ -240,7 +240,7 @@ public void shouldFailIfAnyDrugOrderFrequenciesNotMappedToConceptsAreFound() thr //map the dose units only createOrderEntryUpgradeFileWithTestData("mg=111\ntab(s)=112"); - String errorMsgSubString1 = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; + String errorMsgSubString1 = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201401101647-TRUNK-4187::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getMessage(), containsString(errorMsgSubString1)); @@ -344,7 +344,7 @@ public void shouldFailIfThereAreDrugsWithDoseStrengthAndNoNullUnits() throws IOE createOrderEntryUpgradeFileWithTestData( "mg=111\ntab(s)=112\n1/day\\ x\\ 7\\ days/week=113\n2/day\\ x\\ 7\\ days/week=114"); - String errorMsgSubString = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201403262140-TRUNK-4265::wyclif"; + String errorMsgSubString = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201403262140-TRUNK-4265::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getMessage(), containsString(errorMsgSubString)); } @@ -357,7 +357,7 @@ public void shouldFailIfThereAreDrugsWithDoseStrengthAndNoBlankUnits() throws IO createOrderEntryUpgradeFileWithTestData( "mg=111\ntab(s)=112\n1/day\\ x\\ 7\\ days/week=113\n2/day\\ x\\ 7\\ days/week=114"); - String errorMsgSubString = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201403262140-TRUNK-4265::wyclif"; + String errorMsgSubString = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201403262140-TRUNK-4265::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getMessage(), containsString(errorMsgSubString)); } @@ -371,7 +371,7 @@ public void shouldFailIfThereAreAnyOrderTypesInTheDatabaseOtherThanDrugOrderType createOrderEntryUpgradeFileWithTestData( "mg=111\ntab(s)=112\n1/day\\ x\\ 7\\ days/week=113\n2/day\\ x\\ 7\\ days/week=114"); - String errorMsgSubString = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201404091110::wyclif"; + String errorMsgSubString = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201404091110::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getLocalizedMessage(), containsString(errorMsgSubString)); } @@ -428,7 +428,7 @@ public void shouldFailIfThereAreOrderersWithNoAssociatedProviderAccounts() throw createOrderEntryUpgradeFileWithTestData( "mg=111\ntab(s)=112\n1/day\\ x\\ 7\\ days/week=113\n2/day\\ x\\ 7\\ days/week=114"); - String errorMsgSubString = "liquibase.exception.MigrationFailedException: Migration failed for change set liquibase-update-to-latest.xml::201406262016::wyclif"; + String errorMsgSubString = "liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset liquibase-update-to-latest.xml::201406262016::wyclif"; IOException exception = assertThrows(IOException.class, () -> upgradeTestUtil.upgrade()); assertThat(exception.getMessage(), containsString(errorMsgSubString)); } diff --git a/api/src/test/resources/org/openmrs/util/databasechange/openmrs-1.9.7.h2.db b/api/src/test/resources/org/openmrs/util/databasechange/openmrs-1.9.7.h2.db index 0ea1f8d346191f8ed5e4f6627bdbd0033cac54ae..a0f2f833eea9766c2575703871401f03ab6e68f7 100644 GIT binary patch delta 83253 zcmbTe2Ut``7dOt_JNI5-L0JVWDrLn+*`+NgmbFErbY$0P#D!hdSU^Q%-b4kvv4JSZ z*rJIw)=eWZvBj8T1-r4w7B#lSXpHUq-DM&Ae((SJp6Ac=aL%4HbI+VPGjrxlxwr6Q zp;<J6qx2pl8z1`)@0qF4o0~~rmg$vgSfQP1vkgokjg>N0^fZM;70PBAt4RxI?H^!!rQrv-#Sc-M9-E%nx}<}ZhqO) zjVu<+7|#|#nqOV?cC)1mX)Kl)&yXO^J{PmK+48Pu^B~RVE}Aky>w+}1U9_BOdB-z2 zNVDJtIfahxV;Sce6r_3nyo!!Yw-kE@25Bl>^!y}CadYhtEvvQl@K8p1%EvWwmX~zW zTN+f0U#-pi`iR@L<$6o~`$9>IM#Hs1nypW&8pjJuGu6u7_n-`O)r{Fh-glmSFPgZrNV`sH;W8D733( zJH64x@)K?EY$>JC&X(!H+SONF<;Y(%#qtf4`)_B`%$%eiCOLHW<)IqAp@A9Ac3Oxwx9ZLob4P%sI1fx>9% z3v)=TA$~ezZj8+qlWPr&w(7IPqOgBefO4dWR?w<*a6O9?A$`GaAs|5)!P{ z+N#@gAydW@lmGmH$_!(Z#=kt-g7uSg|#9zc6;wEvi_`Wz?G>axNOl&54 z3un;YTZP5K6ya@Qm@q(SD>Pt#uuJR+`=J)wz*evlR>Vd!E9+5W`UVzl$}J6gbx9j; z9WpF@^zefGto*!D1*Vti!Fi(#dcH(k#}o`sOm*hZw~ikDcHSskw?rqIJ1TE@GF2#+ zM&Yj|IXO0a_LxB|by(h@Avxir3#_9G>^3pIiX3hoVY3$Gje4h&5gdR{IPP=_0m4zH zdWE146H|~ed{|zNwO~lzi1CR|%0AXUtcWE!e_P+l8&lBAQk^3_cZhwM4aK}O%sz|J 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 literal 6303744 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%0AFL)uOI){CEyse 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