Compare commits

..

233 Commits

Author SHA1 Message Date
dependabot[bot]
7ec1462047 Bump org.postgresql:postgresql from 42.7.7 to 42.7.8
Bumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.7.7 to 42.7.8.
- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)
- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.7.7...REL42.7.8)

---
updated-dependencies:
- dependency-name: org.postgresql:postgresql
  dependency-version: 42.7.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-06 19:56:30 +00:00
Tim Donohue
5ccf3c05fa Merge pull request #11365 from DSpace/dependabot/maven/spring-268f5d34da
Bump the spring group with 28 updates
2025-10-06 13:36:57 -05:00
Tim Donohue
6507371401 Merge pull request #11363 from DSpace/dependabot/maven/apache-commons-646c41dc72
Bump org.apache.commons:commons-lang3 from 3.18.0 to 3.19.0 in the apache-commons group
2025-10-06 13:32:22 -05:00
Tim Donohue
7da6a8c035 Merge pull request #11364 from DSpace/dependabot/maven/jakarta-97525a5b73
Bump the jakarta group with 5 updates
2025-10-06 13:30:16 -05:00
Tim Donohue
23d5b03bec Merge pull request #11366 from DSpace/dependabot/maven/org.checkerframework-checker-qual-3.51.0
Bump org.checkerframework:checker-qual from 3.50.0 to 3.51.0
2025-10-06 13:26:29 -05:00
Tim Donohue
e5d2088892 Merge pull request #11362 from DSpace/dependabot/maven/test-tools-529d372f53
Bump the test-tools group with 3 updates
2025-10-06 13:23:49 -05:00
Tim Donohue
bd076b88bd Merge pull request #11361 from DSpace/dependabot/maven/build-tools-1acad15a24
Bump the build-tools group with 10 updates
2025-10-06 13:19:42 -05:00
Tim Donohue
a3c7fe1c90 Merge pull request #11367 from DSpace/dependabot/maven/log4j.version-2.25.2
Bump log4j.version from 2.25.1 to 2.25.2
2025-10-06 13:14:46 -05:00
Tim Donohue
3b24801214 Merge pull request #10532 from 4Science/task/main/DURACOM-243
Handles Rotation EXIF Metadata inside JPEGFilter
2025-10-02 14:35:46 -05:00
Tim Donohue
96fe4f25a3 Merge pull request #11321 from TexasDigitalLibrary/DS-8943
DS-8943: adds limit to number of typed links to bitstreams in header
2025-10-01 16:54:36 -05:00
Christian Bethge
c88596493b set locale to English for this test and restore the default after test (#11158)
* set locale to English for this test and restore the default after test

* add missing licence header

* fix checkstyle
2025-10-01 15:35:48 -05:00
JohnnyMendesC
00dc69d69f fix(#10721): Sanitize non-characters during OAI indexing (#11139)
* fix(#10721): Sanitize non-characters during OAI indexing

* refactor: Use StringEscapeUtils as suggested in review

* fix: Removed whitespace before the import that was causing error

Maven Unit Test failed due to the whitespace before the import
https://github.com/DSpace/DSpace/actions/runs/16891881837/job/47853392956?pr=11139#step:4:1959

* fix: Removed trailing whitespace that was causing error
2025-10-01 15:24:51 -05:00
dependabot[bot]
c6dcdbe8f8 Bump log4j.version from 2.25.1 to 2.25.2
Bumps `log4j.version` from 2.25.1 to 2.25.2.

Updates `org.apache.logging.log4j:log4j-api` from 2.25.1 to 2.25.2

Updates `org.apache.logging.log4j:log4j-core` from 2.25.1 to 2.25.2

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.25.1 to 2.25.2

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-version: 2.25.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-version: 2.25.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-version: 2.25.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:07:39 +00:00
dependabot[bot]
2cb567b5f3 Bump org.checkerframework:checker-qual from 3.50.0 to 3.51.0
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.50.0 to 3.51.0.
- [Release notes](https://github.com/typetools/checker-framework/releases)
- [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.50.0...checker-framework-3.51.0)

---
updated-dependencies:
- dependency-name: org.checkerframework:checker-qual
  dependency-version: 3.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:07:15 +00:00
dependabot[bot]
f5949e2480 Bump the spring group with 28 updates
Bumps the spring group with 28 updates:

| Package | From | To |
| --- | --- | --- |
| [org.springframework:spring-orm](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-aop](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-context](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-context-support](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-tx](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-jdbc](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-expression](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework:spring-test](https://github.com/spring-projects/spring-framework) | `6.2.10` | `6.2.11` |
| [org.springframework.boot:spring-boot-starter-test](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-tomcat](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-cache](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-thymeleaf](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-security](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-web](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-data-rest](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-aop](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-actuator](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.boot:spring-boot-starter-log4j2](https://github.com/spring-projects/spring-boot) | `3.5.5` | `3.5.6` |
| [org.springframework.security:spring-security-core](https://github.com/spring-projects/spring-security) | `6.5.3` | `6.5.5` |
| [org.springframework.security:spring-security-web](https://github.com/spring-projects/spring-security) | `6.5.3` | `6.5.5` |
| [org.springframework.security:spring-security-test](https://github.com/spring-projects/spring-security) | `6.5.3` | `6.5.5` |
| [org.springframework.security:spring-security-saml2-service-provider](https://github.com/spring-projects/spring-security) | `6.5.3` | `6.5.5` |


Updates `org.springframework:spring-orm` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-core` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-beans` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-aop` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-context` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-context-support` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-tx` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-jdbc` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-web` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-webmvc` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-expression` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-test` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-core` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-beans` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-aop` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-context` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-context-support` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-tx` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-jdbc` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-web` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-webmvc` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-expression` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework:spring-test` from 6.2.10 to 6.2.11
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.10...v6.2.11)

Updates `org.springframework.boot:spring-boot-starter-test` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-tomcat` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-cache` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-thymeleaf` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-security` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-web` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-data-rest` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-aop` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-log4j2` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.security:spring-security-core` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.security:spring-security-web` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.security:spring-security-test` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.security:spring-security-saml2-service-provider` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.security:spring-security-web` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.boot:spring-boot-starter-tomcat` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.security:spring-security-test` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-cache` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-thymeleaf` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-security` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.security:spring-security-saml2-service-provider` from 6.5.3 to 6.5.5
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.3...6.5.5)

Updates `org.springframework.boot:spring-boot-starter-web` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-data-rest` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-aop` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

Updates `org.springframework.boot:spring-boot-starter-log4j2` from 3.5.5 to 3.5.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

---
updated-dependencies:
- dependency-name: org.springframework:spring-orm
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-core
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-beans
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-aop
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context-support
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-tx
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-jdbc
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-web
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-webmvc
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-expression
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-test
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-core
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-beans
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-aop
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context-support
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-tx
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-jdbc
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-web
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-webmvc
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-expression
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-test
  dependency-version: 6.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-test
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-tomcat
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-cache
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-security
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-data-rest
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-aop
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-actuator
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-log4j2
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-core
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-web
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-test
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-saml2-service-provider
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-web
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-tomcat
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-test
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-cache
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-security
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-saml2-service-provider
  dependency-version: 6.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-data-rest
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-aop
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-actuator
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-log4j2
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:06:45 +00:00
dependabot[bot]
5d3ef36b3a Bump the jakarta group with 5 updates
Bumps the jakarta group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [jakarta.activation:jakarta.activation-api](https://github.com/jakartaee/jaf-api) | `2.1.3` | `2.1.4` |
| [jakarta.mail:jakarta.mail-api](https://github.com/jakartaee/mail-api) | `2.1.4` | `2.1.5` |
| org.eclipse.angus:jakarta.mail | `2.0.4` | `2.0.5` |
| [jakarta.xml.bind:jakarta.xml.bind-api](https://github.com/jakartaee/jaxb-api) | `4.0.2` | `4.0.4` |
| org.glassfish.jaxb:jaxb-runtime | `4.0.5` | `4.0.6` |


Updates `jakarta.activation:jakarta.activation-api` from 2.1.3 to 2.1.4
- [Release notes](https://github.com/jakartaee/jaf-api/releases)
- [Commits](https://github.com/jakartaee/jaf-api/compare/2.1.3...2.1.4)

Updates `jakarta.mail:jakarta.mail-api` from 2.1.4 to 2.1.5
- [Release notes](https://github.com/jakartaee/mail-api/releases)
- [Commits](https://github.com/jakartaee/mail-api/compare/2.1.4...2.1.5)

Updates `org.eclipse.angus:jakarta.mail` from 2.0.4 to 2.0.5

Updates `jakarta.xml.bind:jakarta.xml.bind-api` from 4.0.2 to 4.0.4
- [Release notes](https://github.com/jakartaee/jaxb-api/releases)
- [Commits](https://github.com/jakartaee/jaxb-api/compare/4.0.2...4.0.4)

Updates `org.glassfish.jaxb:jaxb-runtime` from 4.0.5 to 4.0.6

---
updated-dependencies:
- dependency-name: jakarta.activation:jakarta.activation-api
  dependency-version: 2.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
- dependency-name: jakarta.mail:jakarta.mail-api
  dependency-version: 2.1.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
- dependency-name: org.eclipse.angus:jakarta.mail
  dependency-version: 2.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
- dependency-name: jakarta.xml.bind:jakarta.xml.bind-api
  dependency-version: 4.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
- dependency-name: org.glassfish.jaxb:jaxb-runtime
  dependency-version: 4.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:03:41 +00:00
dependabot[bot]
225cfd8c74 Bump org.apache.commons:commons-lang3 in the apache-commons group
Bumps the apache-commons group with 1 update: org.apache.commons:commons-lang3.


Updates `org.apache.commons:commons-lang3` from 3.18.0 to 3.19.0

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-lang3
  dependency-version: 3.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:03:08 +00:00
dependabot[bot]
346f4dbe8b Bump the test-tools group with 3 updates
Bumps the test-tools group with 3 updates: [com.h2database:h2](https://github.com/h2database/h2database), [org.xmlunit:xmlunit-core](https://github.com/xmlunit/xmlunit) and [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client).


Updates `com.h2database:h2` from 2.3.232 to 2.4.240
- [Release notes](https://github.com/h2database/h2database/releases)
- [Commits](https://github.com/h2database/h2database/compare/version-2.3.232...version-2.4.240)

Updates `org.xmlunit:xmlunit-core` from 2.10.3 to 2.10.4
- [Release notes](https://github.com/xmlunit/xmlunit/releases)
- [Changelog](https://github.com/xmlunit/xmlunit/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/xmlunit/xmlunit/compare/v2.10.3...v2.10.4)

Updates `org.apache.httpcomponents.client5:httpclient5` from 5.5 to 5.5.1
- [Changelog](https://github.com/apache/httpcomponents-client/blob/rel/v5.5.1/RELEASE_NOTES.txt)
- [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.5...rel/v5.5.1)

---
updated-dependencies:
- dependency-name: com.h2database:h2
  dependency-version: 2.4.240
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: test-tools
- dependency-name: org.xmlunit:xmlunit-core
  dependency-version: 2.10.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: test-tools
- dependency-name: org.apache.httpcomponents.client5:httpclient5
  dependency-version: 5.5.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: test-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:02:44 +00:00
dependabot[bot]
e535c27685 Bump the build-tools group with 10 updates
Bumps the build-tools group with 10 updates:

| Package | From | To |
| --- | --- | --- |
| [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) | `2.41.0` | `2.42.0` |
| [com.google.errorprone:error_prone_annotations](https://github.com/google/error-prone) | `2.41.0` | `2.42.0` |
| [com.github.spotbugs:spotbugs](https://github.com/spotbugs/spotbugs) | `4.9.4` | `4.9.6` |
| [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) | `3.14.0` | `3.14.1` |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) | `3.5.3` | `3.5.4` |
| [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) | `3.5.3` | `3.5.4` |
| [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) | `4.9.4.2` | `4.9.6.0` |
| [org.sonatype.central:central-publishing-maven-plugin](https://github.com/sonatype/central-publishing-maven-plugin) | `0.8.0` | `0.9.0` |
| [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) | `3.11.3` | `3.12.0` |
| [org.codehaus.mojo:license-maven-plugin](https://github.com/mojohaus/license-maven-plugin) | `2.6.0` | `2.7.0` |


Updates `com.google.errorprone:error_prone_core` from 2.41.0 to 2.42.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.41.0...v2.42.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.41.0 to 2.42.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.41.0...v2.42.0)

Updates `com.github.spotbugs:spotbugs` from 4.9.4 to 4.9.6
- [Release notes](https://github.com/spotbugs/spotbugs/releases)
- [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.4...4.9.6)

Updates `com.google.errorprone:error_prone_annotations` from 2.41.0 to 2.42.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.41.0...v2.42.0)

Updates `org.apache.maven.plugins:maven-compiler-plugin` from 3.14.0 to 3.14.1
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.0...maven-compiler-plugin-3.14.1)

Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.3...surefire-3.5.4)

Updates `org.apache.maven.plugins:maven-failsafe-plugin` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.3...surefire-3.5.4)

Updates `com.github.spotbugs:spotbugs-maven-plugin` from 4.9.4.2 to 4.9.6.0
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.9.4.2...spotbugs-maven-plugin-4.9.6.0)

Updates `org.sonatype.central:central-publishing-maven-plugin` from 0.8.0 to 0.9.0
- [Commits](https://github.com/sonatype/central-publishing-maven-plugin/commits)

Updates `org.apache.maven.plugins:maven-javadoc-plugin` from 3.11.3 to 3.12.0
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.3...maven-javadoc-plugin-3.12.0)

Updates `org.codehaus.mojo:license-maven-plugin` from 2.6.0 to 2.7.0
- [Release notes](https://github.com/mojohaus/license-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/license-maven-plugin/compare/2.6.0...2.7.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-version: 2.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-version: 2.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.github.spotbugs:spotbugs
  dependency-version: 4.9.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-version: 2.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-version: 3.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-version: 4.9.6.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: org.sonatype.central:central-publishing-maven-plugin
  dependency-version: 0.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-version: 3.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.codehaus.mojo:license-maven-plugin
  dependency-version: 2.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 02:02:18 +00:00
Tim Donohue
0e0bb3cefb Merge pull request #11330 from JohnnyMendesC/fix/9694-metadata-that-use-year-as-qualifier
Fix (#9694): Change Solr dynamic field *.year to *_year
2025-09-30 16:42:21 -05:00
Tim Donohue
d035d41c6e Merge pull request #11328 from TexasDigitalLibrary/ds-10831-fix-user-summary
Fix Hibernate syntax bug in the CollectionDAO
2025-09-30 16:07:04 -05:00
Tim Donohue
dbcc9f1dba Merge pull request #11329 from TexasDigitalLibrary/ds-10831-fix-item-summary
Fix Hibernate syntax bugs in the CollectionDAO and BitstreamDAO
2025-09-30 14:26:02 -05:00
Tim Donohue
4efcd69d95 Merge pull request #11341 from tdonohue/min_docker_caching
[GitHub Actions] Decrease cache size of our Docker images in GitHub Actions
2025-09-23 15:51:51 -05:00
Tim Donohue
eaba6fb44d Merge pull request #11337 from saschaszott/saschaszott-patch-23
Remove ratingreviewaction in workflow-actions.xml
2025-09-23 13:47:18 -05:00
Sascha Szott
ddccb342d6 remove ratingreviewaction in test context 2025-09-23 16:25:33 +02:00
Sascha Szott
770ab0ca79 remove ratingreviewaction bean in workflow-actions.xml 2025-09-23 16:23:57 +02:00
Tim Donohue
1f8e290a1e Change to "mode=min" in order to minimize our cache size for Docker images 2025-09-22 16:57:20 -05:00
nwoodward
69c6d27322 fix Hibernate bug 2025-09-19 15:43:44 -05:00
nwoodward
088463c94b fix Hibernate bugs 2025-09-19 15:43:26 -05:00
nwoodward
b8812aad45 lint fixes 2025-09-19 14:06:52 -05:00
nwoodward
d9cbb96655 fix hibernate syntax bug 2025-09-19 14:06:09 -05:00
JohnnyMendesC
9fc163fbda Fix (#9694): Change Solr dynamic field *.year to *_year 2025-09-19 12:50:37 -03:00
nwoodward
e7042ffe3d added limit to number of typed links to bitstreams to display, falls back to Link Sets if limit is exceeded 2025-09-17 11:46:05 -05:00
Tim Donohue
2aa06e1214 Merge pull request #11261 from JohnnyMendesC/fix/11033-solr-logging-thumbnail-download-stats
Fix/11033 solr logging thumbnail download stats
2025-09-12 14:45:48 -05:00
Tim Donohue
ee7cfae878 Merge pull request #10756 from dataquest-dev/dtq/fix-subscription-authorization2
The subscription sends an email with `No items` however there are changes in the collection
2025-09-12 14:18:36 -05:00
Tim Donohue
486bfaec95 Merge pull request #10540 from atmire/fix-issue-10536_relation-field-requiredissue-main
Fix issue 10536 relation field required issue
2025-09-12 14:05:07 -05:00
Tim Donohue
b4b4bb7578 Merge pull request #10555 from atmire/w2p-129616_fix-sort-AbstractHibernateDAO_contribute-main
Fix sort order in AbstractHibernateDAO findByX
2025-09-12 12:29:54 -05:00
Tim Donohue
2194da56af Merge pull request #11253 from pilasou/main
Add ORCID document type
2025-09-11 10:59:04 -05:00
Tim Donohue
1166b6ac43 Merge pull request #10929 from atmire/w2p-132206_saf-inputstream-leaks
Fix SAF Import Open connection leak
2025-09-10 14:26:34 -05:00
Tim Donohue
56de842ec1 Merge pull request #11263 from lareferencia/fix-unable-to-select-researcher-profile-as-author
Add familyName and givenName when creating profile author and fix EPe…
2025-09-10 14:22:42 -05:00
Tim Donohue
5fa7e4660b Merge pull request #11277 from DSpace/dependabot/maven/org.xhtmlrenderer-flying-saucer-pdf-9.13.3
Bump org.xhtmlrenderer:flying-saucer-pdf from 9.13.1 to 9.13.3
2025-09-10 09:51:25 -05:00
Tim Donohue
57237f546b Merge pull request #11210 from DSpace/dependabot/maven/org.ehcache-ehcache-3.11.1
Bump org.ehcache:ehcache from 3.10.8 to 3.11.1
2025-09-10 09:48:57 -05:00
Tim Donohue
53947d9911 Merge pull request #11278 from DSpace/dependabot/maven/com.amazonaws-aws-java-sdk-s3-1.12.791
Bump com.amazonaws:aws-java-sdk-s3 from 1.12.788 to 1.12.791
2025-09-10 09:41:19 -05:00
Tim Donohue
fc88852b90 Merge pull request #11280 from DSpace/dependabot/maven/com.github.spotbugs-spotbugs-maven-plugin-4.9.4.2
Bump com.github.spotbugs:spotbugs-maven-plugin from 4.9.4.0 to 4.9.4.2
2025-09-09 17:09:54 -05:00
Tim Donohue
d624133de9 Merge pull request #11279 from DSpace/dependabot/maven/net.minidev-json-smart-2.6.0
Bump net.minidev:json-smart from 2.5.2 to 2.6.0
2025-09-09 17:06:18 -05:00
Tim Donohue
8ed2a88eca Merge pull request #11281 from DSpace/dependabot/maven/org.checkerframework-checker-qual-3.50.0
Bump org.checkerframework:checker-qual from 3.49.5 to 3.50.0
2025-09-09 17:01:44 -05:00
Tim Donohue
21eddd0f2d Merge pull request #11211 from DSpace/dependabot/maven/jersey.version-3.1.11
Bump jersey.version from 3.1.10 to 3.1.11
2025-09-09 16:58:15 -05:00
Tim Donohue
2ae2364f26 Merge pull request #11170 from minurmin/DS-3796
DS-3796 Fix dates for Not to be processed checker-emailer report
2025-09-09 16:14:06 -05:00
Tim Donohue
a9e49cf59b Merge pull request #11154 from JohnnyMendesC/fix/9774-csrf-token-not-generated-spring-security-6
fix(#9774): Restore eager loading for CSRF tokens
2025-09-08 16:53:29 -05:00
dependabot[bot]
af8ffdd73f Bump org.checkerframework:checker-qual from 3.49.5 to 3.50.0
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.49.5 to 3.50.0.
- [Release notes](https://github.com/typetools/checker-framework/releases)
- [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.49.5...checker-framework-3.50.0)

---
updated-dependencies:
- dependency-name: org.checkerframework:checker-qual
  dependency-version: 3.50.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 20:39:50 +00:00
dependabot[bot]
9df84b959d Bump com.github.spotbugs:spotbugs-maven-plugin from 4.9.4.0 to 4.9.4.2
Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.9.4.0 to 4.9.4.2.
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.9.4.0...spotbugs-maven-plugin-4.9.4.2)

---
updated-dependencies:
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-version: 4.9.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 20:39:07 +00:00
dependabot[bot]
2ef80b4581 Bump net.minidev:json-smart from 2.5.2 to 2.6.0
Bumps [net.minidev:json-smart](https://github.com/netplex/json-smart-v2) from 2.5.2 to 2.6.0.
- [Release notes](https://github.com/netplex/json-smart-v2/releases)
- [Commits](https://github.com/netplex/json-smart-v2/compare/2.5.2...v2.6.0)

---
updated-dependencies:
- dependency-name: net.minidev:json-smart
  dependency-version: 2.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 20:38:49 +00:00
dependabot[bot]
3d78aa06cd Bump com.amazonaws:aws-java-sdk-s3 from 1.12.788 to 1.12.791
Bumps [com.amazonaws:aws-java-sdk-s3](https://github.com/aws/aws-sdk-java) from 1.12.788 to 1.12.791.
- [Changelog](https://github.com/aws/aws-sdk-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-java/compare/1.12.788...1.12.791)

---
updated-dependencies:
- dependency-name: com.amazonaws:aws-java-sdk-s3
  dependency-version: 1.12.791
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 20:38:35 +00:00
dependabot[bot]
357bad57ba Bump org.xhtmlrenderer:flying-saucer-pdf from 9.13.1 to 9.13.3
Bumps [org.xhtmlrenderer:flying-saucer-pdf](https://github.com/flyingsaucerproject/flyingsaucer) from 9.13.1 to 9.13.3.
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.13.1...v9.13.3)

---
updated-dependencies:
- dependency-name: org.xhtmlrenderer:flying-saucer-pdf
  dependency-version: 9.13.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 20:38:08 +00:00
Tim Donohue
a05267e114 Merge pull request #11171 from 4Science/task/main/DURACOM-392
Error in file upload after security fixes
2025-09-08 12:12:33 -05:00
Tim Donohue
d0e84e5080 Merge pull request #11260 from JohnnyMendesC/fix/11191-header-content-disposition-breaks-filename-in-safari
fix(#11191): Align Content-Disposition with RFC 5987/6266
2025-09-05 16:36:42 -05:00
Tim Donohue
0c7e72ad24 Merge pull request #11245 from atmire/w2p-133552_AIP-packager-bitstream-url-fix-main
AIP Packager bitstream URL fix
2025-09-05 16:18:38 -05:00
JohnnyMendesC
c80359bc71 fix(#11033): Prevent logging of ignored bundles in Solr stats 2025-09-05 16:42:10 -03:00
Jesiel Viana
df0dd01776 Add familyName and givenName when creating profile author and fix EPerson#getName 2025-09-05 15:33:15 -03:00
Tim Donohue
84cdbb5b9e Merge pull request #10783 from saschaszott/saschaszott-patch-19
Switch to filter query for retrieving entity types authorized for submit
2025-09-05 10:37:00 -05:00
JohnnyMendesC
7613ba269b fix(#11191): Align Content-Disposition with RFC 5987/6266 2025-09-04 11:46:20 -03:00
kshepherd
02f43a00db Merge pull request #10142 from TexasDigitalLibrary/make-usage-report-limits-configurable
DS-10133: make several usage statistics parameters configurable
2025-09-04 16:31:29 +02:00
Piaget Bouaka Donfack
6234103d2c [DURACOM-392] Error in file upload after security fixes 2025-09-04 09:41:32 +02:00
Jesiel Viana
114b181333 Update DSpace to use ROR API version 2 (#11041)
* Update README.md

* Update DSpace integration to use ROR API v2

* refactoring and add addressLocality metadata

* revert the README

* update integration tests to use ROR API v2

* increase request timeout for ROR API
2025-09-03 15:55:45 -05:00
Tim Donohue
6ae41a6589 Merge pull request #11250 from DSpace/backport-11174-to-main
[Port main] Fix #11074 export simple archive format when item has no collection
2025-09-03 15:47:12 -05:00
Pierre Lasou
e213f5b305 Add ORCID document type
Addiing new mappings between ORCID document type and DSpace default type.
2025-09-03 15:50:45 -04:00
Martin Walk
0e55e70f16 Fix #11074 export simple archive format with no collection
(cherry picked from commit d282f92427)
2025-09-03 19:46:14 +00:00
Tim Donohue
bc5df89155 Merge pull request #11200 from alexandrevryghem/fix-database-connection-leak-on-login_contribute-main
Fix database connection leak on failed login attempts
2025-09-03 14:08:42 -05:00
Kristof De Langhe
5fbd00bcf4 Merge branch 'w2p-133552_AIP-packager-bitstream-url-fix-7.6' into w2p-133552_AIP-packager-bitstream-url-fix-main 2025-09-03 11:56:50 +02:00
Kristof De Langhe
93240941d3 133552: unused import 2025-09-03 11:56:42 +02:00
Kristof De Langhe
636076f080 Merge branch 'w2p-133552_AIP-packager-bitstream-url-fix-7.6' into w2p-133552_AIP-packager-bitstream-url-fix-main 2025-09-03 11:37:24 +02:00
Kristof De Langhe
11da562ea4 133552: AIP packager bitstream url fix 2025-09-03 11:35:05 +02:00
Alexandre Vryghem
0d8eec4698 Merge branch 'fix-database-connection-leak-on-login_contribute-7.6' 2025-09-02 21:34:18 +02:00
Tim Donohue
75cc1b48f4 Merge pull request #11195 from saschaszott/saschaszott-patch-22
Implement logging for index out-of-range in MetadataValueRemovePatchOperation
2025-09-02 14:34:15 -05:00
Alexandre Vryghem
0b0c9fc84c 133421: Removed database connection leak on unsuccessful login 2025-09-02 21:27:52 +02:00
Tim Donohue
2f864bbd14 Merge pull request #11206 from DSpace/dependabot/maven/jakarta-61e252c494
Bump the jakarta group with 2 updates
2025-09-02 13:17:29 -05:00
Tim Donohue
f1433cbc96 Merge pull request #11203 from DSpace/dependabot/maven/build-tools-e11e9b5c2b
Bump the build-tools group with 3 updates
2025-09-02 13:02:27 -05:00
Tim Donohue
a8b9019229 Merge pull request #11204 from DSpace/dependabot/maven/apache-commons-4538dd79bf
Bump commons-cli:commons-cli from 1.9.0 to 1.10.0 in the apache-commons group
2025-09-02 10:51:49 -05:00
Tim Donohue
a4f045015f Merge pull request #11209 from DSpace/dependabot/maven/jetty.version-9.4.58.v20250814
Bump jetty.version from 9.4.57.v20241219 to 9.4.58.v20250814
2025-09-02 10:49:26 -05:00
Tim Donohue
c0f6d3744b Merge pull request #11208 from DSpace/dependabot/maven/hibernate-603dfa8aab
Bump the hibernate group with 2 updates
2025-09-02 10:46:05 -05:00
Tim Donohue
45994313b0 Merge pull request #11207 from DSpace/dependabot/maven/spring-c1190e90ed
Bump the spring group with 28 updates
2025-09-02 10:41:10 -05:00
dependabot[bot]
796746e9aa Bump jersey.version from 3.1.10 to 3.1.11
Bumps `jersey.version` from 3.1.10 to 3.1.11.

Updates `org.glassfish.jersey.core:jersey-client` from 3.1.10 to 3.1.11

Updates `org.glassfish.jersey.inject:jersey-hk2` from 3.1.10 to 3.1.11

---
updated-dependencies:
- dependency-name: org.glassfish.jersey.core:jersey-client
  dependency-version: 3.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.glassfish.jersey.inject:jersey-hk2
  dependency-version: 3.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:28:05 +00:00
dependabot[bot]
aa762253ed Bump org.ehcache:ehcache from 3.10.8 to 3.11.1
Bumps [org.ehcache:ehcache](https://github.com/ehcache/ehcache3) from 3.10.8 to 3.11.1.
- [Release notes](https://github.com/ehcache/ehcache3/releases)
- [Commits](https://github.com/ehcache/ehcache3/compare/v3.10.8...v3.11.1)

---
updated-dependencies:
- dependency-name: org.ehcache:ehcache
  dependency-version: 3.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:25:11 +00:00
dependabot[bot]
a659010a77 Bump jetty.version from 9.4.57.v20241219 to 9.4.58.v20250814
Bumps `jetty.version` from 9.4.57.v20241219 to 9.4.58.v20250814.

Updates `org.eclipse.jetty:jetty-server` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty:jetty-deploy` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty:jetty-http` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty:jetty-io` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty:jetty-servlet` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty:jetty-util` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty:jetty-webapp` from 9.4.57.v20241219 to 9.4.58.v20250814

Updates `org.eclipse.jetty.http2:http2-common` from 9.4.57.v20241219 to 9.4.58.v20250814

---
updated-dependencies:
- dependency-name: org.eclipse.jetty:jetty-server
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-deploy
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-http
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-io
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-servlet
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-util
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-webapp
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty.http2:http2-common
  dependency-version: 9.4.58.v20250814
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:23:32 +00:00
dependabot[bot]
c704ccb20c Bump the hibernate group with 2 updates
Bumps the hibernate group with 2 updates: [org.hibernate.validator:hibernate-validator](https://github.com/hibernate/hibernate-validator) and [org.hibernate.validator:hibernate-validator-cdi](https://github.com/hibernate/hibernate-validator).


Updates `org.hibernate.validator:hibernate-validator` from 8.0.2.Final to 8.0.3.Final
- [Changelog](https://github.com/hibernate/hibernate-validator/blob/8.0.3.Final/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-validator/compare/8.0.2.Final...8.0.3.Final)

Updates `org.hibernate.validator:hibernate-validator-cdi` from 8.0.2.Final to 8.0.3.Final
- [Changelog](https://github.com/hibernate/hibernate-validator/blob/8.0.3.Final/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-validator/compare/8.0.2.Final...8.0.3.Final)

Updates `org.hibernate.validator:hibernate-validator-cdi` from 8.0.2.Final to 8.0.3.Final
- [Changelog](https://github.com/hibernate/hibernate-validator/blob/8.0.3.Final/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-validator/compare/8.0.2.Final...8.0.3.Final)

---
updated-dependencies:
- dependency-name: org.hibernate.validator:hibernate-validator
  dependency-version: 8.0.3.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: hibernate
- dependency-name: org.hibernate.validator:hibernate-validator-cdi
  dependency-version: 8.0.3.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: hibernate
- dependency-name: org.hibernate.validator:hibernate-validator-cdi
  dependency-version: 8.0.3.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: hibernate
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:23:08 +00:00
dependabot[bot]
faa8dbcc3e Bump the spring group with 28 updates
Bumps the spring group with 28 updates:

| Package | From | To |
| --- | --- | --- |
| [org.springframework:spring-orm](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-aop](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-context](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-context-support](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-tx](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-jdbc](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-expression](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework:spring-test](https://github.com/spring-projects/spring-framework) | `6.2.9` | `6.2.10` |
| [org.springframework.boot:spring-boot-starter-test](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-tomcat](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-cache](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-thymeleaf](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-security](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-web](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-data-rest](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-aop](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-actuator](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.boot:spring-boot-starter-log4j2](https://github.com/spring-projects/spring-boot) | `3.5.4` | `3.5.5` |
| [org.springframework.security:spring-security-core](https://github.com/spring-projects/spring-security) | `6.5.2` | `6.5.3` |
| [org.springframework.security:spring-security-web](https://github.com/spring-projects/spring-security) | `6.5.2` | `6.5.3` |
| [org.springframework.security:spring-security-test](https://github.com/spring-projects/spring-security) | `6.5.2` | `6.5.3` |
| [org.springframework.security:spring-security-saml2-service-provider](https://github.com/spring-projects/spring-security) | `6.5.2` | `6.5.3` |


Updates `org.springframework:spring-orm` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-core` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-beans` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-aop` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-context` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-context-support` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-tx` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-jdbc` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-web` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-webmvc` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-expression` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-test` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-core` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-beans` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-aop` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-context` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-context-support` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-tx` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-jdbc` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-web` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-webmvc` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-expression` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework:spring-test` from 6.2.9 to 6.2.10
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.9...v6.2.10)

Updates `org.springframework.boot:spring-boot-starter-test` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-tomcat` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-cache` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-thymeleaf` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-security` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-web` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-data-rest` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-aop` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-log4j2` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.security:spring-security-core` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.security:spring-security-web` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.security:spring-security-test` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.security:spring-security-saml2-service-provider` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.security:spring-security-web` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.boot:spring-boot-starter-tomcat` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.security:spring-security-test` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-cache` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-thymeleaf` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-security` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.security:spring-security-saml2-service-provider` from 6.5.2 to 6.5.3
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.2...6.5.3)

Updates `org.springframework.boot:spring-boot-starter-web` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-data-rest` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-aop` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

Updates `org.springframework.boot:spring-boot-starter-log4j2` from 3.5.4 to 3.5.5
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

---
updated-dependencies:
- dependency-name: org.springframework:spring-orm
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-core
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-beans
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-aop
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context-support
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-tx
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-jdbc
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-web
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-webmvc
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-expression
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-test
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-core
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-beans
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-aop
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context-support
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-tx
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-jdbc
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-web
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-webmvc
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-expression
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-test
  dependency-version: 6.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-test
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-tomcat
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-cache
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-security
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-data-rest
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-aop
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-actuator
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-log4j2
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-core
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-web
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-test
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-saml2-service-provider
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-web
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-tomcat
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-test
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-cache
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-security
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-saml2-service-provider
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-data-rest
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-aop
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-actuator
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-log4j2
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:22:58 +00:00
dependabot[bot]
bbc3da1991 Bump the jakarta group with 2 updates
Bumps the jakarta group with 2 updates: [jakarta.mail:jakarta.mail-api](https://github.com/jakartaee/mail-api) and org.eclipse.angus:jakarta.mail.


Updates `jakarta.mail:jakarta.mail-api` from 2.1.3 to 2.1.4
- [Release notes](https://github.com/jakartaee/mail-api/releases)
- [Commits](https://github.com/jakartaee/mail-api/compare/2.1.3...2.1.4)

Updates `org.eclipse.angus:jakarta.mail` from 2.0.3 to 2.0.4

---
updated-dependencies:
- dependency-name: jakarta.mail:jakarta.mail-api
  dependency-version: 2.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
- dependency-name: org.eclipse.angus:jakarta.mail
  dependency-version: 2.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: jakarta
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:19:15 +00:00
dependabot[bot]
60efd91e3e Bump commons-cli:commons-cli in the apache-commons group
Bumps the apache-commons group with 1 update: [commons-cli:commons-cli](https://github.com/apache/commons-cli).


Updates `commons-cli:commons-cli` from 1.9.0 to 1.10.0
- [Changelog](https://github.com/apache/commons-cli/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-cli/compare/rel/commons-cli-1.9.0...rel/commons-cli-1.10.0)

---
updated-dependencies:
- dependency-name: commons-cli:commons-cli
  dependency-version: 1.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:14:15 +00:00
dependabot[bot]
c87580b189 Bump the build-tools group with 3 updates
Bumps the build-tools group with 3 updates: [com.github.spotbugs:spotbugs](https://github.com/spotbugs/spotbugs), [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) and [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin).


Updates `com.github.spotbugs:spotbugs` from 4.9.3 to 4.9.4
- [Release notes](https://github.com/spotbugs/spotbugs/releases)
- [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.3...4.9.4)

Updates `com.github.spotbugs:spotbugs-maven-plugin` from 4.9.3.2 to 4.9.4.0
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.9.3.2...spotbugs-maven-plugin-4.9.4.0)

Updates `org.apache.maven.plugins:maven-javadoc-plugin` from 3.11.2 to 3.11.3
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.2...maven-javadoc-plugin-3.11.3)

---
updated-dependencies:
- dependency-name: com.github.spotbugs:spotbugs
  dependency-version: 4.9.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-version: 4.9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-version: 3.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 05:10:29 +00:00
Tim Donohue
b268eb3bf7 Merge pull request #11194 from danielcoelhocgu/fix-11192
Parse Solr facet range date and time with proper format
2025-08-25 11:04:49 -05:00
Sascha Szott
7692b02b12 Implement logging for index out-of-range
Add logging for out-of-range index when removing metadata values.
2025-08-25 14:16:56 +02:00
Daniel Coelho
98e3a16b42 Parse solr facet range date and time with proper format (fix #11192) 2025-08-25 09:06:49 -03:00
Tim Donohue
776872f6a3 Merge pull request #11160 from JohnnyMendesC/fix/8852-oai-statistics-prefix
fix(#8852): Statistics event processor now uses oaiPrefix instead of getHost
2025-08-21 16:15:07 -05:00
Tim Donohue
aba8caf252 Merge pull request #10298 from paulo-graca/master
Inferring URN type from values for related and alternate identifiers usage
2025-08-21 16:10:25 -05:00
Tim Donohue
9c0d460c94 Merge pull request #11155 from alanorth/checkstyle-java-arrays
checkstyle.xml: enforce Java-style arrays
2025-08-21 16:07:42 -05:00
kshepherd
0f08ab2e48 Merge pull request #11161 from alanorth/maven-version
dspace-api/pom.xml: remove build-helper-maven-plugin
2025-08-21 15:20:21 +02:00
Tim Donohue
867e056f4a Merge pull request #11168 from minurmin/DSpace-11167
Fix bean initialization with citation-page.enabled_communities
2025-08-20 16:36:06 -05:00
Tim Donohue
158ebbdbf6 Merge pull request #11166 from alanorth/codeql-action-v3
.github/workflows/codescan.yml: use codeql-action v3
2025-08-20 16:08:28 -05:00
Tim Donohue
6d9898c18f Merge pull request #11156 from atmire/w2p-133268_metadata-import-improved-error-log_contribute-main
Metadata import empty collection column check
2025-08-20 15:50:29 -05:00
JohnnyMendesC
ee13554226 style: Remove <P> tag from Javadoc comment per review 2025-08-19 17:00:11 -03:00
Stefano Maffei
6c3274630c [CST-21947] fix security fix 2025-08-18 17:03:51 +02:00
Miika Nurminen
fac888793c DS-3796 Fix dates for Not to be processed checker-emailer report
Based on 86de8c74a7 (ResultTypeInDateRange dates have already been fixed in upstream).
2025-08-18 13:19:12 +03:00
Miika Nurminen
3d530c87d4 Fix bean initialization error on Tomcat startup if citation-page.enabled_communities is set
Arrays.asList produces non-mutable list but with communities, sub-collections are added dynamically on initializaion.
2025-08-17 19:01:22 +03:00
Alan Orth
19f3535dfd .github/workflows/codescan.yml: use codeql-action v3
Version 2 was deprecated in January, 2024 after the release of v3.

See: https://github.blog/changelog/2025-01-10-code-scanning-codeql-action-v2-is-now-deprecated/
2025-08-17 11:56:13 +03:00
Alan Orth
de3170d4eb dspace-api/pom.xml: remove build-helper-maven-plugin
Remove the org.codehaus.mojo:build-helper-maven-plugin because the
`maven-version` property has been included by maven itself since
version 3.0.4. This fixes the following warning during build:

    [INFO] --- build-helper:3.6.1:maven-version (default) @ dspace-api ---
    [WARNING]  Goal 'maven-version' is deprecated: Maven since version 3.0.4 has such property build in: MNG-4112 <https://issues.apache.org/jira/browse/MNG-4112>. So goal can be removed.
2025-08-15 10:01:31 +03:00
JohnnyMendesC
c8fe80c22b fix(#8852): Statistics event processor now uses oaiPrefix instead of getHost 2025-08-14 17:08:34 -03:00
Alan Orth
0cc9485a1a Use Java-style array declarations
Convert all C-style array declarations to Java style.
2025-08-14 11:21:13 +03:00
Alan Orth
27b266d725 checkstyle.xml: enforce Java-style arrays
To quote Google's Java style guide:

> The square brackets form a part of the type, not the variable:
> String[] args, not String args[].

See: https://checkstyle.org/styleguides/google-java-style-20250426/javaguide.html
2025-08-14 11:21:13 +03:00
Alan Orth
90a4d5b0a9 Merge pull request #11147 from alanorth/tika-3 2025-08-14 10:53:05 +03:00
Alan Orth
4f8d084555 dspace-api: Update syntax for pdfbox 3.0.x 2025-08-14 10:06:05 +03:00
Alan Orth
22e0feeaca pom.xml: upgrade pdfbox and tika
Use latest pdfbox 3.0.5 and tika 3.2.2.

See: https://pdfbox.apache.org/3.0/migration.html
See: https://dist.apache.org/repos/dist/release/tika/3.2.2/CHANGES-3.2.2.txt
2025-08-14 10:05:49 +03:00
Joran De Braekeleer
f4e6f68be4 Merge branch 'main' into w2p-133268_metadata-import-improved-error-log_contribute-main 2025-08-13 13:39:34 +02:00
Joran De Braekeleer
b9513228d7 133268: Metadata import empty collection col check 2025-08-13 13:32:33 +02:00
JohnnyMendesC
36192794d9 fix(#9774): Restore eager loading for CSRF tokens 2025-08-12 17:20:49 -03:00
kshepherd
b1cf0da3de Merge pull request #11150 from im-shubham-vish/fix-9589
Fix for #9589 Incorrect Export of Search Results with Double Quotation Marks in DSpace 7. Reference PR #10103
2025-08-12 16:36:23 +02:00
im-shubham-vish
39a45f7f34 Make parse protected to make it override in MetadataExportSearch Add Test for Double Quoted Search CSV Export 2025-08-12 16:55:53 +05:30
Sascha Szott
ae4987110b additional lint fix due to trailing whitespace 2025-08-07 17:57:33 +02:00
Sascha Szott
0ad4212eb4 fix lint errors by removing trailing whitespaces 2025-08-07 17:38:09 +02:00
Sascha Szott
b693ec773b Merge branch 'main' into saschaszott-patch-19 2025-08-07 17:13:17 +02:00
Tim Donohue
27876c506c Merge pull request #10508 from dsteelma-umd/checksum-checker-checkpoint-fix
Fix checkpointing for DSpace "checker" command
2025-08-06 14:42:46 -05:00
Tim Donohue
5152605958 Merge pull request #2559 from the-library-code/DS-4370_structure_builder_improvement
DS-4370 - Allow Structure Builder to import beneath a parent community
2025-08-06 14:08:20 -05:00
Tim Donohue
d7b067e2e3 Merge pull request #11138 from 4Science/task/main/DURACOM-391
FIX uses dc.source for bitstream originalName tag
2025-08-06 13:37:26 -05:00
kshepherd
39b2d21dd0 Merge pull request #11131 from tdonohue/enhance_swordv1_ITs
Enhance SWORDv1 Integration Tests & fix WRITE Permissions error for submitters
2025-08-06 18:32:46 +02:00
Tim Donohue
52fda34f03 Merge pull request #10820 from the-library-code/fix/orcid-external-identifier-fix
ORCID Push: Fix SELF and PART_OF external identifier handling
2025-08-06 09:22:28 -05:00
Tim Donohue
c2d05891ab Fix WRITE permissions error when ingesting a new Item. Do not call "updateDSpaceObject" after calling "finishCreateItem" as the latter saves the object and removes submitter privileges from it. 2025-08-06 08:51:16 -05:00
Tim Donohue
0589011849 Add a deposit integration test for SWORDv1 based on the similar SWORDv2 test. 2025-08-06 08:50:41 -05:00
Vincenzo Mecca
f5c0c17c66 fix: uses dc.source for bitstream originalName tag
Refs: DURACOM-391, #1130
2025-08-06 13:00:11 +02:00
Tim Donohue
9e77f543e0 Merge pull request #10774 from the-library-code/9212_bundle_policy_inheritance
Inherit custom, non-admin policies when creating new bundles
2025-08-01 11:38:36 -05:00
Tim Donohue
9474bfc9ea Merge pull request #10490 from dsteelma-umd/bitstore-migration-checkpoint-fix
Fix checkpointing for bitstore migration
2025-07-31 15:52:26 -05:00
Kim Shepherd
5a03974e95 [DS-4370] Allow structure builder to use a "parent" community ID/handle 2025-07-31 18:38:11 +02:00
Tim Donohue
973a9ba44a Merge pull request #11117 from DSpace/dependabot/maven/apache-commons-592043e7a6
Bump the apache-commons group with 2 updates
2025-07-31 08:46:30 -05:00
Tim Donohue
65dbe51ed2 Merge pull request #11120 from DSpace/dependabot/maven/com.github.spotbugs-spotbugs-maven-plugin-4.9.3.2
Bump com.github.spotbugs:spotbugs-maven-plugin from 4.9.3.0 to 4.9.3.2
2025-07-30 17:08:35 -05:00
dependabot[bot]
17303a6b15 Bump com.github.spotbugs:spotbugs-maven-plugin from 4.9.3.0 to 4.9.3.2
Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.9.3.0 to 4.9.3.2.
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.9.3.0...spotbugs-maven-plugin-4.9.3.2)

---
updated-dependencies:
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-version: 4.9.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-30 18:42:22 +00:00
dependabot[bot]
3c69e03bae Bump the apache-commons group with 2 updates
Bumps the apache-commons group with 2 updates: [org.apache.commons:commons-compress](https://github.com/apache/commons-compress) and [org.apache.commons:commons-csv](https://github.com/apache/commons-csv).


Updates `org.apache.commons:commons-compress` from 1.27.1 to 1.28.0
- [Changelog](https://github.com/apache/commons-compress/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-compress/compare/rel/commons-compress-1.27.1...rel/commons-compress-1.28.0)

Updates `org.apache.commons:commons-csv` from 1.14.0 to 1.14.1
- [Changelog](https://github.com/apache/commons-csv/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-csv/compare/rel/commons-csv-1.14.0...rel/commons-csv-1.14.1)

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-version: 1.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
- dependency-name: org.apache.commons:commons-csv
  dependency-version: 1.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: apache-commons
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-30 18:40:46 +00:00
Alan Orth
f46ea7ba4c Merge pull request #11112 from tdonohue/change_dependabot_schedule 2025-07-30 11:38:42 -07:00
Tim Donohue
0fb2306226 Update dependabot to run monthly 2025-07-30 11:58:21 -05:00
Tim Donohue
34425200b4 Merge pull request #11093 from DSpace/dependabot/maven/spring-5824b4a15f
Bump the spring group across 1 directory with 28 updates
2025-07-30 11:10:28 -05:00
Paulo Graça
3d15f49f17 Merge branch 'DSpace:main' into master 2025-07-30 08:40:05 +01:00
Tim Donohue
41e121fc57 Merge pull request #11106 from DSpace/backport-11067-to-main
[Port main] Simple Log4j tests with in-memory log appender
2025-07-29 10:47:36 -05:00
Kim Shepherd
3e5e17e0a2 Add simple log4j WebappLoggingIT test
(cherry picked from commit 588c4ef4d2)
2025-07-29 14:16:23 +00:00
Tim Donohue
5ba304be09 Merge pull request #11077 from tdonohue/log4j_github_actions
Add basic logging tests to our docker deployment script in GitHub actions
2025-07-29 09:04:11 -05:00
Tim Donohue
f0da138022 Merge pull request #11058 from DSpace/dependabot/maven/org.xhtmlrenderer-flying-saucer-pdf-9.13.1
Bump org.xhtmlrenderer:flying-saucer-pdf from 9.12.0 to 9.13.1
2025-07-28 16:37:21 -05:00
Tim Donohue
03d4e06a79 Merge pull request #11091 from DSpace/dependabot/maven/org.apache.james-apache-mime4j-core-0.8.13
Bump org.apache.james:apache-mime4j-core from 0.8.12 to 0.8.13
2025-07-28 16:33:54 -05:00
Tim Donohue
4b231e0d49 Merge pull request #10930 from DSpace/dependabot/maven/test-tools-23e08ff3a5
Bump org.xmlunit:xmlunit-core from 2.10.2 to 2.10.3 in the test-tools group
2025-07-28 16:31:53 -05:00
Tim Donohue
27ebba541c Merge pull request #11008 from DSpace/dependabot/maven/build-tools-0ef32859ab
Bump the build-tools group across 1 directory with 6 updates
2025-07-28 16:11:00 -05:00
Tim Donohue
88a376f5d2 Merge branch 'dependabot/maven/build-tools-0ef32859ab' of github.com:DSpace/DSpace into dependabot/maven/build-tools-0ef32859ab 2025-07-28 15:32:12 -05:00
Tim Donohue
0f1ae92d21 Fix checkstyle indentation issue 2025-07-28 15:31:09 -05:00
Tim Donohue
fe6ea7e28d Fix errorprone discovered issues. Many tests are missing @Test annotation. Once enabled, a broken test was found & fixed in WorkflowItemRestRepositoryIT. 2025-07-28 15:29:32 -05:00
dependabot[bot]
31fa65f0d3 Bump the build-tools group across 1 directory with 6 updates
Bumps the build-tools group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) | `2.38.0` | `2.39.0` |
| [com.google.errorprone:error_prone_annotations](https://github.com/google/error-prone) | `2.38.0` | `2.39.0` |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) | `10.25.0` | `10.26.1` |
| [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) | `3.5.0` | `3.6.0` |
| [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) | `3.2.7` | `3.2.8` |
| [org.codehaus.mojo:license-maven-plugin](https://github.com/mojohaus/license-maven-plugin) | `2.5.0` | `2.6.0` |



Updates `com.google.errorprone:error_prone_core` from 2.38.0 to 2.39.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.38.0...v2.39.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.38.0 to 2.39.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.38.0...v2.39.0)

Updates `com.puppycrawl.tools:checkstyle` from 10.25.0 to 10.26.1
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.25.0...checkstyle-10.26.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.38.0 to 2.39.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.38.0...v2.39.0)

Updates `org.apache.maven.plugins:maven-enforcer-plugin` from 3.5.0 to 3.6.0
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.5.0...enforcer-3.6.0)

Updates `org.apache.maven.plugins:maven-gpg-plugin` from 3.2.7 to 3.2.8
- [Release notes](https://github.com/apache/maven-gpg-plugin/releases)
- [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.7...maven-gpg-plugin-3.2.8)

Updates `org.codehaus.mojo:license-maven-plugin` from 2.5.0 to 2.6.0
- [Release notes](https://github.com/mojohaus/license-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/license-maven-plugin/compare/2.5.0...2.6.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-version: 2.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-version: 2.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.26.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-version: 2.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-gpg-plugin
  dependency-version: 3.2.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: org.codehaus.mojo:license-maven-plugin
  dependency-version: 2.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 19:42:29 +00:00
Tim Donohue
631b2f2656 Merge pull request #11099 from tdonohue/remove_pgcrypto_from_docker
[Docker] Remove all usages/references to 'pgcrypto'. Use official Postgres image in Docker install.
2025-07-28 12:41:59 -05:00
Tim Donohue
e7e1762cdf Bug Fix: External images always need to have a hardcoded registroy (in this case docker.io) as they exist in that specific registry. 2025-07-28 12:10:01 -05:00
Tim Donohue
ff58158e15 Correct all other references to old dspace-postgres-pgcrypto images. We now only have a dspace-postgres-loadsql which is used for DB restoration. 2025-07-28 11:32:16 -05:00
Tim Donohue
4835377f01 Switch to using the official Postgres image 2025-07-28 11:32:16 -05:00
Tim Donohue
86d2a0aa33 Remove dspace-postgres-pgcrypto. Rename dspace-postgres-pgcrypto-curl to dspace-postgres-loadsql 2025-07-28 11:32:16 -05:00
Alan Orth
688af08b85 Merge pull request #11096 from DSpace/dependabot/maven/com.opencsv-opencsv-5.12.0 2025-07-28 09:29:11 -07:00
Tim Donohue
c042d5b630 Merge pull request #10871 from ciscocarvalho/remove-pgcrypto
Remove pgcrypto checks
2025-07-28 09:58:39 -05:00
Tim Donohue
6aa9d37370 Merge pull request #11055 from DSpace/dependabot/maven/com.amazonaws-aws-java-sdk-s3-1.12.788
Bump com.amazonaws:aws-java-sdk-s3 from 1.12.785 to 1.12.788
2025-07-28 08:58:02 -05:00
Tim Donohue
6915873f67 Merge pull request #11094 from DSpace/dependabot/maven/apache-commons-7e5b090d5c
Bump the apache-commons group across 1 directory with 5 updates
2025-07-28 08:56:00 -05:00
Tim Donohue
39d482b755 Merge pull request #10902 from DSpace/dependabot/maven/fasterxml-7fbc8e9bec
Bump the fasterxml group with 4 updates
2025-07-28 08:51:45 -05:00
dependabot[bot]
682a899d37 Bump com.opencsv:opencsv from 5.11.1 to 5.12.0
Bumps com.opencsv:opencsv from 5.11.1 to 5.12.0.

---
updated-dependencies:
- dependency-name: com.opencsv:opencsv
  dependency-version: 5.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 04:06:59 +00:00
dependabot[bot]
b2248fd977 Bump the build-tools group across 1 directory with 6 updates
Bumps the build-tools group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [com.google.errorprone:error_prone_core](https://github.com/google/error-prone) | `2.38.0` | `2.39.0` |
| [com.google.errorprone:error_prone_annotations](https://github.com/google/error-prone) | `2.38.0` | `2.39.0` |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) | `10.25.0` | `10.26.1` |
| [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) | `3.5.0` | `3.6.0` |
| [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) | `3.2.7` | `3.2.8` |
| [org.codehaus.mojo:license-maven-plugin](https://github.com/mojohaus/license-maven-plugin) | `2.5.0` | `2.6.0` |



Updates `com.google.errorprone:error_prone_core` from 2.38.0 to 2.39.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.38.0...v2.39.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.38.0 to 2.39.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.38.0...v2.39.0)

Updates `com.puppycrawl.tools:checkstyle` from 10.25.0 to 10.26.1
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.25.0...checkstyle-10.26.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.38.0 to 2.39.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.38.0...v2.39.0)

Updates `org.apache.maven.plugins:maven-enforcer-plugin` from 3.5.0 to 3.6.0
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.5.0...enforcer-3.6.0)

Updates `org.apache.maven.plugins:maven-gpg-plugin` from 3.2.7 to 3.2.8
- [Release notes](https://github.com/apache/maven-gpg-plugin/releases)
- [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.7...maven-gpg-plugin-3.2.8)

Updates `org.codehaus.mojo:license-maven-plugin` from 2.5.0 to 2.6.0
- [Release notes](https://github.com/mojohaus/license-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/license-maven-plugin/compare/2.5.0...2.6.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-version: 2.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-version: 2.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.26.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-version: 2.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: org.apache.maven.plugins:maven-gpg-plugin
  dependency-version: 3.2.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: org.codehaus.mojo:license-maven-plugin
  dependency-version: 2.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 03:57:31 +00:00
dependabot[bot]
7f2db6a489 Bump the fasterxml group with 4 updates
Bumps the fasterxml group with 4 updates: [com.fasterxml.jackson.core:jackson-annotations](https://github.com/FasterXML/jackson), [com.fasterxml.jackson.core:jackson-core](https://github.com/FasterXML/jackson-core), [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) and com.fasterxml.jackson.datatype:jackson-datatype-jsr310.


Updates `com.fasterxml.jackson.core:jackson-annotations` from 2.19.0 to 2.19.1
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.core:jackson-core` from 2.19.0 to 2.19.1
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.19.0...jackson-core-2.19.1)

Updates `com.fasterxml.jackson.core:jackson-core` from 2.19.0 to 2.19.1
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.19.0...jackson-core-2.19.1)

Updates `com.fasterxml.jackson.core:jackson-databind` from 2.19.0 to 2.19.1
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.19.0 to 2.19.1

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.19.0 to 2.19.1

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson.core:jackson-annotations
  dependency-version: 2.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: fasterxml
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-version: 2.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: fasterxml
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-version: 2.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: fasterxml
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-version: 2.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: fasterxml
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310
  dependency-version: 2.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: fasterxml
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310
  dependency-version: 2.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: fasterxml
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 03:52:44 +00:00
dependabot[bot]
79f5b80c0b Bump the apache-commons group across 1 directory with 5 updates
Bumps the apache-commons group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [commons-codec:commons-codec](https://github.com/apache/commons-codec) | `1.18.0` | `1.19.0` |
| [commons-io:commons-io](https://github.com/apache/commons-io) | `2.19.0` | `2.20.0` |
| org.apache.commons:commons-lang3 | `3.17.0` | `3.18.0` |
| [org.apache.commons:commons-text](https://github.com/apache/commons-text) | `1.13.1` | `1.14.0` |
| commons-validator:commons-validator | `1.9.0` | `1.10.0` |



Updates `commons-codec:commons-codec` from 1.18.0 to 1.19.0
- [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.18.0...rel/commons-codec-1.19.0)

Updates `commons-io:commons-io` from 2.19.0 to 2.20.0
- [Changelog](https://github.com/apache/commons-io/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-io/compare/rel/commons-io-2.19.0...rel/commons-io-2.20.0)

Updates `org.apache.commons:commons-lang3` from 3.17.0 to 3.18.0

Updates `org.apache.commons:commons-text` from 1.13.1 to 1.14.0
- [Changelog](https://github.com/apache/commons-text/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-text/compare/rel/commons-text-1.13.1...rel/commons-text-1.14.0)

Updates `commons-validator:commons-validator` from 1.9.0 to 1.10.0

---
updated-dependencies:
- dependency-name: commons-codec:commons-codec
  dependency-version: 1.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
- dependency-name: commons-io:commons-io
  dependency-version: 2.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
- dependency-name: org.apache.commons:commons-lang3
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
- dependency-name: org.apache.commons:commons-text
  dependency-version: 1.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
- dependency-name: commons-validator:commons-validator
  dependency-version: 1.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: apache-commons
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 03:51:46 +00:00
dependabot[bot]
f9901ba995 Bump the spring group across 1 directory with 28 updates
Bumps the spring group with 28 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [org.springframework:spring-orm](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-aop](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-context](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-context-support](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-tx](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-jdbc](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-expression](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework:spring-test](https://github.com/spring-projects/spring-framework) | `6.2.8` | `6.2.9` |
| [org.springframework.boot:spring-boot-starter-test](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-tomcat](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-cache](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-thymeleaf](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-security](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-web](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-data-rest](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-aop](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-actuator](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.boot:spring-boot-starter-log4j2](https://github.com/spring-projects/spring-boot) | `3.5.3` | `3.5.4` |
| [org.springframework.security:spring-security-core](https://github.com/spring-projects/spring-security) | `6.5.1` | `6.5.2` |
| [org.springframework.security:spring-security-web](https://github.com/spring-projects/spring-security) | `6.5.1` | `6.5.2` |
| [org.springframework.security:spring-security-test](https://github.com/spring-projects/spring-security) | `6.5.1` | `6.5.2` |
| [org.springframework.security:spring-security-saml2-service-provider](https://github.com/spring-projects/spring-security) | `6.5.1` | `6.5.2` |



Updates `org.springframework:spring-orm` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-core` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-beans` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-aop` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-context` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-context-support` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-tx` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-jdbc` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-web` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-webmvc` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-expression` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-test` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-core` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-beans` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-aop` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-context` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-context-support` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-tx` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-jdbc` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-web` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-webmvc` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-expression` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework:spring-test` from 6.2.8 to 6.2.9
- [Release notes](https://github.com/spring-projects/spring-framework/releases)
- [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.9)

Updates `org.springframework.boot:spring-boot-starter-test` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-tomcat` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-cache` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-thymeleaf` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-security` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-web` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-data-rest` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-aop` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-log4j2` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.security:spring-security-core` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.security:spring-security-web` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.security:spring-security-test` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.security:spring-security-saml2-service-provider` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.security:spring-security-web` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.boot:spring-boot-starter-tomcat` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.security:spring-security-test` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-cache` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-thymeleaf` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-security` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.security:spring-security-saml2-service-provider` from 6.5.1 to 6.5.2
- [Release notes](https://github.com/spring-projects/spring-security/releases)
- [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc)
- [Commits](https://github.com/spring-projects/spring-security/compare/6.5.1...6.5.2)

Updates `org.springframework.boot:spring-boot-starter-web` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-data-rest` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-aop` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

Updates `org.springframework.boot:spring-boot-starter-log4j2` from 3.5.3 to 3.5.4
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

---
updated-dependencies:
- dependency-name: org.springframework:spring-orm
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-core
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-beans
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-aop
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context-support
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-tx
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-jdbc
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-web
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-webmvc
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-expression
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-test
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-core
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-beans
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-aop
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-context-support
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-tx
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-jdbc
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-web
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-webmvc
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-expression
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework:spring-test
  dependency-version: 6.2.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-test
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-tomcat
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-cache
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-security
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-data-rest
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-aop
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-actuator
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-log4j2
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-core
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-web
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-test
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-saml2-service-provider
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-web
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-tomcat
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-test
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-cache
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-security
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.security:spring-security-saml2-service-provider
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-data-rest
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-aop
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-actuator
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
- dependency-name: org.springframework.boot:spring-boot-starter-log4j2
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: spring
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 03:51:34 +00:00
dependabot[bot]
f6de411f7f Bump org.apache.james:apache-mime4j-core from 0.8.12 to 0.8.13
Bumps org.apache.james:apache-mime4j-core from 0.8.12 to 0.8.13.

---
updated-dependencies:
- dependency-name: org.apache.james:apache-mime4j-core
  dependency-version: 0.8.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 03:49:20 +00:00
dependabot[bot]
df552d2125 Bump org.xmlunit:xmlunit-core in the test-tools group
---
updated-dependencies:
- dependency-name: org.xmlunit:xmlunit-core
  dependency-version: 2.10.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: test-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 03:07:03 +00:00
Tim Donohue
96620ecada Merge pull request #11082 from DSpace/revert-10357-saschaszott-patch-8
Revert "fixed shared memory warnings on Solr startup (when Solr is running in Docker container)"
2025-07-25 14:53:14 -05:00
Tim Donohue
e724f5ccc7 Revert "fixed shared memory warnings on Solr startup (when Solr is running in Docker container)" 2025-07-25 14:21:31 -05:00
Tim Donohue
b51f579fc7 Merge pull request #11075 from mwoodiupui/my-11042
Avoid injection vulnerability in controlled vocabulary lookup
2025-07-25 13:47:52 -05:00
Tim Donohue
932f733f22 Merge pull request #10357 from saschaszott/saschaszott-patch-8
fixed shared memory warnings on Solr startup (when Solr is running in Docker container)
2025-07-25 13:39:25 -05:00
Tim Donohue
8008e98ca7 Add tests for backend logging to docker deployment tests 2025-07-25 12:10:35 -05:00
Mark H. Wood
dac494191c Correct some assumptions about what should be quoted. 2025-07-24 14:01:57 -04:00
Mark H. Wood
7deaf1cca5 Variables in XPath expressions should not be quoted.
Documentation cleanup.
Clean up many IDE warnings.
2025-07-24 11:51:53 -04:00
Mark H. Wood
c781ba2780 'No match' should be test failure, not index error. 2025-07-24 08:32:50 -04:00
Tim Donohue
00dfa68639 Merge pull request #10356 from atmire/w2p-124817_provide-pubmed-api-key
Live Import - PubMed - support optional apiKey config
2025-07-23 12:31:03 -05:00
Tim Donohue
0bd67df1f8 Merge tag 'dspace-7.6.5'
[maven-release-plugin] copy for tag dspace-7.6.5
2025-07-22 16:03:36 -05:00
Tim Donohue
6e8b6cc33a [maven-release-plugin] prepare release dspace-7.6.5 2025-07-22 15:03:04 -05:00
Tim Donohue
479cb76885 Minor updates to LICENSES_THIRD_PARTY for 7.6.5 release 2025-07-22 14:42:47 -05:00
Tim Donohue
5f291400b3 Merge pull request #11066 from tdonohue/port_11063_to_7x
[Port dspace-7_x] Fix several unit/integration test failures that only occur on Windows
2025-07-22 09:34:56 -05:00
kshepherd
867b6eb58d Merge pull request #11025 from DSpace/dependabot/maven/log4j.version-2.25.1
Bump log4j.version from 2.24.3 to 2.25.1
2025-07-22 16:27:03 +02:00
kshepherd
1bd4da3899 Merge pull request #11028 from DSpace/dependabot/maven/dspace-7_x/log4j.version-2.25.1
Bump log4j.version from 2.25.0 to 2.25.1
2025-07-22 16:23:59 +02:00
Tim Donohue
15b3f314a3 Force UTF-8 encoding in all tests. This fixes several test failures when running tests from Windows commandline because Windows doesn't default to using UTF-8. 2025-07-22 08:59:50 -05:00
Tim Donohue
28686fc48a Improve logging in AbstractLiveImportIntegrationTest (to make tests easier to debug). Replace obscure StringInputStream (from Ant) with IOUtils.toInputStream 2025-07-22 08:59:44 -05:00
Tim Donohue
d2c120bd8b Fix broken tests on Windows by using Paths to split file path instead of regex. Also switch to in-memory s3mock because Windows cannot cleanup created files successfully. 2025-07-22 08:59:39 -05:00
Tim Donohue
39fb2afba1 Update test to no longer assume 127.0.0.1 will always respond with "localhost" as the hostname. On my machine it does not. 2025-07-22 08:59:34 -05:00
kshepherd
46e80613f1 Merge pull request #11063 from tdonohue/fix_tests_on_windows
Fix several unit/integration test failures that only occur on Windows
2025-07-22 11:26:32 +02:00
Tim Donohue
d5457029ad Force UTF-8 encoding in all tests. This fixes several test failures when running tests from Windows commandline because Windows doesn't default to using UTF-8. 2025-07-21 15:58:37 -05:00
Tim Donohue
e9f32b9a1b Improve logging in AbstractLiveImportIntegrationTest (to make tests easier to debug). Replace obscure StringInputStream (from Ant) with IOUtils.toInputStream 2025-07-21 15:57:34 -05:00
dependabot[bot]
7b9029af80 Bump org.xhtmlrenderer:flying-saucer-pdf from 9.12.0 to 9.13.1
Bumps [org.xhtmlrenderer:flying-saucer-pdf](https://github.com/flyingsaucerproject/flyingsaucer) from 9.12.0 to 9.13.1.
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.12.0...v9.13.1)

---
updated-dependencies:
- dependency-name: org.xhtmlrenderer:flying-saucer-pdf
  dependency-version: 9.13.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 03:09:12 +00:00
dependabot[bot]
f5d1da0331 Bump com.amazonaws:aws-java-sdk-s3 from 1.12.785 to 1.12.788
Bumps [com.amazonaws:aws-java-sdk-s3](https://github.com/aws/aws-sdk-java) from 1.12.785 to 1.12.788.
- [Changelog](https://github.com/aws/aws-sdk-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-java/compare/1.12.785...1.12.788)

---
updated-dependencies:
- dependency-name: com.amazonaws:aws-java-sdk-s3
  dependency-version: 1.12.788
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 03:07:13 +00:00
Tim Donohue
cbe87832dc Fix broken tests on Windows by using Paths to split file path instead of regex. Also switch to in-memory s3mock because Windows cannot cleanup created files successfully. 2025-07-18 11:33:41 -05:00
Tim Donohue
144c36dec5 Merge pull request #9842 from kshepherd/auth-value-service_remove_context
Remove context parameter from AuthorityValueService methods
2025-07-18 08:48:34 -05:00
Kim Shepherd
0352ee6e63 Simplify Autowired annotation 2025-07-18 13:00:40 +02:00
Kim Shepherd
5b6fd70bed Add javadoc to AuthorityValueService interface 2025-07-18 13:00:40 +02:00
Kim Shepherd
91a701aeee Remove unnecessary context parameters from AuthorityValueService 2025-07-18 13:00:40 +02:00
Tim Donohue
4b8686f828 Fix broken SAML2 test on Windows by building proper file URLs for Windows. 2025-07-17 15:50:40 -05:00
Tim Donohue
5768f9380e Update test to no longer assume 127.0.0.1 will always respond with "localhost" as the hostname. On my machine it does not. 2025-07-16 16:27:05 -05:00
Tim Donohue
4e425b0908 Fix broken Windows tests by using Paths to split file path strings instead of regex. 2025-07-16 15:10:49 -05:00
Zeroday BYTE
e94f0a9cb3 Update DSpaceControlledVocabulary.java 2025-07-17 02:06:29 +07:00
Tim Donohue
a56c5ce322 Merge tag 'dspace-9.1'
[maven-release-plugin] copy for tag dspace-9.1
2025-07-14 16:47:15 -05:00
Tim Donohue
45d492366f Merge tag 'dspace-8.2'
[maven-release-plugin] copy for tag dspace-8.2
2025-07-14 16:47:07 -05:00
Tim Donohue
5d08fd4bfc Merge tag 'dspace-7.6.4'
[maven-release-plugin] copy for tag dspace-7.6.4
2025-07-14 16:46:59 -05:00
Tim Donohue
9424ccf4aa [maven-release-plugin] prepare for next development iteration 2025-07-14 12:03:15 -05:00
dependabot[bot]
a381611ebd Bump log4j.version from 2.25.0 to 2.25.1
Bumps `log4j.version` from 2.25.0 to 2.25.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.25.0 to 2.25.1

Updates `org.apache.logging.log4j:log4j-core` from 2.25.0 to 2.25.1

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.25.0 to 2.25.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-14 03:45:03 +00:00
dependabot[bot]
3d2d0052dc Bump log4j.version from 2.24.3 to 2.25.1
Bumps `log4j.version` from 2.24.3 to 2.25.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.24.3 to 2.25.1

Updates `org.apache.logging.log4j:log4j-core` from 2.24.3 to 2.25.1

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.24.3 to 2.25.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-14 02:48:45 +00:00
Nathan Buckingham
dec181644f Merge remote-tracking branch 'origin/main' into w2p-132206_saf-inputstream-leaks 2025-06-20 15:52:55 -04:00
Nathan Buckingham
35135c80ae 132206: Saf Imports close connections 2025-06-20 15:50:38 -04:00
Francisco
252512bdac Remove pgcrypto checks 2025-06-09 02:53:50 -03:00
Kim Shepherd
1b864e6ca2 [TLC-1097] Additional javadoc for ORCID sync fix 2025-06-02 18:23:34 +02:00
Kim Shepherd
ad82b31c74 [TLC-1097] ORCID external identifier sync fix
Handle SELF and PART_OF identifiers properly based on
configuration, work type, and identifier type
2025-06-02 17:05:02 +02:00
Sascha Szott
15d4c0b9e0 use filter query to retrieve entity types with submit authorization 2025-05-27 19:45:42 +02:00
Kim Shepherd
924678a092 [TLC-1117] Inherit custom, non-admin policies when creating new bundles
Also shifted some resource policy methods from ItemService to
AuthorizeService as they seemed better suited there.
2025-05-26 16:35:15 +02:00
abhinav
8d4cb15469 Merge branch 'main' into fix-issue-10536_relation-field-requiredissue-main 2025-05-19 18:11:13 +02:00
jm
6275d3b756 Fixed https://github.com/DSpace/DSpace/issues/10754 by setting the context user to the current subscriber 2025-05-16 15:56:55 +02:00
abhinav
d93e419af7 Merge branch 'fix-issue-10536_relation-field-requiredissue-7.6' into fix-issue-10536_relation-field-requiredissue-main 2025-04-04 16:57:00 +02:00
abhinav
8dc454d902 129756: Refactor test cases for Tilted relations 2025-04-04 14:11:07 +02:00
abhinav
05f56ed9c9 Merge branch 'fix-issue-10536_relation-field-requiredissue-7.6' into fix-issue-10536_relation-field-requiredissue-main 2025-04-04 11:45:16 +02:00
abhinav
043b742605 129756: Refactor validation and add test case 2025-04-04 11:44:24 +02:00
abhinav
989d930417 Added a test case to verify the sort 2025-04-03 12:32:00 +02:00
Jens Vannerum
2e14fd160b Merge remote-tracking branch 'origin/main' into w2p-124817_provide-pubmed-api-key 2025-04-02 10:20:03 +02:00
abhinav
23aff83d20 Updated tests to match test submission-config changes 2025-03-31 18:53:49 +02:00
abhinav
0a445da284 Merge branch 'fix-issue-10536_relation-field-requiredissue-7.6' into fix-issue-10536_relation-field-requiredissue-main 2025-03-31 13:51:30 +02:00
abhinav
6f8aa90fe5 129756: Enforce required on relation-field inputs 2025-03-31 13:46:30 +02:00
Vincenzo Mecca
bff51e1156 [DURACOM-243] Adds Test for JPEGFilter
(cherry picked from commit 82d04061c0)
2025-03-27 12:50:26 +01:00
Vincenzo Mecca
76f6949321 [DURACOM-243] Adds rotation handling inside JPEGFilter
Conflicts:

(cherry picked from commit 08e330c1c0)
2025-03-27 12:50:24 +01:00
David P. Steelman
502b655ef6 Fix checkpointing for checksum checking
Fixes the checkpointing for checksum checking by actually committing
the changes to the database.

Replacing "uncacheEntity" with "commit", as testing has shown that this
is necessary to ensure that the checksum status is properly updated in
the most_recent_checksum" table when checksum process is interrupted.

The provided integration test fails if the checksums of bitstreams that
were checked before the interruption are not properly recorded in the
database.
2025-03-20 11:35:56 -04:00
abhinav
cc6520bfbb 129616: Added order by 2025-03-19 17:00:38 +01:00
David P. Steelman
3d7c45852d Fix checkpointing for bitstore migration
Fixes the checkpointing for bitstore migration by actually committing
the changes to the database.

Replacing "dispatchEvents" with "commit" as testing has shown that this
is necessary to ensure that the status of bitstreams is properly
updated when the bitstore migration is interrupted.

The provided integration tests fail if bitstreams successfully migrated
before the interruption are not properly recorded in the database as
being in the destination assetstore.
2025-03-13 14:21:16 -04:00
Paulo Graça
8790b97d8f Merge branch 'DSpace:main' into master 2025-02-21 11:13:17 +00:00
Sascha Szott
32f0d97296 fixed shared memory warnings on Solr startup 2025-01-30 20:09:09 +01:00
Marie Verdonck
c25433ee17 109807: Live Import - PubMed - support optional apiKey config 2025-01-30 15:31:22 +01:00
Paulo Graça
499d0946c7 URN type support 2025-01-23 15:35:06 +00:00
nwoodward
cd57985934 make several usage statistics parameters configurable 2025-01-08 12:43:25 -06:00
174 changed files with 5460 additions and 3803 deletions

View File

@@ -4,7 +4,6 @@
*/target/
dspace/modules/*/target/
Dockerfile.*
dspace/src/main/docker/dspace-postgres-pgcrypto
dspace/src/main/docker/dspace-postgres-pgcrypto-curl
dspace/src/main/docker/dspace-postgres-loadsql
dspace/src/main/docker/README.md
dspace/src/main/docker-compose/

View File

@@ -11,8 +11,9 @@ updates:
# So, only this first section can include "applies-to: security-updates"
- package-ecosystem: "maven"
directory: "/"
# Monthly dependency updates (NOTE: "schedule" doesn't apply to security updates)
schedule:
interval: "weekly"
interval: "monthly"
time: "02:00"
# Allow up to 10 open PRs for dependencies
open-pull-requests-limit: 10
@@ -133,7 +134,7 @@ updates:
directory: "/"
target-branch: dspace-9_x
schedule:
interval: "weekly"
interval: "monthly"
time: "02:00"
# Allow up to 10 open PRs for dependencies
open-pull-requests-limit: 10
@@ -254,7 +255,7 @@ updates:
directory: "/"
target-branch: dspace-8_x
schedule:
interval: "weekly"
interval: "monthly"
time: "02:00"
# Allow up to 10 open PRs for dependencies
open-pull-requests-limit: 10
@@ -375,7 +376,7 @@ updates:
directory: "/"
target-branch: dspace-7_x
schedule:
interval: "weekly"
interval: "monthly"
time: "02:00"
# Allow up to 10 open PRs for dependencies
open-pull-requests-limit: 10

View File

@@ -47,7 +47,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
# https://github.com/github/codeql-action
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
# Codescan Javascript as well since a few JS files exist in REST API's interface
languages: java, javascript
@@ -56,8 +56,8 @@ jobs:
# NOTE: Based on testing, this autobuild process works well for DSpace. A custom
# DSpace build w/caching (like in build.yml) was about the same speed as autobuild.
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3
# Perform GitHub Code Scanning.
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

View File

@@ -113,39 +113,19 @@ jobs:
REDEPLOY_SANDBOX_URL: ${{ secrets.REDEPLOY_SANDBOX_SOLR_URL }}
REDEPLOY_DEMO_URL: ${{ secrets.REDEPLOY_DEMO_SOLR_URL }}
###########################################################
# Build/Push the 'dspace/dspace-postgres-pgcrypto' image
###########################################################
dspace-postgres-pgcrypto:
########################################################
# Build/Push the 'dspace/dspace-postgres-loadsql' image
########################################################
dspace-postgres-loadsql:
# Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
if: github.repository == 'dspace/dspace'
uses: ./.github/workflows/reusable-docker-build.yml
with:
build_id: dspace-postgres-pgcrypto-prod
image_name: dspace/dspace-postgres-pgcrypto
# Must build out of subdirectory to have access to install script for pgcrypto.
build_id: dspace-postgres-loadsql
image_name: dspace/dspace-postgres-loadsql
# Must build out of subdirectory to have access to install script.
# NOTE: this context will build the image based on the Dockerfile in the specified directory
dockerfile_context: ./dspace/src/main/docker/dspace-postgres-pgcrypto/
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_ACCESS_TOKEN: ${{ secrets.DOCKER_ACCESS_TOKEN }}
########################################################################
# Build/Push the 'dspace/dspace-postgres-pgcrypto' image (-loadsql tag)
########################################################################
dspace-postgres-pgcrypto-loadsql:
# Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
if: github.repository == 'dspace/dspace'
uses: ./.github/workflows/reusable-docker-build.yml
with:
build_id: dspace-postgres-pgcrypto-loadsql
image_name: dspace/dspace-postgres-pgcrypto
# Must build out of subdirectory to have access to install script for pgcrypto.
# NOTE: this context will build the image based on the Dockerfile in the specified directory
dockerfile_context: ./dspace/src/main/docker/dspace-postgres-pgcrypto-curl/
# Suffix all tags with "-loadsql". Otherwise, it uses the same
# tagging logic as the primary 'dspace/dspace-postgres-pgcrypto' image above.
tags_flavor: suffix=-loadsql
dockerfile_context: ./dspace/src/main/docker/dspace-postgres-loadsql/
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_ACCESS_TOKEN: ${{ secrets.DOCKER_ACCESS_TOKEN }}
@@ -158,7 +138,7 @@ jobs:
if: github.repository == 'dspace/dspace'
runs-on: ubuntu-latest
# Must run after all major images are built
needs: [dspace, dspace-test, dspace-cli, dspace-postgres-pgcrypto, dspace-solr]
needs: [dspace, dspace-test, dspace-cli, dspace-solr]
env:
# Override defaults dspace.server.url because backend starts at http://127.0.0.1:8080
dspace__P__server__P__url: http://127.0.0.1:8080/server
@@ -220,6 +200,19 @@ jobs:
result=$(wget -O- -q http://127.0.0.1:8080/server/api/core/collections)
echo "$result"
echo "$result" | grep -oE "\"Dog in Yard\","
# Verify basic backend logging is working.
# 1. Access the top communities list. Verify that the "Before request" INFO statement is logged
# 2. Access an invalid endpoint (and ignore 404 response). Verify that a "status:404" WARN statement is logged
- name: Verify backend is logging properly
run: |
wget -O/dev/null -q http://127.0.0.1:8080/server/api/core/communities/search/top
logs=$(docker compose -f docker-compose.yml logs -n 5 dspace)
echo "$logs"
echo "$logs" | grep -o "Before request \[GET /server/api/core/communities/search/top\]"
wget -O/dev/null -q http://127.0.0.1:8080/server/api/does/not/exist || true
logs=$(docker compose -f docker-compose.yml logs -n 5 dspace)
echo "$logs"
echo "$logs" | grep -o "status:404 exception: The repository type does.not was not found"
# Verify Handle Server can be stared and is working properly
# 1. First generate the "[dspace]/handle-server" folder with the sitebndl.zip
# 2. Start the Handle Server (and wait 20 seconds to let it start up)

View File

@@ -164,7 +164,7 @@ jobs:
# Use GitHub cache to load cached Docker images and cache the results of this build
# This decreases the number of images we need to fetch from DockerHub
cache-from: type=gha,scope=${{ inputs.build_id }}
cache-to: type=gha,scope=${{ inputs.build_id }},mode=max
cache-to: type=gha,scope=${{ inputs.build_id }},mode=min
# Export the digest of Docker build locally
- name: Export Docker build digest
@@ -216,7 +216,7 @@ jobs:
# Use GitHub cache to load cached Docker images and cache the results of this build
# This decreases the number of images we need to fetch from DockerHub
cache-from: type=gha,scope=${{ inputs.build_id }}
cache-to: type=gha,scope=${{ inputs.build_id }},mode=max
cache-to: type=gha,scope=${{ inputs.build_id }},mode=min
# Export image to a local TAR file
outputs: type=docker,dest=/tmp/${{ inputs.build_id }}.tar

View File

@@ -106,6 +106,9 @@ For more information on CheckStyle configurations below, see: http://checkstyle.
<!-- Right braces should be on start of a new line (default value) -->
<module name="RightCurly"/>
<!-- Enforce Java-style array declaration instead of C-style -->
<module name="ArrayTypeStyle"/>
<!-- ##### Indentation / Whitespace requirements ##### -->
<!-- Require 4-space indentation (default value) -->
<module name="Indentation"/>

View File

@@ -65,13 +65,12 @@ services:
# DSpace PostgreSQL database container
dspacedb:
container_name: dspacedb
# Uses a custom Postgres image with pgcrypto installed
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-latest}"
build:
# Must build out of subdirectory to have access to install script for pgcrypto
context: ./dspace/src/main/docker/dspace-postgres-pgcrypto/
# Uses the base PostgreSQL image
image: "docker.io/postgres:${POSTGRES_VERSION:-15}"
environment:
PGDATA: /pgdata
POSTGRES_DB: dspace
POSTGRES_USER: dspace
POSTGRES_PASSWORD: dspace
networks:
dspacenet:

View File

@@ -99,20 +99,6 @@
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>maven-version</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
@@ -734,7 +720,7 @@
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.785</version>
<version>1.12.791</version>
</dependency>
<!-- TODO: This may need to be replaced with the "orcid-model" artifact once this ticket is resolved:
@@ -775,7 +761,7 @@
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.11.1</version>
<version>5.12.0</version>
</dependency>
<!-- Email templating -->
@@ -788,7 +774,7 @@
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-core</artifactId>
<version>2.10.2</version>
<version>2.10.4</version>
<scope>test</scope>
</dependency>
@@ -929,7 +915,7 @@
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.12.0</version>
<version>9.13.3</version>
<exclusions>
<!-- Conflicts with Hibernate. Use version that is brought in via Hibernate -->
<exclusion>

View File

@@ -46,6 +46,7 @@ import org.dspace.app.util.XMLUtils;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.MetadataFieldName;
import org.dspace.content.MetadataSchemaEnum;
@@ -53,6 +54,7 @@ import org.dspace.content.MetadataValue;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.eperson.factory.EPersonServiceFactory;
import org.dspace.eperson.service.EPersonService;
@@ -169,6 +171,10 @@ public class StructBuilder {
.desc("File to receive the structure map ('-' for standard out).")
.hasArg().argName("output").required().build());
options.addOption(Option.builder("p").longOpt("parent")
.desc("Parent community or handle (optional)")
.hasArg().argName("parent").required(false).build());
// Parse the command line.
CommandLineParser parser = new DefaultParser();
CommandLine line = null;
@@ -202,6 +208,11 @@ public class StructBuilder {
outputStream = new FileOutputStream(output);
}
String parentID = null;
if (line.hasOption('p')) {
parentID = line.getOptionValue('p');
}
// create a context
Context context = new Context();
@@ -214,6 +225,30 @@ public class StructBuilder {
System.exit(1);
}
// Resolve optional "parent community" ID or handle to a community
Community parent = null;
if (parentID != null) {
DSpaceObject dso = handleService.resolveToObject(context, parentID);
if (dso != null) {
if (dso.getType() == Constants.COMMUNITY) {
parent = (Community) dso;
} else {
System.out.println("The handle provided for the -p option does not resolve to a community. " +
parentID + " is an object of type: " + Constants.typeText[dso.getType()]);
System.exit(0);
}
} else {
// Not a handle, see if it is an ID
Community community = communityService.findByIdOrLegacyId(context, parentID);
if (community != null) {
parent = community;
} else {
System.out.println("The value provided for -p is not a valid community ID or handle: " + parentID);
System.exit(0);
}
}
}
// Export? Import?
if (line.hasOption('x')) { // export
exportStructure(context, outputStream);
@@ -233,7 +268,7 @@ public class StructBuilder {
}
boolean keepHandles = options.hasOption("k");
importStructure(context, inputStream, outputStream, keepHandles);
importStructure(context, inputStream, outputStream, parent, keepHandles);
inputStream.close();
outputStream.close();
@@ -250,6 +285,7 @@ public class StructBuilder {
* @param context
* @param input XML which describes the new communities and collections.
* @param output input, annotated with the new objects' identifiers.
* @param parent Community beneath which to attach this structure
* @param keepHandles true if Handles should be set from input.
* @throws IOException
* @throws ParserConfigurationException
@@ -258,7 +294,7 @@ public class StructBuilder {
* @throws SQLException
*/
static void importStructure(Context context, InputStream input,
OutputStream output, boolean keepHandles)
OutputStream output, Community parent, boolean keepHandles)
throws IOException, ParserConfigurationException, SQLException,
TransformerException, XPathExpressionException {
@@ -325,7 +361,7 @@ public class StructBuilder {
.evaluate(document, XPathConstants.NODESET);
// run the import starting with the top level communities
elements = handleCommunities(context, first, null, keepHandles);
elements = handleCommunities(context, first, parent, keepHandles);
} catch (TransformerException ex) {
System.err.format("Input content not understood: %s%n", ex.getMessage());
System.exit(1);

View File

@@ -14,6 +14,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.DefaultParser.Builder;
import org.apache.commons.cli.ParseException;
import org.dspace.content.Item;
import org.dspace.content.MetadataDSpaceCsvExportServiceImpl;
@@ -167,4 +169,14 @@ public class MetadataExportSearch extends DSpaceRunnable<MetadataExportSearchScr
}
return scopeObj;
}
@Override
protected StepResult parse(String[] args) throws ParseException {
commandLine = new DefaultParser().parse(getScriptConfiguration().getOptions(), args);
Builder builder = new DefaultParser().builder();
builder.setStripLeadingAndTrailingQuotes(false);
commandLine = builder.build().parse(getScriptConfiguration().getOptions(), args);
setup();
return StepResult.Continue;
}
}

View File

@@ -495,7 +495,7 @@ public class MetadataImport extends DSpaceRunnable<MetadataImportScriptConfigura
// Check it has an owning collection
List<String> collections = line.get("collection");
if (collections == null) {
if (collections == null || collections.isEmpty()) {
throw new MetadataImportException(
"New items must have a 'collection' assigned in the form of a handle");
}
@@ -1143,12 +1143,12 @@ public class MetadataImport extends DSpaceRunnable<MetadataImportScriptConfigura
}
// look up the value and authority in solr
List<AuthorityValue> byValue = authorityValueService.findByValue(c, schema, element, qualifier, value);
List<AuthorityValue> byValue = authorityValueService.findByValue(schema, element, qualifier, value);
AuthorityValue authorityValue = null;
if (byValue.isEmpty()) {
String toGenerate = fromAuthority.generateString() + value;
String field = schema + "_" + element + (StringUtils.isNotBlank(qualifier) ? "_" + qualifier : "");
authorityValue = authorityValueService.generate(c, toGenerate, value, field);
authorityValue = authorityValueService.generate(toGenerate, value, field);
dcv.setAuthority(toGenerate);
} else {
authorityValue = byValue.get(0);
@@ -1560,7 +1560,7 @@ public class MetadataImport extends DSpaceRunnable<MetadataImportScriptConfigura
ContentServiceFactory.getInstance().getMetadataFieldService();
int i = reference.indexOf(":");
String mfValue = reference.substring(i + 1);
String mf[] = reference.substring(0, i).split("\\.");
String[] mf = reference.substring(0, i).split("\\.");
if (mf.length < 2) {
throw new MetadataImportException("Error in CSV row " + rowCount + ":\n" +
"Bad metadata field in reference: '" + reference

View File

@@ -353,7 +353,7 @@ public class ItemExportServiceImpl implements ItemExportService {
/**
* Create the 'collections' file. List handles of all Collections which
* contain this Item. The "owning" Collection is listed first.
* contain this Item. The "owning" Collection is listed first.
*
* @param item list collections holding this Item.
* @param destDir write the file here.
@@ -364,12 +364,14 @@ public class ItemExportServiceImpl implements ItemExportService {
File outFile = new File(destDir, "collections");
if (outFile.createNewFile()) {
try (PrintWriter out = new PrintWriter(new FileWriter(outFile))) {
String ownerHandle = item.getOwningCollection().getHandle();
out.println(ownerHandle);
Collection owningCollection = item.getOwningCollection();
// The owning collection is null for workspace and workflow items
if (owningCollection != null) {
out.println(owningCollection.getHandle());
}
for (Collection collection : item.getCollections()) {
String collectionHandle = collection.getHandle();
if (!collectionHandle.equals(ownerHandle)) {
out.println(collectionHandle);
if (!collection.equals(owningCollection)) {
out.println(collection.getHandle());
}
}
}

View File

@@ -23,6 +23,7 @@ import java.util.UUID;
import org.apache.commons.cli.ParseException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.tika.Tika;
import org.dspace.app.itemimport.factory.ItemImportServiceFactory;
@@ -334,33 +335,38 @@ public class ItemImport extends DSpaceRunnable<ItemImportScriptConfiguration> {
protected void readZip(Context context, ItemImportService itemImportService) throws Exception {
Optional<InputStream> optionalFileStream = Optional.empty();
Optional<InputStream> validationFileStream = Optional.empty();
if (!remoteUrl) {
// manage zip via upload
optionalFileStream = handler.getFileStream(context, zipfilename);
validationFileStream = handler.getFileStream(context, zipfilename);
} else {
// manage zip via remote url
optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
}
if (validationFileStream.isPresent()) {
// validate zip file
if (validationFileStream.isPresent()) {
validateZip(validationFileStream.get());
try {
if (!remoteUrl) {
// manage zip via upload
optionalFileStream = handler.getFileStream(context, zipfilename);
validationFileStream = handler.getFileStream(context, zipfilename);
} else {
// manage zip via remote url
optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
}
workFile = new File(itemImportService.getTempWorkDir() + File.separator
+ zipfilename + "-" + context.getCurrentUser().getID());
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
} else {
throw new IllegalArgumentException(
"Error reading file, the file couldn't be found for filename: " + zipfilename);
}
if (validationFileStream.isPresent()) {
// validate zip file
if (validationFileStream.isPresent()) {
validateZip(validationFileStream.get());
}
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
+ File.separator + context.getCurrentUser().getID());
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
workFile = new File(itemImportService.getTempWorkDir() + File.separator
+ zipfilename + "-" + context.getCurrentUser().getID());
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
} else {
throw new IllegalArgumentException(
"Error reading file, the file couldn't be found for filename: " + zipfilename);
}
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
+ File.separator + context.getCurrentUser().getID());
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
} finally {
optionalFileStream.ifPresent(IOUtils::closeQuietly);
validationFileStream.ifPresent(IOUtils::closeQuietly);
}
}
/**

View File

@@ -17,6 +17,7 @@ import java.util.Optional;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.dspace.app.itemimport.service.ItemImportService;
import org.dspace.content.Collection;
@@ -111,7 +112,11 @@ public class ItemImportCLI extends ItemImport {
// validate zip file
InputStream validationFileStream = new FileInputStream(myZipFile);
validateZip(validationFileStream);
try {
validateZip(validationFileStream);
} finally {
IOUtils.closeQuietly(validationFileStream);
}
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
+ File.separator + context.getCurrentUser().getID());
@@ -120,22 +125,28 @@ public class ItemImportCLI extends ItemImport {
} else {
// manage zip via remote url
Optional<InputStream> optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
if (optionalFileStream.isPresent()) {
// validate zip file via url
Optional<InputStream> validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
if (validationFileStream.isPresent()) {
validateZip(validationFileStream.get());
}
Optional<InputStream> validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
try {
if (optionalFileStream.isPresent()) {
// validate zip file via url
workFile = new File(itemImportService.getTempWorkDir() + File.separator
+ zipfilename + "-" + context.getCurrentUser().getID());
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
+ File.separator + context.getCurrentUser().getID());
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
} else {
throw new IllegalArgumentException(
"Error reading file, the file couldn't be found for filename: " + zipfilename);
if (validationFileStream.isPresent()) {
validateZip(validationFileStream.get());
}
workFile = new File(itemImportService.getTempWorkDir() + File.separator
+ zipfilename + "-" + context.getCurrentUser().getID());
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
+ File.separator + context.getCurrentUser().getID());
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
} else {
throw new IllegalArgumentException(
"Error reading file, the file couldn't be found for filename: " + zipfilename);
}
} finally {
optionalFileStream.ifPresent(IOUtils::closeQuietly);
validationFileStream.ifPresent(IOUtils::closeQuietly);
}
}
}

View File

@@ -605,7 +605,7 @@ public class ItemImportServiceImpl implements ItemImportService, InitializingBea
Item item = null;
String mf[] = metaKey.split("\\.");
String[] mf = metaKey.split("\\.");
if (mf.length < 2) {
throw new Exception("Bad metadata field in reference: '" + metaKey +
"' (expected syntax is schema.element[.qualifier])");
@@ -913,7 +913,7 @@ public class ItemImportServiceImpl implements ItemImportService, InitializingBea
// Load any additional metadata schemas
File folder = new File(path);
File file[] = folder.listFiles(metadataFileFilter);
File[] file = folder.listFiles(metadataFileFilter);
for (int i = 0; i < file.length; i++) {
loadDublinCore(c, myitem, file[i].getAbsolutePath());
}

View File

@@ -97,7 +97,7 @@ public class ItemArchive {
//The code to search for local schema files was copied from org.dspace.app.itemimport
// .ItemImportServiceImpl.java
File file[] = dir.listFiles(new LocalSchemaFilenameFilter());
File[] file = dir.listFiles(new LocalSchemaFilenameFilter());
for (int i = 0; i < file.length; i++) {
is = new FileInputStream(file[i]);
itarch.dtomList.addAll(MetadataUtilities.loadDublinCore(XMLUtils.getDocumentBuilder(), is));

View File

@@ -7,9 +7,7 @@
*/
package org.dspace.app.mediafilter;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.dspace.content.Item;
import org.dspace.services.ConfigurationService;
@@ -63,27 +61,20 @@ public class BrandedPreviewJPEGFilter extends MediaFilter {
@Override
public InputStream getDestinationStream(Item currentItem, InputStream source, boolean verbose)
throws Exception {
// read in bitstream's image
BufferedImage buf = ImageIO.read(source);
// get config params
ConfigurationService configurationService
= DSpaceServicesFactory.getInstance().getConfigurationService();
float xmax = (float) configurationService
.getIntProperty("webui.preview.maxwidth");
float ymax = (float) configurationService
.getIntProperty("webui.preview.maxheight");
boolean blurring = (boolean) configurationService
.getBooleanProperty("webui.preview.blurring");
boolean hqscaling = (boolean) configurationService
.getBooleanProperty("webui.preview.hqscaling");
int xmax = configurationService.getIntProperty("webui.preview.maxwidth");
int ymax = configurationService.getIntProperty("webui.preview.maxheight");
boolean blurring = configurationService.getBooleanProperty("webui.preview.blurring");
boolean hqscaling = configurationService.getBooleanProperty("webui.preview.hqscaling");
int brandHeight = configurationService.getIntProperty("webui.preview.brand.height");
String brandFont = configurationService.getProperty("webui.preview.brand.font");
int brandFontPoint = configurationService.getIntProperty("webui.preview.brand.fontpoint");
JPEGFilter jpegFilter = new JPEGFilter();
return jpegFilter
.getThumbDim(currentItem, buf, verbose, xmax, ymax, blurring, hqscaling, brandHeight, brandFontPoint,
brandFont);
return jpegFilter.getThumb(
currentItem, source, verbose, xmax, ymax, blurring, hqscaling, brandHeight, brandFontPoint, brandFont
);
}
}

View File

@@ -14,7 +14,7 @@ import java.io.InputStream;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.dspace.content.Bitstream;
@@ -153,8 +153,8 @@ public abstract class ImageMagickThumbnailFilter extends MediaFilter {
// the CropBox is missing or empty because pdfbox will set it to the
// same size as the MediaBox if it doesn't exist. Also note that we
// only need to check the first page, since that's what we use for
// generating the thumbnail (PDDocument uses a zero-based index).
PDPage pdfPage = PDDocument.load(f).getPage(0);
// generating the thumbnail (PDPage uses a zero-based index).
PDPage pdfPage = Loader.loadPDF(f).getPage(0);
PDRectangle pdfPageMediaBox = pdfPage.getMediaBox();
PDRectangle pdfPageCropBox = pdfPage.getCropBox();

View File

@@ -8,19 +8,32 @@
package org.dspace.app.mediafilter;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Metadata;
import com.drew.metadata.MetadataException;
import com.drew.metadata.exif.ExifIFD0Directory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dspace.content.Item;
import org.dspace.services.ConfigurationService;
import org.dspace.services.factory.DSpaceServicesFactory;
@@ -33,6 +46,8 @@ import org.dspace.services.factory.DSpaceServicesFactory;
* @author Jason Sherman jsherman@usao.edu
*/
public class JPEGFilter extends MediaFilter implements SelfRegisterInputFormats {
private static final Logger log = LogManager.getLogger(JPEGFilter.class);
@Override
public String getFilteredName(String oldFilename) {
return oldFilename + ".jpg";
@@ -62,6 +77,115 @@ public class JPEGFilter extends MediaFilter implements SelfRegisterInputFormats
return "Generated Thumbnail";
}
/**
* Gets the rotation angle from image's metadata using ImageReader.
* This method consumes the InputStream, so you need to be careful to don't reuse the same InputStream after
* computing the rotation angle.
*
* @param buf InputStream of the image file
* @return Rotation angle in degrees (0, 90, 180, or 270)
*/
public static int getImageRotationUsingImageReader(InputStream buf) {
try {
Metadata metadata = ImageMetadataReader.readMetadata(buf);
ExifIFD0Directory directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
if (directory != null && directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
return convertRotationToDegrees(directory.getInt(ExifIFD0Directory.TAG_ORIENTATION));
}
} catch (MetadataException | ImageProcessingException | IOException e) {
log.error("Error reading image metadata", e);
}
return 0;
}
public static int convertRotationToDegrees(int valueNode) {
// Common orientation values:
// 1 = Normal (0°)
// 6 = Rotated 90° CW
// 3 = Rotated 180°
// 8 = Rotated 270° CW
switch (valueNode) {
case 6:
return 90;
case 3:
return 180;
case 8:
return 270;
default:
return 0;
}
}
/**
* Rotates an image by the specified angle
*
* @param image The original image
* @param angle The rotation angle in degrees
* @return Rotated image
*/
public static BufferedImage rotateImage(BufferedImage image, int angle) {
if (angle == 0) {
return image;
}
double radians = Math.toRadians(angle);
double sin = Math.abs(Math.sin(radians));
double cos = Math.abs(Math.cos(radians));
int newWidth = (int) Math.round(image.getWidth() * cos + image.getHeight() * sin);
int newHeight = (int) Math.round(image.getWidth() * sin + image.getHeight() * cos);
BufferedImage rotated = new BufferedImage(newWidth, newHeight, image.getType());
Graphics2D g2d = rotated.createGraphics();
AffineTransform at = new AffineTransform();
at.translate(newWidth / 2, newHeight / 2);
at.rotate(radians);
at.translate(-image.getWidth() / 2, -image.getHeight() / 2);
g2d.setTransform(at);
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
return rotated;
}
/**
* Calculates scaled dimension while maintaining aspect ratio
*
* @param imgSize Original image dimensions
* @param boundary Maximum allowed dimensions
* @return New dimensions that fit within boundary while preserving aspect ratio
*/
private Dimension getScaledDimension(Dimension imgSize, Dimension boundary) {
int originalWidth = imgSize.width;
int originalHeight = imgSize.height;
int boundWidth = boundary.width;
int boundHeight = boundary.height;
int newWidth = originalWidth;
int newHeight = originalHeight;
// First check if we need to scale width
if (originalWidth > boundWidth) {
// Scale width to fit
newWidth = boundWidth;
// Scale height to maintain aspect ratio
newHeight = (newWidth * originalHeight) / originalWidth;
}
// Then check if we need to scale even with the new height
if (newHeight > boundHeight) {
// Scale height to fit instead
newHeight = boundHeight;
newWidth = (newHeight * originalWidth) / originalHeight;
}
return new Dimension(newWidth, newHeight);
}
/**
* @param currentItem item
* @param source source input stream
@@ -72,10 +196,65 @@ public class JPEGFilter extends MediaFilter implements SelfRegisterInputFormats
@Override
public InputStream getDestinationStream(Item currentItem, InputStream source, boolean verbose)
throws Exception {
// read in bitstream's image
BufferedImage buf = ImageIO.read(source);
return getThumb(currentItem, source, verbose);
}
return getThumb(currentItem, buf, verbose);
public InputStream getThumb(Item currentItem, InputStream source, boolean verbose)
throws Exception {
// get config params
final ConfigurationService configurationService
= DSpaceServicesFactory.getInstance().getConfigurationService();
int xmax = configurationService
.getIntProperty("thumbnail.maxwidth");
int ymax = configurationService
.getIntProperty("thumbnail.maxheight");
boolean blurring = (boolean) configurationService
.getBooleanProperty("thumbnail.blurring");
boolean hqscaling = (boolean) configurationService
.getBooleanProperty("thumbnail.hqscaling");
return getThumb(currentItem, source, verbose, xmax, ymax, blurring, hqscaling, 0, 0, null);
}
protected InputStream getThumb(
Item currentItem,
InputStream source,
boolean verbose,
int xmax,
int ymax,
boolean blurring,
boolean hqscaling,
int brandHeight,
int brandFontPoint,
String brandFont
) throws Exception {
File tempFile = File.createTempFile("temp", ".tmp");
tempFile.deleteOnExit();
// Write to temp file
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
byte[] buffer = new byte[4096];
int len;
while ((len = source.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
int rotation = 0;
try (FileInputStream fis = new FileInputStream(tempFile)) {
rotation = getImageRotationUsingImageReader(fis);
}
try (FileInputStream fis = new FileInputStream(tempFile)) {
// read in bitstream's image
BufferedImage buf = ImageIO.read(fis);
return getThumbDim(
currentItem, buf, verbose, xmax, ymax, blurring, hqscaling, brandHeight, brandFontPoint, rotation,
brandFont
);
}
}
public InputStream getThumb(Item currentItem, BufferedImage buf, boolean verbose)
@@ -83,25 +262,28 @@ public class JPEGFilter extends MediaFilter implements SelfRegisterInputFormats
// get config params
final ConfigurationService configurationService
= DSpaceServicesFactory.getInstance().getConfigurationService();
float xmax = (float) configurationService
int xmax = configurationService
.getIntProperty("thumbnail.maxwidth");
float ymax = (float) configurationService
int ymax = configurationService
.getIntProperty("thumbnail.maxheight");
boolean blurring = (boolean) configurationService
.getBooleanProperty("thumbnail.blurring");
boolean hqscaling = (boolean) configurationService
.getBooleanProperty("thumbnail.hqscaling");
return getThumbDim(currentItem, buf, verbose, xmax, ymax, blurring, hqscaling, 0, 0, null);
return getThumbDim(currentItem, buf, verbose, xmax, ymax, blurring, hqscaling, 0, 0, 0, null);
}
public InputStream getThumbDim(Item currentItem, BufferedImage buf, boolean verbose, float xmax, float ymax,
public InputStream getThumbDim(Item currentItem, BufferedImage buf, boolean verbose, int xmax, int ymax,
boolean blurring, boolean hqscaling, int brandHeight, int brandFontPoint,
String brandFont)
int rotation, String brandFont)
throws Exception {
// now get the image dimensions
float xsize = (float) buf.getWidth(null);
float ysize = (float) buf.getHeight(null);
// Rotate the image if needed
BufferedImage correctedImage = rotateImage(buf, rotation);
int xsize = correctedImage.getWidth();
int ysize = correctedImage.getHeight();
// if verbose flag is set, print out dimensions
// to STDOUT
@@ -109,86 +291,63 @@ public class JPEGFilter extends MediaFilter implements SelfRegisterInputFormats
System.out.println("original size: " + xsize + "," + ysize);
}
// scale by x first if needed
if (xsize > xmax) {
// calculate scaling factor so that xsize * scale = new size (max)
float scale_factor = xmax / xsize;
// Calculate new dimensions while maintaining aspect ratio
Dimension newDimension = getScaledDimension(
new Dimension(xsize, ysize),
new Dimension(xmax, ymax)
);
// if verbose flag is set, print out extracted text
// to STDOUT
if (verbose) {
System.out.println("x scale factor: " + scale_factor);
}
// now reduce x size
// and y size
xsize = xsize * scale_factor;
ysize = ysize * scale_factor;
// if verbose flag is set, print out extracted text
// to STDOUT
if (verbose) {
System.out.println("size after fitting to maximum width: " + xsize + "," + ysize);
}
}
// scale by y if needed
if (ysize > ymax) {
float scale_factor = ymax / ysize;
// now reduce x size
// and y size
xsize = xsize * scale_factor;
ysize = ysize * scale_factor;
}
// if verbose flag is set, print details to STDOUT
if (verbose) {
System.out.println("size after fitting to maximum height: " + xsize + ", "
+ ysize);
System.out.println("size after fitting to maximum height: " + newDimension.width + ", "
+ newDimension.height);
}
xsize = newDimension.width;
ysize = newDimension.height;
// create an image buffer for the thumbnail with the new xsize, ysize
BufferedImage thumbnail = new BufferedImage((int) xsize, (int) ysize,
BufferedImage.TYPE_INT_RGB);
BufferedImage thumbnail = new BufferedImage(xsize, ysize, BufferedImage.TYPE_INT_RGB);
// Use blurring if selected in config.
// a little blur before scaling does wonders for keeping moire in check.
if (blurring) {
// send the buffered image off to get blurred.
buf = getBlurredInstance((BufferedImage) buf);
correctedImage = getBlurredInstance(correctedImage);
}
// Use high quality scaling method if selected in config.
// this has a definite performance penalty.
if (hqscaling) {
// send the buffered image off to get an HQ downscale.
buf = getScaledInstance((BufferedImage) buf, (int) xsize, (int) ysize,
(Object) RenderingHints.VALUE_INTERPOLATION_BICUBIC, (boolean) true);
correctedImage = getScaledInstance(correctedImage, xsize, ysize,
RenderingHints.VALUE_INTERPOLATION_BICUBIC, true);
}
// now render the image into the thumbnail buffer
Graphics2D g2d = thumbnail.createGraphics();
g2d.drawImage(buf, 0, 0, (int) xsize, (int) ysize, null);
g2d.drawImage(correctedImage, 0, 0, xsize, ysize, null);
if (brandHeight != 0) {
ConfigurationService configurationService
= DSpaceServicesFactory.getInstance().getConfigurationService();
Brand brand = new Brand((int) xsize, brandHeight, new Font(brandFont, Font.PLAIN, brandFontPoint), 5);
Brand brand = new Brand(xsize, brandHeight, new Font(brandFont, Font.PLAIN, brandFontPoint), 5);
BufferedImage brandImage = brand.create(configurationService.getProperty("webui.preview.brand"),
configurationService.getProperty("webui.preview.brand.abbrev"),
currentItem == null ? "" : "hdl:" + currentItem.getHandle());
g2d.drawImage(brandImage, (int) 0, (int) ysize, (int) xsize, (int) 20, null);
g2d.drawImage(brandImage, 0, ysize, xsize, 20, null);
}
ByteArrayInputStream bais;
// now create an input stream for the thumbnail buffer and return it
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(thumbnail, "jpeg", baos);
// now get the array
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
ImageIO.write(thumbnail, "jpeg", baos);
// now get the array
bais = new ByteArrayInputStream(baos.toByteArray());
}
return bais; // hope this gets written out before its garbage collected!
}

View File

@@ -11,6 +11,8 @@ import java.awt.image.BufferedImage;
import java.io.InputStream;
import org.apache.logging.log4j.Logger;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.io.RandomAccessReadBuffer;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.rendering.PDFRenderer;
@@ -71,7 +73,7 @@ public class PDFBoxThumbnail extends MediaFilter {
BufferedImage buf;
// Render the page image.
try ( PDDocument doc = PDDocument.load(source); ) {
try ( PDDocument doc = Loader.loadPDF(new RandomAccessReadBuffer(source)); ) {
PDFRenderer renderer = new PDFRenderer(doc);
buf = renderer.renderImage(0);
} catch (InvalidPasswordException ex) {
@@ -81,6 +83,7 @@ public class PDFBoxThumbnail extends MediaFilter {
// Generate thumbnail derivative and return as IO stream.
JPEGFilter jpegFilter = new JPEGFilter();
return jpegFilter.getThumb(currentItem, buf, verbose);
}
}

View File

@@ -224,7 +224,7 @@ public class Packager {
} else {
//otherwise, display list of valid packager types
System.out.println("\nAvailable Submission Package (SIP) types:");
String pn[] = pluginService
String[] pn = pluginService
.getAllPluginNames(PackageIngester.class);
for (int i = 0; i < pn.length; ++i) {
System.out.println(" " + pn[i]);
@@ -274,7 +274,7 @@ public class Packager {
// process
pkgParams.setRecursiveModeEnabled(true);
}
String files[] = line.getArgs();
String[] files = line.getArgs();
if (files.length > 0) {
sourceFile = files[0];
}
@@ -282,9 +282,9 @@ public class Packager {
myPackager.submit = false;
}
if (line.hasOption('o')) {
String popt[] = line.getOptionValues('o');
String[] popt = line.getOptionValues('o');
for (int i = 0; i < popt.length; ++i) {
String pair[] = popt[i].split("\\=", 2);
String[] pair = popt[i].split("\\=", 2);
if (pair.length == 2) {
pkgParams.addProperty(pair[0].trim(), pair[1].trim());
} else if (pair.length == 1) {
@@ -383,7 +383,7 @@ public class Packager {
}
// validate each parent arg (if any)
DSpaceObject parentObjs[] = null;
DSpaceObject[] parentObjs = null;
if (parents != null) {
System.out.println("Destination parents:");
@@ -461,7 +461,7 @@ public class Packager {
* @throws PackageException if packaging error
*/
protected void ingest(Context context, PackageIngester sip, PackageParameters pkgParams, String sourceFile,
DSpaceObject parentObjs[])
DSpaceObject[] parentObjs)
throws IOException, SQLException, FileNotFoundException, AuthorizeException, CrosswalkException,
PackageException {
// make sure we have an input file

View File

@@ -132,7 +132,7 @@ public class MetadataExposureServiceImpl implements MetadataExposureService {
if (key.startsWith(CONFIG_PREFIX)) {
if (configurationService.getBooleanProperty(key, true)) {
String mdField = key.substring(CONFIG_PREFIX.length());
String segment[] = mdField.split("\\.", 3);
String[] segment = mdField.split("\\.", 3);
// got schema.element.qualifier
if (segment.length == 3) {

View File

@@ -113,7 +113,7 @@ public class SyndicationFeed {
configurationService.getProperty("webui.feed.item.date", defaultDateField);
// metadata field for Item description in entry:
private static final String descriptionFields[] =
private static final String[] descriptionFields =
DSpaceServicesFactory.getInstance().getConfigurationService()
.getArrayProperty("webui.feed.item.description", defaultDescriptionFields);

View File

@@ -535,7 +535,7 @@ public class LDAPAuthentication implements AuthenticationMethod {
resultDN = (sr.getName() + "," + ldap_search_context);
}
String attlist[] = {ldap_email_field, ldap_givenname_field,
String[] attlist = {ldap_email_field, ldap_givenname_field,
ldap_surname_field, ldap_phone_field, ldap_group_field};
Attributes atts = sr.getAttributes();
Attribute att;
@@ -743,7 +743,7 @@ public class LDAPAuthentication implements AuthenticationMethod {
// groupmap contains the mapping of LDAP groups to DSpace groups
// outer loop with the DSpace groups
while (groupMap != null) {
String t[] = groupMap.split(":");
String[] t = groupMap.split(":");
String ldapSearchString = t[0];
String dspaceGroupName = t[1];

View File

@@ -20,8 +20,6 @@ import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.dspace.authority.service.AuthorityValueService;
import org.dspace.content.authority.SolrAuthority;
import org.dspace.core.Context;
import org.dspace.core.LogHelper;
import org.springframework.beans.factory.annotation.Autowired;
/**
@@ -36,7 +34,7 @@ public class AuthorityValueServiceImpl implements AuthorityValueService {
private final Logger log = org.apache.logging.log4j.LogManager.getLogger(AuthorityValueServiceImpl.class);
@Autowired(required = true)
@Autowired
protected AuthorityTypes authorityTypes;
protected AuthorityValueServiceImpl() {
@@ -44,7 +42,7 @@ public class AuthorityValueServiceImpl implements AuthorityValueService {
}
@Override
public AuthorityValue generate(Context context, String authorityKey, String content, String field) {
public AuthorityValue generate(String authorityKey, String content, String field) {
AuthorityValue nextValue = null;
nextValue = generateRaw(authorityKey, content, field);
@@ -55,7 +53,7 @@ public class AuthorityValueServiceImpl implements AuthorityValueService {
if (StringUtils.isBlank(authorityKey)) {
// An existing metadata without authority is being indexed
// If there is an exact match in the index, reuse it before adding a new one.
List<AuthorityValue> byValue = findByExactValue(context, field, content);
List<AuthorityValue> byValue = findByExactValue(field, content);
if (byValue != null && !byValue.isEmpty()) {
authorityKey = byValue.get(0).getId();
} else {
@@ -118,71 +116,70 @@ public class AuthorityValueServiceImpl implements AuthorityValueService {
/**
* Item.ANY does not work here.
*
* @param context Context
* @param authorityID authority id
* @return AuthorityValue
*/
@Override
public AuthorityValue findByUID(Context context, String authorityID) {
public AuthorityValue findByUID(String authorityID) {
//Ensure that if we use the full identifier to match on
String queryString = "id:\"" + authorityID + "\"";
List<AuthorityValue> findings = find(context, queryString);
List<AuthorityValue> findings = find(queryString);
return findings.size() > 0 ? findings.get(0) : null;
}
@Override
public List<AuthorityValue> findByValue(Context context, String field, String value) {
public List<AuthorityValue> findByValue(String field, String value) {
String queryString = "value:" + value + " AND field:" + field;
return find(context, queryString);
return find(queryString);
}
@Override
public AuthorityValue findByOrcidID(Context context, String orcid_id) {
public AuthorityValue findByOrcidID(String orcid_id) {
String queryString = "orcid_id:" + orcid_id;
List<AuthorityValue> findings = find(context, queryString);
List<AuthorityValue> findings = find(queryString);
return findings.size() > 0 ? findings.get(0) : null;
}
@Override
public List<AuthorityValue> findByExactValue(Context context, String field, String value) {
public List<AuthorityValue> findByExactValue(String field, String value) {
String queryString = "value:\"" + value + "\" AND field:" + field;
return find(context, queryString);
return find(queryString);
}
@Override
public List<AuthorityValue> findByValue(Context context, String schema, String element, String qualifier,
public List<AuthorityValue> findByValue(String schema, String element, String qualifier,
String value) {
String field = fieldParameter(schema, element, qualifier);
return findByValue(context, field, value);
return findByValue(field, value);
}
@Override
public List<AuthorityValue> findByName(Context context, String schema, String element, String qualifier,
public List<AuthorityValue> findByName(String schema, String element, String qualifier,
String name) {
String field = fieldParameter(schema, element, qualifier);
String queryString = "first_name:" + name + " OR last_name:" + name + " OR name_variant:" + name + " AND " +
"field:" + field;
return find(context, queryString);
return find(queryString);
}
@Override
public List<AuthorityValue> findByAuthorityMetadata(Context context, String schema, String element,
public List<AuthorityValue> findByAuthorityMetadata(String schema, String element,
String qualifier, String value) {
String field = fieldParameter(schema, element, qualifier);
String queryString = "all_Labels:" + value + " AND field:" + field;
return find(context, queryString);
return find(queryString);
}
@Override
public List<AuthorityValue> findOrcidHolders(Context context) {
public List<AuthorityValue> findOrcidHolders() {
String queryString = "orcid_id:*";
return find(context, queryString);
return find(queryString);
}
@Override
public List<AuthorityValue> findAll(Context context) {
public List<AuthorityValue> findAll() {
String queryString = "*:*";
return find(context, queryString);
return find(queryString);
}
@Override
@@ -204,7 +201,7 @@ public class AuthorityValueServiceImpl implements AuthorityValueService {
return fromAuthority;
}
protected List<AuthorityValue> find(Context context, String queryString) {
protected List<AuthorityValue> find(String queryString) {
List<AuthorityValue> findings = new ArrayList<AuthorityValue>();
try {
SolrQuery solrQuery = new SolrQuery();
@@ -220,8 +217,7 @@ public class AuthorityValueServiceImpl implements AuthorityValueService {
}
}
} catch (Exception e) {
log.error(LogHelper.getHeader(context, "Error while retrieving AuthorityValue from solr",
"query: " + queryString), e);
log.error("Error while retrieving AuthorityValue from solr. query: " + queryString, e);
}
return findings;

View File

@@ -133,11 +133,11 @@ public class UpdateAuthorities {
if (selectedIDs != null && !selectedIDs.isEmpty()) {
authorities = new ArrayList<>();
for (String selectedID : selectedIDs) {
AuthorityValue byUID = authorityValueService.findByUID(context, selectedID);
AuthorityValue byUID = authorityValueService.findByUID(selectedID);
authorities.add(byUID);
}
} else {
authorities = authorityValueService.findAll(context);
authorities = authorityValueService.findAll();
}
if (authorities != null) {

View File

@@ -148,12 +148,12 @@ public class DSpaceAuthorityIndexer implements AuthorityIndexerInterface, Initia
!metadataAuthorityKey.startsWith(AuthorityValueService.GENERATE)) {
// !uid.startsWith(AuthorityValueGenerator.GENERATE) is not strictly
// necessary here but it prevents exceptions in solr
AuthorityValue value = authorityValueService.findByUID(context, metadataAuthorityKey);
AuthorityValue value = authorityValueService.findByUID(metadataAuthorityKey);
if (value != null) {
return value;
}
}
return authorityValueService.generate(context, metadataAuthorityKey,
return authorityValueService.generate(metadataAuthorityKey,
metadataContent, metadataField.replaceAll("\\.", "_"));
}

View File

@@ -11,7 +11,6 @@ import java.util.List;
import org.apache.solr.common.SolrDocument;
import org.dspace.authority.AuthorityValue;
import org.dspace.core.Context;
/**
* This service contains all methods for using authority values
@@ -25,32 +24,125 @@ public interface AuthorityValueService {
public static final String SPLIT = "::";
public static final String GENERATE = "will be generated" + SPLIT;
public AuthorityValue generate(Context context, String authorityKey, String content, String field);
/**
* Generates an {@link AuthorityValue} based on the given parameters.
*
* @param authorityKey the authority key to be assigned to the generated authority value
* @param content the content of the generated authority value
* @param field the field of the generated authority value
* @return the generated {@link AuthorityValue}
*/
public AuthorityValue generate(String authorityKey, String content, String field);
/**
* Updates an AuthorityValue.
*
* @param value the AuthorityValue to be updated
* @return the updated AuthorityValue
*/
public AuthorityValue update(AuthorityValue value);
public AuthorityValue findByUID(Context context, String authorityID);
/**
* Finds an AuthorityValue based on the provided authorityID.
*
* @param authorityID the authority ID used to search for the AuthorityValue
* @return the found AuthorityValue, or null if no match is found
*/
public AuthorityValue findByUID(String authorityID);
public List<AuthorityValue> findByValue(Context context, String field, String value);
/**
* Finds AuthorityValues in the given context based on field and value.
*
* @param field the field to search for AuthorityValues
* @param value the value to search for AuthorityValues
* @return a list of found AuthorityValues matching the given field and value, or an empty list if no match is found
*/
public List<AuthorityValue> findByValue(String field, String value);
public AuthorityValue findByOrcidID(Context context, String orcid_id);
/**
* Finds an {@link AuthorityValue} based on the provided ORCID ID.
*
* @param orcid_id the ORCID ID used to search for the AuthorityValue
* @return the found AuthorityValue, or null if no match is found
*/
public AuthorityValue findByOrcidID(String orcid_id);
public List<AuthorityValue> findByName(Context context, String schema, String element, String qualifier,
/**
* Finds {@link AuthorityValue}s based on the provided metadata schema, element, qualifier, and name.
*
* @param schema the schema of the AuthorityValue
* @param element the element of the AuthorityValue
* @param qualifier the qualifier of the AuthorityValue
* @param name the name of the AuthorityValue
* @return a list of found AuthorityValues matching the given schema, element, qualifier, and name,
* or an empty list if no match is found
*/
public List<AuthorityValue> findByName(String schema, String element, String qualifier,
String name);
public List<AuthorityValue> findByAuthorityMetadata(Context context, String schema, String element,
/**
* Finds {@link AuthorityValue}s based on the provided metadata schema, element, qualifier, and value.
*
* @param schema the schema of the AuthorityValue
* @param element the element of the AuthorityValue
* @param qualifier the qualifier of the AuthorityValue
* @param value the value of the AuthorityValue
* @return a list of found AuthorityValues matching the given schema, element, qualifier, and value,
* or an empty list if no match is found
*/
public List<AuthorityValue> findByAuthorityMetadata(String schema, String element,
String qualifier, String value);
public List<AuthorityValue> findByExactValue(Context context, String field, String value);
/**
* Finds {@link AuthorityValue}s in the given context based on the exact field and value.
*
* @param field the field to search for AuthorityValues
* @param value the value to search for AuthorityValues
* @return a list of found AuthorityValues matching the given field and value,
* or an empty list if no match is found
*/
public List<AuthorityValue> findByExactValue(String field, String value);
public List<AuthorityValue> findByValue(Context context, String schema, String element, String qualifier,
/**
* Finds {@link AuthorityValue}s based on the provided metadata schema, element, qualifier, and value.
*
* @param schema the schema of the AuthorityValue
* @param element the element of the AuthorityValue
* @param qualifier the qualifier of the AuthorityValue
* @param value the value of the AuthorityValue
* @return a list of found AuthorityValues matching the given schema, element, qualifier, and value,
* or an empty list if no match is found
*/
public List<AuthorityValue> findByValue(String schema, String element, String qualifier,
String value);
public List<AuthorityValue> findOrcidHolders(Context context);
/**
* Finds AuthorityValues that are ORCID person authority values.
*
* @return a list of AuthorityValues or an empty list if no matching values are found
*/
public List<AuthorityValue> findOrcidHolders();
public List<AuthorityValue> findAll(Context context);
/**
* Retrieves all AuthorityValues from Solr.
*
* @return A list of all AuthorityValues.
*/
public List<AuthorityValue> findAll();
/**
* Converts a SolrDocument into an AuthorityValue object.
*
* @param solrDocument the SolrDocument to convert
* @return the converted AuthorityValue object
*/
public AuthorityValue fromSolr(SolrDocument solrDocument);
/**
* Retrieves the type of authority value based on the provided metadata string.
*
* @param metadataString the metadata string used to determine the authority value type
* @return the {@link AuthorityValue} representing the type of authority value, or null if no match is found
*/
public AuthorityValue getAuthorityValueType(String metadataString);
}

View File

@@ -16,6 +16,7 @@ import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import org.apache.commons.collections4.CollectionUtils;
@@ -48,6 +49,7 @@ import org.dspace.discovery.indexobject.IndexableItem;
import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group;
import org.dspace.eperson.service.GroupService;
import org.dspace.services.ConfigurationService;
import org.dspace.workflow.WorkflowItemService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -84,6 +86,8 @@ public class AuthorizeServiceImpl implements AuthorizeService {
protected WorkflowItemService workflowItemService;
@Autowired(required = true)
private SearchService searchService;
@Autowired(required = true)
private ConfigurationService configurationService;
protected AuthorizeServiceImpl() {
@@ -508,17 +512,26 @@ public class AuthorizeServiceImpl implements AuthorizeService {
return resourcePolicyService.find(c, o, actionID);
}
@Override
public void inheritPolicies(Context c, DSpaceObject src, DSpaceObject dest)
throws SQLException, AuthorizeException {
inheritPolicies(c, src, dest, false);
}
@Override
public void inheritPolicies(Context c, DSpaceObject src,
DSpaceObject dest) throws SQLException, AuthorizeException {
DSpaceObject dest, boolean includeCustom) throws SQLException, AuthorizeException {
// find all policies for the source object
List<ResourcePolicy> policies = getPolicies(c, src);
//Only inherit non-ADMIN policies (since ADMIN policies are automatically inherited)
//and non-custom policies as these are manually applied when appropriate
// Only inherit non-ADMIN policies (since ADMIN policies are automatically inherited)
// and non-custom policies (usually applied manually?) UNLESS specified otherwise with includCustom
// (for example, item.addBundle() will inherit custom policies to enforce access conditions)
List<ResourcePolicy> nonAdminPolicies = new ArrayList<>();
for (ResourcePolicy rp : policies) {
if (rp.getAction() != Constants.ADMIN && !StringUtils.equals(rp.getRpType(), ResourcePolicy.TYPE_CUSTOM)) {
if (rp.getAction() != Constants.ADMIN && (!StringUtils.equals(rp.getRpType(), ResourcePolicy.TYPE_CUSTOM)
|| (includeCustom && StringUtils.equals(rp.getRpType(), ResourcePolicy.TYPE_CUSTOM)
&& isNotAlreadyACustomRPOfThisTypeOnDSO(c, dest)))) {
nonAdminPolicies.add(rp);
}
}
@@ -944,4 +957,100 @@ public class AuthorizeServiceImpl implements AuthorizeService {
return query + " AND ";
}
}
/**
* Add the default policies, which have not been already added to the given DSpace object
*
* @param context The relevant DSpace Context.
* @param dso The DSpace Object to add policies to
* @param defaultCollectionPolicies list of policies
* @throws SQLException An exception that provides information on a database access error or other errors.
* @throws AuthorizeException Exception indicating the current user of the context does not have permission
* to perform a particular action.
*/
@Override
public void addDefaultPoliciesNotInPlace(Context context, DSpaceObject dso,
List<ResourcePolicy> defaultCollectionPolicies) throws SQLException, AuthorizeException {
boolean appendMode = configurationService
.getBooleanProperty("core.authorization.installitem.inheritance-read.append-mode", false);
for (ResourcePolicy defaultPolicy : defaultCollectionPolicies) {
if (!isAnIdenticalPolicyAlreadyInPlace(context, dso, defaultPolicy.getGroup(), Constants.READ,
defaultPolicy.getID()) &&
(!appendMode && isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso) ||
appendMode && shouldBeAppended(context, dso, defaultPolicy))) {
ResourcePolicy newPolicy = resourcePolicyService.clone(context, defaultPolicy);
newPolicy.setdSpaceObject(dso);
newPolicy.setAction(Constants.READ);
newPolicy.setRpType(ResourcePolicy.TYPE_INHERITED);
resourcePolicyService.update(context, newPolicy);
}
}
}
/**
* Add a list of custom policies if there are already NO custom policies in place
*
*/
@Override
public void addCustomPoliciesNotInPlace(Context context, DSpaceObject dso, List<ResourcePolicy> customPolicies)
throws SQLException, AuthorizeException {
boolean customPoliciesAlreadyInPlace =
findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM).size() > 0;
if (!customPoliciesAlreadyInPlace) {
addPolicies(context, customPolicies, dso);
}
}
/**
* Check whether or not there is already an RP on the given dso, which has actionId={@link Constants.READ} and
* resourceTypeId={@link ResourcePolicy.TYPE_CUSTOM}
*
* @param context DSpace context
* @param dso DSpace object to check for custom read RP
* @return True if there is no RP on the item with custom read RP, otherwise false
* @throws SQLException If something goes wrong retrieving the RP on the DSO
*/
private boolean isNotAlreadyACustomRPOfThisTypeOnDSO(Context context, DSpaceObject dso) throws SQLException {
return isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso, Constants.READ);
}
private boolean isNotAlreadyACustomRPOfThisTypeOnDSO(Context context, DSpaceObject dso, int action)
throws SQLException {
List<ResourcePolicy> rps = resourcePolicyService.find(context, dso, action);
for (ResourcePolicy rp : rps) {
if (rp.getRpType() != null && rp.getRpType().equals(ResourcePolicy.TYPE_CUSTOM)) {
return false;
}
}
return true;
}
/**
* Check if the provided default policy should be appended or not to the final
* item. If an item has at least one custom READ policy any anonymous READ
* policy with empty start/end date should be skipped
*
* @param context DSpace context
* @param dso DSpace object to check for custom read RP
* @param defaultPolicy The policy to check
* @return
* @throws SQLException If something goes wrong retrieving the RP on the DSO
*/
private boolean shouldBeAppended(Context context, DSpaceObject dso, ResourcePolicy defaultPolicy)
throws SQLException {
boolean hasCustomPolicy = resourcePolicyService.find(context, dso, Constants.READ)
.stream()
.filter(rp -> (Objects.nonNull(rp.getRpType()) &&
Objects.equals(rp.getRpType(), ResourcePolicy.TYPE_CUSTOM)))
.findFirst()
.isPresent();
boolean isAnonymousGroup = Objects.nonNull(defaultPolicy.getGroup())
&& StringUtils.equals(defaultPolicy.getGroup().getName(), Group.ANONYMOUS);
boolean datesAreNull = Objects.isNull(defaultPolicy.getStartDate())
&& Objects.isNull(defaultPolicy.getEndDate());
return !(hasCustomPolicy && isAnonymousGroup && datesAreNull);
}
}

View File

@@ -322,6 +322,19 @@ public interface AuthorizeService {
*/
public List<ResourcePolicy> getPoliciesActionFilterExceptRpType(Context c, DSpaceObject o, int actionID,
String rpType) throws SQLException;
/**
* Add policies to an object to match those from a previous object
*
* @param c context
* @param src source of policies
* @param dest destination of inherited policies
* @param includeCustom whether TYPE_CUSTOM policies should be inherited
* @throws SQLException if there's a database problem
* @throws AuthorizeException if the current user is not authorized to add these policies
*/
public void inheritPolicies(Context c, DSpaceObject src, DSpaceObject dest, boolean includeCustom)
throws SQLException, AuthorizeException;
/**
* Add policies to an object to match those from a previous object
*
@@ -605,4 +618,10 @@ public interface AuthorizeService {
public void replaceAllPolicies(Context context, DSpaceObject source, DSpaceObject dest)
throws SQLException, AuthorizeException;
public void addDefaultPoliciesNotInPlace(Context context, DSpaceObject dso,
List<ResourcePolicy> defaultCollectionPolicies) throws SQLException, AuthorizeException;
public void addCustomPoliciesNotInPlace(Context context, DSpaceObject dso,
List<ResourcePolicy> defaultCollectionPolicies) throws SQLException, AuthorizeException;
}

View File

@@ -131,7 +131,7 @@ public final class CheckerCommand {
collector.collect(context, info);
}
context.uncacheEntity(bitstream);
context.commit();
bitstream = dispatcher.next();
}
}

View File

@@ -56,8 +56,8 @@ public class MostRecentChecksumDAOImpl extends AbstractHibernateDAO<MostRecentCh
criteriaQuery.where(criteriaBuilder.and(
criteriaBuilder.equal(mostRecentChecksumRoot.get(MostRecentChecksum_.toBeProcessed), false),
criteriaBuilder
.lessThanOrEqualTo(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), startDate),
criteriaBuilder.greaterThan(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), endDate)
.lessThanOrEqualTo(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), endDate),
criteriaBuilder.greaterThan(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), startDate)
)
);
List<Order> orderList = new LinkedList<>();

View File

@@ -49,7 +49,7 @@ public class BitstreamFormatServiceImpl implements BitstreamFormatService {
* translate support-level ID to string. MUST keep this table in sync
* with support level definitions above.
*/
protected final String supportLevelText[] =
protected final String[] supportLevelText =
{"UNKNOWN", "KNOWN", "SUPPORTED"};

View File

@@ -124,13 +124,11 @@ public class EntityTypeServiceImpl implements EntityTypeService {
@Override
public List<String> getSubmitAuthorizedTypes(Context context)
throws SQLException, SolrServerException, IOException {
List<String> types = new ArrayList<>();
StringBuilder query = null;
EPerson currentUser = context.getCurrentUser();
if (!authorizeService.isAdmin(context)) {
String userId = "";
EPerson currentUser = context.getCurrentUser();
if (currentUser != null) {
userId = currentUser.getID().toString();
String userId = currentUser.getID().toString();
query = new StringBuilder();
query.append("submit:(e").append(userId);
}
@@ -145,7 +143,10 @@ public class EntityTypeServiceImpl implements EntityTypeService {
}
query.append(group.getID());
}
query.append(")");
if (query != null) {
query.append(")");
}
}
SolrQuery sQuery = new SolrQuery("*:*");
@@ -160,6 +161,8 @@ public class EntityTypeServiceImpl implements EntityTypeService {
sQuery.setFacetSort(FacetParams.FACET_SORT_INDEX);
QueryResponse qResp = solrSearchCore.getSolr().query(sQuery, solrSearchCore.REQUEST_METHOD);
FacetField facetField = qResp.getFacetField("search.entitytype");
List<String> types = new ArrayList<>();
if (Objects.nonNull(facetField)) {
for (Count c : facetField.getValues()) {
types.add(c.getName());

View File

@@ -480,7 +480,7 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
// now add authorization policies from owning item
// hmm, not very "multiple-inclusion" friendly
authorizeService.inheritPolicies(context, item, bundle);
authorizeService.inheritPolicies(context, item, bundle, true);
// Add the bundle to in-memory list
item.addBundle(bundle);
@@ -1046,8 +1046,8 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
// if come from InstallItem: remove all submission/workflow policies
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_SUBMISSION);
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_WORKFLOW);
addCustomPoliciesNotInPlace(context, mybundle, defaultItemPolicies);
addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionBundlePolicies);
authorizeService.addCustomPoliciesNotInPlace(context, mybundle, defaultItemPolicies);
authorizeService.addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionBundlePolicies);
for (Bitstream bitstream : mybundle.getBitstreams()) {
// If collection has default READ policies, remove the bundle's READ policies.
@@ -1093,8 +1093,8 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
throws SQLException, AuthorizeException {
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_SUBMISSION);
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_WORKFLOW);
addCustomPoliciesNotInPlace(context, bitstream, defaultItemPolicies);
addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionPolicies);
authorizeService.addCustomPoliciesNotInPlace(context, bitstream, defaultItemPolicies);
authorizeService.addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionPolicies);
}
@Override
@@ -1132,7 +1132,7 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
authorizeService.removeAllPoliciesByDSOAndType(context, item, ResourcePolicy.TYPE_WORKFLOW);
// add default policies only if not already in place
addDefaultPoliciesNotInPlace(context, item, defaultCollectionPolicies);
authorizeService.addDefaultPoliciesNotInPlace(context, item, defaultCollectionPolicies);
} finally {
context.restoreAuthSystemState();
}
@@ -1322,91 +1322,7 @@ prevent the generation of resource policy entry values with null dspace_object a
*/
/**
* Add the default policies, which have not been already added to the given DSpace object
*
* @param context The relevant DSpace Context.
* @param dso The DSpace Object to add policies to
* @param defaultCollectionPolicies list of policies
* @throws SQLException An exception that provides information on a database access error or other errors.
* @throws AuthorizeException Exception indicating the current user of the context does not have permission
* to perform a particular action.
*/
protected void addDefaultPoliciesNotInPlace(Context context, DSpaceObject dso,
List<ResourcePolicy> defaultCollectionPolicies) throws SQLException, AuthorizeException {
boolean appendMode = configurationService
.getBooleanProperty("core.authorization.installitem.inheritance-read.append-mode", false);
for (ResourcePolicy defaultPolicy : defaultCollectionPolicies) {
if (!authorizeService
.isAnIdenticalPolicyAlreadyInPlace(context, dso, defaultPolicy.getGroup(), Constants.READ,
defaultPolicy.getID()) &&
(!appendMode && isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso) ||
appendMode && shouldBeAppended(context, dso, defaultPolicy))) {
ResourcePolicy newPolicy = resourcePolicyService.clone(context, defaultPolicy);
newPolicy.setdSpaceObject(dso);
newPolicy.setAction(Constants.READ);
newPolicy.setRpType(ResourcePolicy.TYPE_INHERITED);
resourcePolicyService.update(context, newPolicy);
}
}
}
private void addCustomPoliciesNotInPlace(Context context, DSpaceObject dso, List<ResourcePolicy> customPolicies)
throws SQLException, AuthorizeException {
boolean customPoliciesAlreadyInPlace = authorizeService
.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM).size() > 0;
if (!customPoliciesAlreadyInPlace) {
authorizeService.addPolicies(context, customPolicies, dso);
}
}
/**
* Check whether or not there is already an RP on the given dso, which has actionId={@link Constants.READ} and
* resourceTypeId={@link ResourcePolicy.TYPE_CUSTOM}
*
* @param context DSpace context
* @param dso DSpace object to check for custom read RP
* @return True if there is no RP on the item with custom read RP, otherwise false
* @throws SQLException If something goes wrong retrieving the RP on the DSO
*/
private boolean isNotAlreadyACustomRPOfThisTypeOnDSO(Context context, DSpaceObject dso) throws SQLException {
List<ResourcePolicy> readRPs = resourcePolicyService.find(context, dso, Constants.READ);
for (ResourcePolicy readRP : readRPs) {
if (readRP.getRpType() != null && readRP.getRpType().equals(ResourcePolicy.TYPE_CUSTOM)) {
return false;
}
}
return true;
}
/**
* Check if the provided default policy should be appended or not to the final
* item. If an item has at least one custom READ policy any anonymous READ
* policy with empty start/end date should be skipped
*
* @param context DSpace context
* @param dso DSpace object to check for custom read RP
* @param defaultPolicy The policy to check
* @return
* @throws SQLException If something goes wrong retrieving the RP on the DSO
*/
private boolean shouldBeAppended(Context context, DSpaceObject dso, ResourcePolicy defaultPolicy)
throws SQLException {
boolean hasCustomPolicy = resourcePolicyService.find(context, dso, Constants.READ)
.stream()
.filter(rp -> (Objects.nonNull(rp.getRpType()) &&
Objects.equals(rp.getRpType(), ResourcePolicy.TYPE_CUSTOM)))
.findFirst()
.isPresent();
boolean isAnonimousGroup = Objects.nonNull(defaultPolicy.getGroup())
&& StringUtils.equals(defaultPolicy.getGroup().getName(), Group.ANONYMOUS);
boolean datesAreNull = Objects.isNull(defaultPolicy.getStartDate())
&& Objects.isNull(defaultPolicy.getEndDate());
return !(hasCustomPolicy && isAnonimousGroup && datesAreNull);
}
/**
* Returns an iterator of Items possessing the passed metadata field, or only

View File

@@ -68,7 +68,7 @@ public class Choices {
/**
* descriptive labels for confidence values
*/
private static final int confidenceValue[] = {
private static final int[] confidenceValue = {
CF_UNSET,
CF_NOVALUE,
CF_REJECTED,
@@ -78,7 +78,7 @@ public class Choices {
CF_UNCERTAIN,
CF_ACCEPTED,
};
private static final String confidenceText[] = {
private static final String[] confidenceText = {
"UNSET",
"NOVALUE",
"REJECTED",
@@ -94,7 +94,7 @@ public class Choices {
/**
* The set of values returned by the authority
*/
public Choice values[] = null;
public Choice[] values = null;
/**
* The confidence level that applies to all values in this result set
@@ -133,9 +133,9 @@ public class Choices {
* @param confidence confidence level
* @param more whether more values
*/
public Choices(Choice values[], int start, int total, int confidence, boolean more) {
public Choices(Choice[] values, int start, int total, int confidence, boolean more) {
super();
this.values = (Choice[]) ArrayUtils.clone(values);
this.values = ArrayUtils.clone(values);
this.start = start;
this.total = total;
this.confidence = confidence;
@@ -152,9 +152,9 @@ public class Choices {
* @param more whether more values
* @param defaultSelected default selected value
*/
public Choices(Choice values[], int start, int total, int confidence, boolean more, int defaultSelected) {
public Choices(Choice[] values, int start, int total, int confidence, boolean more, int defaultSelected) {
super();
this.values = (Choice[]) ArrayUtils.clone(values);
this.values = ArrayUtils.clone(values);
this.start = start;
this.total = total;
this.confidence = confidence;

View File

@@ -66,7 +66,7 @@ public class DCInputAuthority extends SelfNamedPlugin implements ChoiceAuthority
* The map of the input form reader associated to use for a specific java locale
*/
private static Map<Locale, DCInputsReader> dcis = null;
private static String pluginNames[] = null;
private static String[] pluginNames = null;
public DCInputAuthority() {
super();
@@ -87,7 +87,7 @@ public class DCInputAuthority extends SelfNamedPlugin implements ChoiceAuthority
initPluginNames();
}
return (String[]) ArrayUtils.clone(pluginNames);
return ArrayUtils.clone(pluginNames);
}
private static synchronized void initPluginNames() {
@@ -179,7 +179,7 @@ public class DCInputAuthority extends SelfNamedPlugin implements ChoiceAuthority
String[] labelsLocale = labels.get(currentLocale.getLanguage());
for (int i = 0; i < valuesLocale.length; ++i) {
if (text.equalsIgnoreCase(valuesLocale[i])) {
Choice v[] = new Choice[1];
Choice[] v = new Choice[1];
v[0] = new Choice(String.valueOf(i), valuesLocale[i], labelsLocale[i]);
return new Choices(v, 0, v.length, Choices.CF_UNCERTAIN, false, 0);
}

View File

@@ -35,23 +35,25 @@ import org.xml.sax.InputSource;
* from {@code ${dspace.dir}/config/controlled-vocabularies/*.xml} and turns
* them into autocompleting authorities.
*
* Configuration: This MUST be configured as a self-named plugin, e.g.: {@code
* plugin.selfnamed.org.dspace.content.authority.ChoiceAuthority = \
* <p>Configuration: This MUST be configured as a self-named plugin, e.g.: {@code
* plugin.selfnamed.org.dspace.content.authority.ChoiceAuthority =
* org.dspace.content.authority.DSpaceControlledVocabulary
* }
*
* It AUTOMATICALLY configures a plugin instance for each XML file in the
* <p>It AUTOMATICALLY configures a plugin instance for each XML file in the
* controlled vocabularies directory. The name of the plugin is the basename of
* the file; e.g., {@code ${dspace.dir}/config/controlled-vocabularies/nsi.xml}
* would generate a plugin called "nsi".
*
* Each configured plugin comes with three configuration options: {@code
* vocabulary.plugin._plugin_.hierarchy.store = <true|false>
* # Store entire hierarchy along with selected value. Default: TRUE
* vocabulary.plugin._plugin_.hierarchy.suggest =
* <true|false> # Display entire hierarchy in the suggestion list. Default: TRUE
* vocabulary.plugin._plugin_.delimiter = "<string>"
* # Delimiter to use when building hierarchy strings. Default: "::"
* <p>Each configured plugin comes with three configuration options:
* <ul>
* <li>{@code vocabulary.plugin._plugin_.hierarchy.store = <true|false>
* # Store entire hierarchy along with selected value. Default: TRUE}</li>
* <li>{@code vocabulary.plugin._plugin_.hierarchy.suggest =
* <true|false> # Display entire hierarchy in the suggestion list. Default: TRUE}</li>
* <li>{@code vocabulary.plugin._plugin_.delimiter = "<string>"
* # Delimiter to use when building hierarchy strings. Default: "::"}</li>
* </ul>
* }
*
* @author Michael B. Klein
@@ -59,16 +61,17 @@ import org.xml.sax.InputSource;
public class DSpaceControlledVocabulary extends SelfNamedPlugin implements HierarchicalAuthority {
private static Logger log = org.apache.logging.log4j.LogManager.getLogger(DSpaceControlledVocabulary.class);
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger();
protected static String xpathTemplate = "//node[contains(translate(@label,'ABCDEFGHIJKLMNOPQRSTUVWXYZ'," +
"'abcdefghijklmnopqrstuvwxyz'),'%s')]";
protected static String idTemplate = "//node[@id = '%s']";
protected static String labelTemplate = "//node[@label = '%s']";
"'abcdefghijklmnopqrstuvwxyz'),%s)]";
protected static String idTemplate = "//node[@id = %s]";
protected static String idTemplateQuoted = "//node[@id = '%s']";
protected static String labelTemplate = "//node[@label = %s]";
protected static String idParentTemplate = "//node[@id = '%s']/parent::isComposedBy/parent::node";
protected static String rootTemplate = "/node";
protected static String idAttribute = "id";
protected static String labelAttribute = "label";
protected static String pluginNames[] = null;
protected static String[] pluginNames = null;
protected String vocabularyName = null;
protected InputSource vocabulary = null;
protected Boolean suggestHierarchy = false;
@@ -94,7 +97,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
initPluginNames();
}
return (String[]) ArrayUtils.clone(pluginNames);
return ArrayUtils.clone(pluginNames);
}
private static synchronized void initPluginNames() {
@@ -110,7 +113,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
File.separator + "config" +
File.separator + "controlled-vocabularies";
String[] xmlFiles = (new File(vocabulariesPath)).list(new xmlFilter());
List<String> names = new ArrayList<String>();
List<String> names = new ArrayList<>();
for (String filename : xmlFiles) {
names.add((new File(filename)).getName().replace(".xml", ""));
}
@@ -178,15 +181,23 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
public Choices getMatches(String text, int start, int limit, String locale) {
init(locale);
log.debug("Getting matches for '" + text + "'");
String xpathExpression = "";
String[] textHierarchy = text.split(hierarchyDelimiter, -1);
StringBuilder xpathExpressionBuilder = new StringBuilder();
for (int i = 0; i < textHierarchy.length; i++) {
xpathExpression +=
String.format(xpathTemplate, textHierarchy[i].replaceAll("'", "&apos;").toLowerCase());
xpathExpressionBuilder.append(String.format(xpathTemplate, "$var" + i));
}
String xpathExpression = xpathExpressionBuilder.toString();
XPath xpath = XPathFactory.newInstance().newXPath();
int total = 0;
List<Choice> choices = new ArrayList<Choice>();
xpath.setXPathVariableResolver(variableName -> {
String varName = variableName.getLocalPart();
if (varName.startsWith("var")) {
int index = Integer.parseInt(varName.substring(3));
return textHierarchy[index].toLowerCase();
}
throw new IllegalArgumentException("Unexpected variable: " + varName);
});
int total;
List<Choice> choices;
try {
NodeList results = (NodeList) xpath.evaluate(xpathExpression, vocabulary, XPathConstants.NODESET);
total = results.getLength();
@@ -202,15 +213,23 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
@Override
public Choices getBestMatch(String text, String locale) {
init(locale);
log.debug("Getting best matches for '" + text + "'");
String xpathExpression = "";
log.debug("Getting best matches for {}'", text);
String[] textHierarchy = text.split(hierarchyDelimiter, -1);
StringBuilder xpathExpressionBuilder = new StringBuilder();
for (int i = 0; i < textHierarchy.length; i++) {
xpathExpression +=
String.format(valueTemplate, textHierarchy[i].replaceAll("'", "&apos;"));
xpathExpressionBuilder.append(String.format(valueTemplate, "$var" + i));
}
String xpathExpression = xpathExpressionBuilder.toString();
XPath xpath = XPathFactory.newInstance().newXPath();
List<Choice> choices = new ArrayList<Choice>();
xpath.setXPathVariableResolver(variableName -> {
String varName = variableName.getLocalPart();
if (varName.startsWith("var")) {
int index = Integer.parseInt(varName.substring(3));
return textHierarchy[index];
}
throw new IllegalArgumentException("Unexpected variable: " + varName);
});
List<Choice> choices;
try {
NodeList results = (NodeList) xpath.evaluate(xpathExpression, vocabulary, XPathConstants.NODESET);
choices = getChoicesFromNodeList(results, 0, 1);
@@ -258,7 +277,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
@Override
public Choices getChoicesByParent(String authorityName, String parentId, int start, int limit, String locale) {
init(locale);
String xpathExpression = String.format(idTemplate, parentId);
String xpathExpression = String.format(idTemplateQuoted, parentId);
return getChoicesByXpath(xpathExpression, start, limit);
}
@@ -282,15 +301,12 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
}
private boolean isRootElement(Node node) {
if (node != null && node.getOwnerDocument().getDocumentElement().equals(node)) {
return true;
}
return false;
return node != null && node.getOwnerDocument().getDocumentElement().equals(node);
}
private Node getNode(String key, String locale) throws XPathExpressionException {
init(locale);
String xpathExpression = String.format(idTemplate, key);
String xpathExpression = String.format(idTemplateQuoted, key);
Node node = getNodeFromXPath(xpathExpression);
return node;
}
@@ -302,7 +318,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
}
private List<Choice> getChoicesFromNodeList(NodeList results, int start, int limit) {
List<Choice> choices = new ArrayList<Choice>();
List<Choice> choices = new ArrayList<>();
for (int i = 0; i < results.getLength(); i++) {
if (i < start) {
continue;
@@ -321,17 +337,17 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
private Map<String, String> addOtherInformation(String parentCurr, String noteCurr,
List<String> childrenCurr, String authorityCurr) {
Map<String, String> extras = new HashMap<String, String>();
Map<String, String> extras = new HashMap<>();
if (StringUtils.isNotBlank(parentCurr)) {
extras.put("parent", parentCurr);
}
if (StringUtils.isNotBlank(noteCurr)) {
extras.put("note", noteCurr);
}
if (childrenCurr.size() > 0) {
extras.put("hasChildren", "true");
} else {
if (childrenCurr.isEmpty()) {
extras.put("hasChildren", "false");
} else {
extras.put("hasChildren", "true");
}
extras.put("id", authorityCurr);
return extras;
@@ -386,7 +402,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
}
private List<String> getChildren(Node node) {
List<String> children = new ArrayList<String>();
List<String> children = new ArrayList<>();
NodeList childNodes = node.getChildNodes();
for (int ci = 0; ci < childNodes.getLength(); ci++) {
Node firstChild = childNodes.item(ci);
@@ -409,7 +425,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
private boolean isSelectable(Node node) {
Node selectableAttr = node.getAttributes().getNamedItem("selectable");
if (null != selectableAttr) {
return Boolean.valueOf(selectableAttr.getNodeValue());
return Boolean.parseBoolean(selectableAttr.getNodeValue());
} else { // Default is true
return true;
}
@@ -436,7 +452,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Hiera
}
private Choices getChoicesByXpath(String xpathExpression, int start, int limit) {
List<Choice> choices = new ArrayList<Choice>();
List<Choice> choices = new ArrayList<>();
XPath xpath = XPathFactory.newInstance().newXPath();
try {
Node parentNode = (Node) xpath.evaluate(xpathExpression, vocabulary, XPathConstants.NODE);

View File

@@ -14,7 +14,7 @@ package org.dspace.content.authority;
public class SampleAuthority implements ChoiceAuthority {
private String pluginInstanceName;
protected static String values[] = {
protected static String[] values = {
"sun",
"mon",
"tue",
@@ -24,7 +24,7 @@ public class SampleAuthority implements ChoiceAuthority {
"sat"
};
protected static String labels[] = {
protected static String[] labels = {
"Sunday",
"Monday",
"Tuesday",
@@ -37,7 +37,7 @@ public class SampleAuthority implements ChoiceAuthority {
@Override
public Choices getMatches(String query, int start, int limit, String locale) {
int dflt = -1;
Choice v[] = new Choice[values.length];
Choice[] v = new Choice[values.length];
for (int i = 0; i < values.length; ++i) {
v[i] = new Choice(String.valueOf(i), values[i], labels[i]);
if (values[i].equalsIgnoreCase(query)) {
@@ -51,7 +51,7 @@ public class SampleAuthority implements ChoiceAuthority {
public Choices getBestMatch(String text, String locale) {
for (int i = 0; i < values.length; ++i) {
if (text.equalsIgnoreCase(values[i])) {
Choice v[] = new Choice[1];
Choice[] v = new Choice[1];
v[0] = new Choice(String.valueOf(i), values[i], labels[i]);
return new Choices(v, 0, v.length, Choices.CF_UNCERTAIN, false, 0);
}

View File

@@ -46,7 +46,7 @@ public class AIPDIMCrosswalk
*/
@Override
public Namespace[] getNamespaces() {
Namespace result[] = new Namespace[1];
Namespace[] result = new Namespace[1];
result[0] = XSLTCrosswalk.DIM_NS;
return result;
}

View File

@@ -98,7 +98,7 @@ public class AIPTechMDCrosswalk implements IngestionCrosswalk, DisseminationCros
*/
@Override
public Namespace[] getNamespaces() {
Namespace result[] = new Namespace[1];
Namespace[] result = new Namespace[1];
result[0] = XSLTCrosswalk.DIM_NS;
return result;
}

View File

@@ -45,7 +45,7 @@ public class DIMDisseminationCrosswalk
protected final ItemService itemService = ContentServiceFactory.getInstance().getItemService();
private static final Namespace namespaces[] = {DIM_NS};
private static final Namespace[] namespaces = {DIM_NS};
@Override
public Namespace[] getNamespaces() {

View File

@@ -63,7 +63,7 @@ public class METSDisseminationCrosswalk
private static final Namespace METS_NS = Namespace
.getNamespace("mets", "http://www.loc.gov/METS/");
private static final Namespace namespaces[] = {METS_NS, MODS_NS, XLINK_NS};
private static final Namespace[] namespaces = {METS_NS, MODS_NS, XLINK_NS};
/**
* URL of METS XML Schema

View File

@@ -70,7 +70,7 @@ public class METSRightsCrosswalk
private String schemaLocation =
METSRights_NS.getURI() + " http://cosimo.stanford.edu/sdr/metsrights.xsd";
private static final Namespace namespaces[] = {METSRights_NS};
private static final Namespace[] namespaces = {METSRights_NS};
private static final Map<Integer, String> otherTypesMapping = new HashMap<Integer, String>();

View File

@@ -109,7 +109,7 @@ public class MODSDisseminationCrosswalk extends SelfNamedPlugin
* Fill in the plugin alias table from DSpace configuration entries
* for configuration files for flavors of MODS crosswalk:
*/
private static String aliases[] = null;
private static String[] aliases = null;
static {
List<String> aliasList = new ArrayList<>();
@@ -117,11 +117,11 @@ public class MODSDisseminationCrosswalk extends SelfNamedPlugin
for (String key : keys) {
aliasList.add(key.substring(CONFIG_PREFIX.length()));
}
aliases = (String[]) aliasList.toArray(new String[aliasList.size()]);
aliases = aliasList.toArray(new String[0]);
}
public static String[] getPluginNames() {
return (String[]) ArrayUtils.clone(aliases);
return ArrayUtils.clone(aliases);
}
/**
@@ -133,7 +133,7 @@ public class MODSDisseminationCrosswalk extends SelfNamedPlugin
private static final Namespace XLINK_NS =
Namespace.getNamespace("xlink", "http://www.w3.org/1999/xlink");
private static final Namespace namespaces[] = {MODS_NS, XLINK_NS};
private static final Namespace[] namespaces = {MODS_NS, XLINK_NS};
/**
* URL of MODS XML Schema
@@ -259,7 +259,7 @@ public class MODSDisseminationCrosswalk extends SelfNamedPlugin
while (pe.hasMoreElements()) {
String qdc = pe.nextElement();
String val = modsConfig.getProperty(qdc);
String pair[] = val.split("\\s+\\|\\s+", 2);
String[] pair = val.split("\\s+\\|\\s+", 2);
if (pair.length < 2) {
log.warn("Illegal MODS mapping in " + propsFile.toString() + ", line = " +
qdc + " = " + val);

View File

@@ -65,7 +65,7 @@ public class OREDisseminationCrosswalk
.getConfigurationService();
private static final Namespace namespaces[] = {ATOM_NS, ORE_NS, ORE_ATOM, RDF_NS, DCTERMS_NS, DS_NS};
private static final Namespace[] namespaces = {ATOM_NS, ORE_NS, ORE_ATOM, RDF_NS, DCTERMS_NS, DS_NS};
@Override
@@ -331,14 +331,14 @@ public class OREDisseminationCrosswalk
* @param sourceString source unescaped string
*/
private String encodeForURL(String sourceString) {
Character lowalpha[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
Character[] lowalpha = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
Character upalpha[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
Character[] upalpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
Character digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Character mark[] = {'-', '_', '.', '!', '~', '*', '\'', '/', '(', ')'};
Character[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Character[] mark = {'-', '_', '.', '!', '~', '*', '\'', '/', '(', ')'};
// reserved
//Character reserved[] = {';' , '/' , '?' , ':' , '@' , '&' , '=' , '+' , '$' , ',' ,'%', '#'};

View File

@@ -220,17 +220,17 @@ public class OREIngestionCrosswalk
* @param sourceString source unescaped string
*/
private String encodeForURL(String sourceString) {
Character lowalpha[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
Character[] lowalpha = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
Character upalpha[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
Character[] upalpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
Character digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Character mark[] = {'-', '_', '.', '!', '~', '*', '\'', '(', ')'};
Character[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Character[] mark = {'-', '_', '.', '!', '~', '*', '\'', '(', ')'};
// reserved
Character reserved[] = {';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '%', '#'};
Character[] reserved = {';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '%', '#'};
Set<Character> URLcharsSet = new HashSet<Character>();
URLcharsSet.addAll(Arrays.asList(lowalpha));

View File

@@ -20,9 +20,7 @@ import org.apache.logging.log4j.Logger;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Bitstream;
import org.dspace.content.BitstreamFormat;
import org.dspace.content.Bundle;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.BitstreamFormatService;
import org.dspace.content.service.BitstreamService;
@@ -58,7 +56,7 @@ public class PREMISCrosswalk
private final String schemaLocation =
PREMIS_NS.getURI() + " http://www.loc.gov/standards/premis/PREMIS-v1-0.xsd";
private static final Namespace namespaces[] = {PREMIS_NS};
private static final Namespace[] namespaces = {PREMIS_NS};
protected BitstreamService bitstreamService
= ContentServiceFactory.getInstance().getBitstreamService();
@@ -224,29 +222,17 @@ public class PREMISCrosswalk
// c. made-up name based on sequence ID and extension.
String sid = String.valueOf(bitstream.getSequenceID());
String baseUrl = configurationService.getProperty("dspace.ui.url");
String handle = null;
// get handle of parent Item of this bitstream, if there is one:
List<Bundle> bn = bitstream.getBundles();
if (bn.size() > 0) {
List<Item> bi = bn.get(0).getItems();
if (bi.size() > 0) {
handle = bi.get(0).getHandle();
}
}
// get or make up name for bitstream:
String bsName = bitstream.getName();
if (bsName == null) {
List<String> ext = bitstream.getFormat(context).getExtensions();
bsName = "bitstream_" + sid + (ext.size() > 0 ? ext.get(0) : "");
}
if (handle != null && baseUrl != null) {
if (baseUrl != null) {
oiv.setText(baseUrl
+ "/bitstream/"
+ URLEncoder.encode(handle, "UTF-8")
+ "/"
+ sid
+ "/"
+ URLEncoder.encode(bsName, "UTF-8"));
+ "/bitstreams/"
+ bitstream.getID()
+ "/download");
} else {
oiv.setText(URLEncoder.encode(bsName, "UTF-8"));
}

View File

@@ -109,7 +109,7 @@ public class QDCCrosswalk extends SelfNamedPlugin
private final Map<String, String> element2qdc = new HashMap<>();
// the XML namespaces from config file for this name.
private Namespace namespaces[] = null;
private Namespace[] namespaces = null;
private static final Namespace DCTERMS_NS =
Namespace.getNamespace("dcterms", "http://purl.org/dc/terms/");
@@ -139,7 +139,7 @@ public class QDCCrosswalk extends SelfNamedPlugin
* Fill in the plugin-name table from DSpace configuration entries
* for configuration files for flavors of QDC crosswalk:
*/
private static String aliases[] = null;
private static String[] aliases = null;
static {
initStatic();
@@ -433,7 +433,7 @@ public class QDCCrosswalk extends SelfNamedPlugin
if ("qualifieddc".equals(me.getName())) {
ingest(context, dso, me.getChildren(), createMissingMetadataFields);
} else if (element2qdc.containsKey(key)) {
String qdc[] = (element2qdc.get(key)).split("\\.");
String[] qdc = (element2qdc.get(key)).split("\\.");
MetadataField metadataField;
if (qdc.length == 3) {

View File

@@ -73,7 +73,7 @@ public class RoleCrosswalk
*/
@Override
public Namespace[] getNamespaces() {
Namespace result[] = new Namespace[1];
Namespace[] result = new Namespace[1];
result[0] = RoleDisseminator.DSROLES_NS;
return result;
}

View File

@@ -53,10 +53,10 @@ public class SimpleDCDisseminationCrosswalk extends SelfNamedPlugin
private static final String schemaLocation =
DC_NS.getURI() + " " + DC_XSD;
private static final Namespace namespaces[] =
private static final Namespace[] namespaces =
{DC_NS, XSI_NS};
private static final String aliases[] = {"SimpleDC", "DC"};
private static final String[] aliases = {"SimpleDC", "DC"};
protected final ItemService itemService = ContentServiceFactory.getInstance().getItemService();

View File

@@ -106,7 +106,7 @@ public class XSLTDisseminationCrosswalk
protected static final ConfigurationService configurationService
= DSpaceServicesFactory.getInstance().getConfigurationService();
private static final String aliases[] = makeAliases(DIRECTION);
private static final String[] aliases = makeAliases(DIRECTION);
public static String[] getPluginNames() {
return (String[]) ArrayUtils.clone(aliases);
@@ -116,7 +116,7 @@ public class XSLTDisseminationCrosswalk
// until there's an instance, so do it in constructor.
private String schemaLocation = null;
private Namespace namespaces[] = null;
private Namespace[] namespaces = null;
private boolean preferList = false;

View File

@@ -63,7 +63,7 @@ public class XSLTIngestionCrosswalk
private static final String DIRECTION = "submission";
private static final String aliases[] = makeAliases(DIRECTION);
private static final String[] aliases = makeAliases(DIRECTION);
private static final CommunityService communityService = ContentServiceFactory.getInstance().getCommunityService();
private static final CollectionService collectionService = ContentServiceFactory.getInstance()

View File

@@ -178,7 +178,7 @@ public class BitstreamDAOImpl extends AbstractHibernateDSODAO<Bitstream> impleme
@Override
public int countWithNoPolicy(Context context) throws SQLException {
Query query = createQuery(context,
"SELECT count(bit.id) from Bitstream bit where bit.deleted<>true and bit.id not in" +
"SELECT count(bit.id) from Bitstream bit where bit.deleted<>true and bit not in" +
" (select res.dSpaceObject from ResourcePolicy res where res.resourceTypeId = " +
":typeId )");
query.setParameter("typeId", Constants.BITSTREAM);

View File

@@ -12,6 +12,7 @@ import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import jakarta.persistence.Query;
import jakarta.persistence.criteria.CriteriaBuilder;
@@ -19,6 +20,7 @@ import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import org.apache.logging.log4j.Logger;
import org.dspace.authorize.ResourcePolicy;
import org.dspace.authorize.ResourcePolicy_;
import org.dspace.content.Collection;
@@ -40,6 +42,11 @@ import org.dspace.eperson.Group;
* @author kevinvandevelde at atmire.com
*/
public class CollectionDAOImpl extends AbstractHibernateDSODAO<Collection> implements CollectionDAO {
/**
* log4j logger
*/
private static Logger log = org.apache.logging.log4j.LogManager.getLogger(CollectionDAOImpl.class);
protected CollectionDAOImpl() {
super();
}
@@ -159,7 +166,7 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO<Collection> imple
@Override
public List<Collection> findCollectionsWithSubscribers(Context context) throws SQLException {
return list(createQuery(context, "SELECT DISTINCT c FROM Collection c JOIN Subscription s ON c.id = " +
return list(createQuery(context, "SELECT DISTINCT c FROM Collection c JOIN Subscription s ON c = " +
"s.dSpaceObject"));
}
@@ -172,14 +179,25 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO<Collection> imple
@SuppressWarnings("unchecked")
public List<Map.Entry<Collection, Long>> getCollectionsWithBitstreamSizesTotal(Context context)
throws SQLException {
String q = "select col as collection, sum(bit.sizeBytes) as totalBytes from Item i join i.collections col " +
"join i.bundles bun join bun.bitstreams bit group by col";
String q = "select col.id, sum(bit.sizeBytes) as totalBytes from Item i join i.collections col " +
"join i.bundles bun join bun.bitstreams bit group by col.id";
Query query = createQuery(context, q);
CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
List<Object[]> list = query.getResultList();
List<Map.Entry<Collection, Long>> returnList = new ArrayList<>(list.size());
for (Object[] o : list) {
returnList.add(new AbstractMap.SimpleEntry<>((Collection) o[0], (Long) o[1]));
CriteriaQuery<Collection> criteriaQuery = criteriaBuilder.createQuery(Collection.class);
Root<Collection> collectionRoot = criteriaQuery.from(Collection.class);
criteriaQuery.select(collectionRoot).where(criteriaBuilder.equal(collectionRoot.get("id"), (UUID) o[0]));
Query collectionQuery = createQuery(context, criteriaQuery);
Collection collection = (Collection) collectionQuery.getSingleResult();
if (collection != null) {
returnList.add(new AbstractMap.SimpleEntry<>(collection, (Long) o[1]));
} else {
log.warn("Unable to find Collection with UUID: {}", o[0]);
}
}
return returnList;
}

View File

@@ -560,7 +560,7 @@ public abstract class AbstractMETSDisseminator
//create our metadata element (dmdSec, techMd, sourceMd, rightsMD etc.)
MdSec mdSec = (MdSec) mdSecClass.getDeclaredConstructor().newInstance();
mdSec.setID(gensym(mdSec.getLocalName()));
String parts[] = typeSpec.split(":", 2);
String[] parts = typeSpec.split(":", 2);
String xwalkName;
String metsName;
@@ -685,7 +685,7 @@ public abstract class AbstractMETSDisseminator
// add either a techMd or sourceMd element to amdSec.
// mdSecClass determines which type.
// mdTypes[] is array of "[metsName:]PluginName" strings, maybe empty.
protected void addToAmdSec(AmdSec fAmdSec, String mdTypes[], Class mdSecClass,
protected void addToAmdSec(AmdSec fAmdSec, String[] mdTypes, Class mdSecClass,
Context context, DSpaceObject dso,
PackageParameters params,
MdStreamCache extraStreams)
@@ -708,10 +708,10 @@ public abstract class AbstractMETSDisseminator
IOException, AuthorizeException, NoSuchMethodException,
InstantiationException, IllegalAccessException, IllegalArgumentException,
IllegalArgumentException, InvocationTargetException {
String techMdTypes[] = getTechMdTypes(context, dso, params);
String rightsMdTypes[] = getRightsMdTypes(context, dso, params);
String sourceMdTypes[] = getSourceMdTypes(context, dso, params);
String digiprovMdTypes[] = getDigiprovMdTypes(context, dso, params);
String[] techMdTypes = getTechMdTypes(context, dso, params);
String[] rightsMdTypes = getRightsMdTypes(context, dso, params);
String[] sourceMdTypes = getSourceMdTypes(context, dso, params);
String[] digiprovMdTypes = getDigiprovMdTypes(context, dso, params);
// only bother if there are any sections to add
if ((techMdTypes.length + sourceMdTypes.length +
@@ -794,10 +794,10 @@ public abstract class AbstractMETSDisseminator
// add DMD sections
// Each type element MAY be either just a MODS-and-crosswalk name, OR
// a combination "MODS-name:crosswalk-name" (e.g. "DC:qDC").
String dmdTypes[] = getDmdTypes(context, dso, params);
String[] dmdTypes = getDmdTypes(context, dso, params);
// record of ID of each dmdsec to make DMDID in structmap.
String dmdId[] = new String[dmdTypes.length];
String[] dmdId = new String[dmdTypes.length];
for (int i = 0; i < dmdTypes.length; ++i) {
MdSec dmdSec = makeMdSec(context, dso, DmdSec.class, dmdTypes[i], params, extraStreams);
if (dmdSec != null) {
@@ -981,7 +981,7 @@ public abstract class AbstractMETSDisseminator
// add metadata & info for Template Item, if exists
Item templateItem = collection.getTemplateItem();
if (templateItem != null) {
String templateDmdId[] = new String[dmdTypes.length];
String[] templateDmdId = new String[dmdTypes.length];
// index where we should add the first template item <dmdSec>.
// Index = number of <dmdSecs> already added + number of <metsHdr> = # of dmdSecs + 1
// (Note: in order to be a valid METS file, all dmdSecs must be before the 1st amdSec)
@@ -1239,8 +1239,8 @@ public abstract class AbstractMETSDisseminator
try {
// add crosswalk's namespaces and schemaLocation to this element:
String raw = xwalk.getSchemaLocation();
String sloc[] = raw == null ? null : raw.split("\\s+");
Namespace ns[] = xwalk.getNamespaces();
String[] sloc = raw == null ? null : raw.split("\\s+");
Namespace[] ns = xwalk.getNamespaces();
for (int i = 0; i < ns.length; ++i) {
String uri = ns[i].getURI();
if (sloc != null && sloc.length > 1 && uri.equals(sloc[0])) {

View File

@@ -498,8 +498,11 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester {
// Finish creating the item. This actually assigns the handle,
// and will either install item immediately or start a workflow, based on params
PackageUtils.finishCreateItem(context, wsi, handle, params);
} else {
// We should have a workspace item during ingest, so this code is only here for safety.
// Update the object to make sure all changes are committed
PackageUtils.updateDSpaceObject(context, dso);
}
} else if (type == Constants.COLLECTION || type == Constants.COMMUNITY) {
// Add logo if one is referenced from manifest
addContainerLogo(context, dso, manifest, pkgFile, params);
@@ -513,6 +516,9 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester {
// (this allows subclasses to do some final validation / changes as
// necessary)
finishObject(context, dso, params);
// Update the object to make sure all changes are committed
PackageUtils.updateDSpaceObject(context, dso);
} else if (type == Constants.SITE) {
// Do nothing by default -- Crosswalks will handle anything necessary to ingest at Site-level
@@ -520,18 +526,15 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester {
// (this allows subclasses to do some final validation / changes as
// necessary)
finishObject(context, dso, params);
// Update the object to make sure all changes are committed
PackageUtils.updateDSpaceObject(context, dso);
} else {
throw new PackageValidationException(
"Unknown DSpace Object type in package, type="
+ String.valueOf(type));
}
// -- Step 6 --
// Finish things up!
// Update the object to make sure all changes are committed
PackageUtils.updateDSpaceObject(context, dso);
return dso;
}
@@ -1419,7 +1422,7 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester {
* @throws AuthorizeException if authorization error
*/
public abstract void crosswalkObjectDmd(Context context, DSpaceObject dso,
METSManifest manifest, MdrefManager callback, Element dmds[],
METSManifest manifest, MdrefManager callback, Element[] dmds,
PackageParameters params) throws CrosswalkException,
PackageValidationException, AuthorizeException, SQLException,
IOException;

View File

@@ -109,7 +109,7 @@ public class DSpaceAIPIngester
public void crosswalkObjectDmd(Context context, DSpaceObject dso,
METSManifest manifest,
MdrefManager callback,
Element dmds[], PackageParameters params)
Element[] dmds, PackageParameters params)
throws CrosswalkException, PackageValidationException,
AuthorizeException, SQLException, IOException {
int found = -1;

View File

@@ -138,7 +138,7 @@ public class DSpaceMETSDisseminator
// XXX FIXME maybe let dmd choices be configured in DSpace config?
String result[] = null;
String[] result = null;
if (params != null) {
result = params.getProperties("dmd");
}
@@ -163,7 +163,7 @@ public class DSpaceMETSDisseminator
public String[] getTechMdTypes(Context context, DSpaceObject dso, PackageParameters params)
throws SQLException, IOException, AuthorizeException {
if (dso.getType() == Constants.BITSTREAM) {
String result[] = new String[1];
String[] result = new String[1];
result[0] = "PREMIS";
return result;
} else {

View File

@@ -81,7 +81,7 @@ public class DSpaceMETSIngester
public void crosswalkObjectDmd(Context context, DSpaceObject dso,
METSManifest manifest,
MdrefManager callback,
Element dmds[], PackageParameters params)
Element[] dmds, PackageParameters params)
throws CrosswalkException, PackageValidationException,
AuthorizeException, SQLException, IOException {
int found = -1;
@@ -185,7 +185,7 @@ public class DSpaceMETSIngester
PluginService pluginService = CoreServiceFactory.getInstance().getPluginService();
// get the MediaFilter that would create this bundle:
String mfNames[] = pluginService.getAllPluginNames(MediaFilter.class);
String[] mfNames = pluginService.getAllPluginNames(MediaFilter.class);
for (int i = 0; i < mfNames.length; ++i) {
MediaFilter mf = (MediaFilter) pluginService.getNamedPlugin(MediaFilter.class, mfNames[i]);

View File

@@ -210,7 +210,7 @@ public class METSManifest {
// mets.xsd.dc = http://purl.org/dc/elements/1.1/ dc.xsd
// (filename is relative to {dspace_dir}/config/schemas/)
String spec = configurationService.getProperty(key);
String val[] = spec.trim().split("\\s+");
String[] val = spec.trim().split("\\s+");
if (val.length == 2) {
File xsd = new File(xsdPath1, val[1]);
if (!xsd.exists()) {
@@ -221,7 +221,7 @@ public class METSManifest {
} else {
try {
String u = xsd.toURI().toURL().toString();
if (result.length() > 0) {
if (!result.isEmpty()) {
result.append(" ");
}
result.append(val[0]).append(" ").append(u);
@@ -651,7 +651,7 @@ public class METSManifest {
String mimeType = mdWrap.getAttributeValue("MIMETYPE");
if (mimeType != null && mimeType.equalsIgnoreCase("text/xml")) {
byte value[] = Base64.decodeBase64(bin.getText().getBytes(StandardCharsets.UTF_8));
byte[] value = Base64.decodeBase64(bin.getText().getBytes(StandardCharsets.UTF_8));
Document mdd = parser.build(new ByteArrayInputStream(value));
List<Element> result = new ArrayList<>(1);
result.add(mdd.getRootElement());
@@ -719,7 +719,7 @@ public class METSManifest {
throw new MetadataValidationException(
"Invalid METS Manifest: mdWrap element with neither xmlData nor binData child.");
} else {
byte value[] = Base64.decodeBase64(bin.getText().getBytes(StandardCharsets.UTF_8));
byte[] value = Base64.decodeBase64(bin.getText().getBytes(StandardCharsets.UTF_8));
return new ByteArrayInputStream(value);
}
} else {
@@ -950,8 +950,8 @@ public class METSManifest {
public Element[] getDmdElements(String dmdList)
throws MetadataValidationException {
if (dmdList != null && !dmdList.isEmpty()) {
String dmdID[] = dmdList.split("\\s+");
Element result[] = new Element[dmdID.length];
String[] dmdID = dmdList.split("\\s+");
Element[] result = new Element[dmdID.length];
for (int i = 0; i < dmdID.length; ++i) {
result[i] = getElementByXPath("mets:dmdSec[@ID=\"" + dmdID[i] + "\"]", false);
@@ -980,7 +980,7 @@ public class METSManifest {
}
return new Element[0];
}
String amdID[] = amds.split("\\s+");
String[] amdID = amds.split("\\s+");
List<Element> resultList = new ArrayList<>();
for (int i = 0; i < amdID.length; ++i) {
List rmds = getElementByXPath("mets:amdSec[@ID=\"" + amdID[i] + "\"]", false).
@@ -1167,7 +1167,7 @@ public class METSManifest {
"Invalid METS Manifest: mdWrap element for streaming crosswalk without binData " +
"child.");
} else {
byte value[] = Base64.decodeBase64(bin.getText().getBytes(StandardCharsets.UTF_8));
byte[] value = Base64.decodeBase64(bin.getText().getBytes(StandardCharsets.UTF_8));
sxwalk.ingest(context, dso,
new ByteArrayInputStream(value),
mdWrap.getAttributeValue("MIMETYPE"));
@@ -1228,7 +1228,7 @@ public class METSManifest {
log.warn("Got no bitstream ADMID, file@ID=" + fileId);
return;
}
String amdID[] = amds.split("\\s+");
String[] amdID = amds.split("\\s+");
for (int i = 0; i < amdID.length; ++i) {
Element amdSec = getElementByXPath("mets:amdSec[@ID=\"" + amdID[i] + "\"]", false);
for (Iterator ti = amdSec.getChildren("techMD", metsNS).iterator(); ti.hasNext(); ) {
@@ -1262,7 +1262,7 @@ public class METSManifest {
log.warn("Got no bitstream ADMID, file@ID=" + fileId);
return;
}
String amdID[] = amds.split("\\s+");
String[] amdID = amds.split("\\s+");
for (int i = 0; i < amdID.length; ++i) {
Element amdSec = getElementByXPath("mets:amdSec[@ID=\"" + amdID[i] + "\"]", false);
for (Iterator ti = amdSec.getChildren("techMD", metsNS).iterator(); ti.hasNext(); ) {

View File

@@ -19,11 +19,11 @@ import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.logging.log4j.Logger;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.io.MemoryUsageSetting;
import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream;
import org.apache.pdfbox.io.RandomAccessReadBuffer;
import org.apache.pdfbox.io.ScratchFile;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.dspace.authorize.AuthorizeException;
@@ -78,10 +78,10 @@ public class PDFPackager
protected static final String BITSTREAM_FORMAT_NAME = "Adobe PDF";
protected static String aliases[] = {"PDF", "Adobe PDF", "pdf", "application/pdf"};
protected static String[] aliases = {"PDF", "Adobe PDF", "pdf", "application/pdf"};
public static String[] getPluginNames() {
return (String[]) ArrayUtils.clone(aliases);
return ArrayUtils.clone(aliases);
}
protected final BitstreamService bitstreamService = ContentServiceFactory.getInstance().getBitstreamService();
@@ -331,19 +331,24 @@ public class PDFPackager
COSDocument cos = null;
try {
ScratchFile scratchFile = null;
PDDocument document = null;
try {
long useRAM = Runtime.getRuntime().freeMemory() * 80 / 100; // use up to 80% of JVM free memory
scratchFile = new ScratchFile(
MemoryUsageSetting.setupMixed(useRAM)); // then fallback to temp file (unlimited size)
// Use up to 80% of JVM free memory and fall back to a temp file (unlimited size)
long useRAM = Runtime.getRuntime().freeMemory() * 80 / 100;
document = Loader.loadPDF(
new RandomAccessReadBuffer(metadata),
() -> new ScratchFile(MemoryUsageSetting.setupMixed(useRAM)));
} catch (IOException ioe) {
log.warn("Error initializing scratch file: " + ioe.getMessage());
}
PDFParser parser = new PDFParser(new RandomAccessBufferedFileInputStream(metadata), scratchFile);
parser.parse();
cos = parser.getDocument();
// sanity check: loaded PDF document must not be null.
if (document == null) {
throw new MetadataValidationException("The provided stream could not be parsed into a PDF document.");
}
cos = document.getDocument();
// sanity check: PDFBox breaks on encrypted documents, so give up.
if (cos.getEncryptionDictionary() != null) {
throw new MetadataValidationException("This packager cannot accept an encrypted PDF document.");

View File

@@ -52,7 +52,7 @@ public class PackageParameters extends Properties {
Enumeration pe = request.getParameterNames();
while (pe.hasMoreElements()) {
String name = (String) pe.nextElement();
String v[] = request.getParameterValues(name);
String[] v = request.getParameterValues(name);
if (v.length == 0) {
result.setProperty(name, "");
} else if (v.length == 1) {

View File

@@ -72,7 +72,7 @@ public class PackageUtils {
// Map of metadata elements for Communities and Collections
// Format is alternating key/value in a straight array; use this
// to initialize hash tables that convert to and from.
protected static final String ccMetadataMap[] = {
protected static final String[] ccMetadataMap = {
// getMetadata() -> DC element.term
"name", "dc.title",
"introductory_text", "dc.description",

View File

@@ -143,7 +143,7 @@ public interface BundleService extends DSpaceObjectService<Bundle>, DSpaceObject
* @throws SQLException when an SQL error has occurred (querying DSpace)
* @throws AuthorizeException If the user can't make the changes
*/
public void setOrder(Context context, Bundle bundle, UUID bitstreamIds[]) throws AuthorizeException, SQLException;
public void setOrder(Context context, Bundle bundle, UUID[] bitstreamIds) throws AuthorizeException, SQLException;
int countTotal(Context context) throws SQLException;
}

View File

@@ -468,6 +468,9 @@ public abstract class AbstractHibernateDAO<T> implements GenericDAO<T> {
for (Map.Entry<String, Object> entry : equals.entrySet()) {
criteria.where(criteriaBuilder.equal(root.get(entry.getKey()), entry.getValue()));
}
criteria.orderBy(criteriaBuilder.asc(root.get("id")));
return executeCriteriaQuery(context, criteria, cacheable, maxResults, offset);
}

View File

@@ -192,7 +192,7 @@ public class LegacyPluginServiceImpl implements PluginService {
classname = sequenceConfig.get(iname);
}
Object result[] = (Object[]) Array.newInstance(interfaceClass, classname.length);
Object[] result = (Object[]) Array.newInstance(interfaceClass, classname.length);
for (int i = 0; i < classname.length; ++i) {
log.debug("Adding Sequence plugin for interface= " + iname + ", class=" + classname[i]);
result[i] = getAnonymousPlugin(classname[i]);
@@ -277,7 +277,7 @@ public class LegacyPluginServiceImpl implements PluginService {
for (String classname : selfNamedVals) {
try {
Class pluginClass = Class.forName(classname, true, loader);
String names[] = (String[]) pluginClass.getMethod("getPluginNames").
String[] names = (String[]) pluginClass.getMethod("getPluginNames").
invoke(null);
if (names == null || names.length == 0) {
log.error(
@@ -302,7 +302,7 @@ public class LegacyPluginServiceImpl implements PluginService {
}
// add info for a named plugin to cache, under all its names.
private int installNamedConfigs(String iname, String classname, String names[])
private int installNamedConfigs(String iname, String classname, String[] names)
throws ClassNotFoundException {
int found = 0;
for (int i = 0; i < names.length; ++i) {

View File

@@ -20,6 +20,8 @@ import java.util.Set;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.io.RandomAccessReadBuffer;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.dspace.authorize.AuthorizeException;
@@ -124,7 +126,7 @@ public class CitationDocumentServiceImpl implements CitationDocumentService, Ini
//Load enabled collections
String[] citationEnabledCollections = configurationService
.getArrayProperty("citation-page.enabled_collections");
citationEnabledCollectionsList = Arrays.asList(citationEnabledCollections);
citationEnabledCollectionsList = new ArrayList<String>(Arrays.asList(citationEnabledCollections));
//Load enabled communities, and add to collection-list
String[] citationEnabledCommunities = configurationService
@@ -264,7 +266,7 @@ public class CitationDocumentServiceImpl implements CitationDocumentService, Ini
private PDDocument loadDocumentFromDB(Context context, Bitstream bitstream) {
try (var inputStream = bitstreamService.retrieve(context, bitstream)) {
return PDDocument.load(inputStream);
return Loader.loadPDF(new RandomAccessReadBuffer(inputStream));
} catch (IOException | SQLException | AuthorizeException e) {
throw new RuntimeException(e);
}
@@ -307,4 +309,4 @@ public class CitationDocumentServiceImpl implements CitationDocumentService, Ini
}
}
}
}
}

View File

@@ -15,6 +15,7 @@ import java.io.OutputStream;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
@@ -84,7 +85,7 @@ public class PdfGenerator {
public PDDocument generate(String html) {
try (var out = new ByteArrayOutputStream()) {
generate(html, out);
return PDDocument.load(out.toByteArray());
return Loader.loadPDF(out.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e);
}

View File

@@ -79,7 +79,7 @@ public class DayTableEmbargoSetter extends DefaultEmbargoSetter {
private Properties getTermProperties() {
Properties termProps = new Properties();
String terms[] = DSpaceServicesFactory.getInstance().getConfigurationService()
String[] terms = DSpaceServicesFactory.getInstance().getConfigurationService()
.getArrayProperty("embargo.terms.days");
if (terms != null) {

View File

@@ -79,7 +79,7 @@ public class EmbargoCLITool {
*
* @param argv the command line arguments given
*/
public static void main(String argv[]) {
public static void main(String[] argv) {
int status = 0;
Options options = new Options();

View File

@@ -199,19 +199,19 @@ public class EmbargoServiceImpl implements EmbargoService {
// return the schema part of "schema.element.qualifier" metadata field spec
protected String getSchemaOf(String field) {
String sa[] = field.split("\\.", 3);
String[] sa = field.split("\\.", 3);
return sa[0];
}
// return the element part of "schema.element.qualifier" metadata field spec, if any
protected String getElementOf(String field) {
String sa[] = field.split("\\.", 3);
String[] sa = field.split("\\.", 3);
return sa.length > 1 ? sa[1] : null;
}
// return the qualifier part of "schema.element.qualifier" metadata field spec, if any
protected String getQualifierOf(String field) {
String sa[] = field.split("\\.", 3);
String[] sa = field.split("\\.", 3);
return sa.length > 2 ? sa[2] : null;
}

View File

@@ -366,7 +366,7 @@ public class EPerson extends CacheableDSpaceObject implements DSpaceObjectLegacy
@Override
public String getName() {
return getEmail();
return this.getFullName();
}
String getDigestAlgorithm() {

View File

@@ -86,7 +86,7 @@ public class EPersonCLITool {
* @throws AuthorizeException Exception indicating the current user of the context does not have permission
* to perform a particular action.
*/
public static void main(String argv[])
public static void main(String[] argv)
throws ParseException, SQLException, AuthorizeException {
final OptionGroup VERBS = new OptionGroup();
VERBS.addOption(VERB_ADD);

View File

@@ -45,7 +45,7 @@ public class BasicDispatcher extends Dispatcher {
if (log.isDebugEnabled()) {
int n = 0;
for (Iterator i = cp.getFilters().iterator(); i.hasNext(); ++n) {
int f[] = (int[]) i.next();
int[] f = (int[]) i.next();
log.debug("Adding Consumer=\"" + cp.getName() + "\", instance="
+ cp.getConsumer().toString() + ", filter["
+ String.valueOf(n) + "]=(ObjMask="

View File

@@ -110,9 +110,9 @@ public class ConsumerProfile {
// Each "filter" is <objectTypes> + <eventTypes> : ...
filters = new ArrayList<>();
String part[] = filterString.trim().split(":");
String[] part = filterString.trim().split(":");
for (int j = 0; j < part.length; ++j) {
String fpart[] = part[j].split("\\+");
String[] fpart = part[j].split("\\+");
if (fpart.length != 2) {
log.error("Bad Filter clause in consumer stanza in Configuration entry for "
+ CONSUMER_PREFIX
@@ -120,10 +120,10 @@ public class ConsumerProfile {
+ ".consumers: "
+ part[j]);
} else {
int filter[] = new int[2];
int[] filter = new int[2];
filter[0] = 0;
filter[1] = 0;
String objectNames[] = fpart[0].split("\\|");
String[] objectNames = fpart[0].split("\\|");
for (int k = 0; k < objectNames.length; ++k) {
int ot = Event.parseObjectType(objectNames[k]);
if (ot == 0) {
@@ -135,7 +135,7 @@ public class ConsumerProfile {
filter[Event.SUBJECT_MASK] |= ot;
}
}
String eventNames[] = fpart[1].split("\\|");
String[] eventNames = fpart[1].split("\\|");
for (int k = 0; k < eventNames.length; ++k) {
int et = Event.parseEventType(eventNames[k]);
if (et == 0) {

View File

@@ -80,7 +80,7 @@ public class Event implements Serializable {
public static final int EVENT_MASK = 1; // mask of event type
// XXX NOTE: keep this up to date with any changes to event (action) types.
protected static final String eventTypeText[] = {"CREATE", "MODIFY",
protected static final String[] eventTypeText = {"CREATE", "MODIFY",
"MODIFY_METADATA", "ADD", "REMOVE", "DELETE", "INSTALL"};
/** XXX NOTE: These constants must be kept synchronized * */
@@ -590,7 +590,7 @@ public class Event implements Serializable {
public boolean pass(List<int[]> filters) {
boolean result = false;
for (int filter[] : filters) {
for (int[] filter : filters) {
if ((subjectType & filter[SUBJECT_MASK]) != 0 && (eventType & filter[EVENT_MASK]) != 0) {
result = true;
}

View File

@@ -172,10 +172,10 @@ public class EventServiceImpl implements EventService {
if (dispClass != null) {
try {
// all this to call a constructor with an argument
final Class argTypes[] = {String.class};
final Class[] argTypes = {String.class};
Constructor dc = Class.forName(dispClass).getConstructor(
argTypes);
Object args[] = new Object[1];
Object[] args = new Object[1];
args[0] = dispatcherName;
dispatcher = (Dispatcher) dc.newInstance(args);

View File

@@ -80,7 +80,7 @@ public class Report {
// create check list
public static LinkedHashMap<String, Check> checks() {
LinkedHashMap<String, Check> checks = new LinkedHashMap<>();
String check_names[] = DSpaceServicesFactory.getInstance().getConfigurationService()
String[] check_names = DSpaceServicesFactory.getInstance().getConfigurationService()
.getArrayProperty("healthcheck.checks");
PluginService pluginService = CoreServiceFactory.getInstance().getPluginService();
for (String check_name : check_names) {

View File

@@ -50,26 +50,26 @@ public class UserCheck extends Check {
info.put("Self registered", 0);
for (EPerson e : epersons) {
if (e.getEmail() != null && e.getEmail().length() > 0) {
if (e.getEmail() != null && !e.getEmail().isEmpty()) {
info.put("Have email", info.get("Have email") + 1);
}
if (e.canLogIn()) {
info.put("Can log in (password)",
info.get("Can log in (password)") + 1);
}
if (e.getFirstName() != null && e.getFirstName().length() > 0) {
if (e.getFirstName() != null && !e.getFirstName().isEmpty()) {
info.put("Have 1st name", info.get("Have 1st name") + 1);
}
if (e.getLastName() != null && e.getLastName().length() > 0) {
if (e.getLastName() != null && !e.getLastName().isEmpty()) {
info.put("Have 2nd name", info.get("Have 2nd name") + 1);
}
if (e.getLanguage() != null && e.getLanguage().length() > 0) {
if (e.getLanguage() != null && !e.getLanguage().isEmpty()) {
info.put("Have lang", info.get("Have lang") + 1);
}
if (e.getNetid() != null && e.getNetid().length() > 0) {
if (e.getNetid() != null && !e.getNetid().isEmpty()) {
info.put("Have netid", info.get("Have netid") + 1);
}
if (e.getNetid() != null && e.getNetid().length() > 0) {
if (e.getNetid() != null && !e.getNetid().isEmpty()) {
info.put("Self registered", info.get("Self registered") + 1);
}
}

View File

@@ -29,9 +29,9 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpException;
import org.apache.http.client.utils.URIBuilder;
import org.apache.jena.ext.xerces.impl.dv.util.Base64;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.xerces.impl.dv.util.Base64;
import org.dspace.app.util.XMLUtils;
import org.dspace.content.Item;
import org.dspace.importer.external.datamodel.ImportRecord;

View File

@@ -116,7 +116,7 @@ public class MetadataFieldConfig {
* @param full A string representing the schema.element.qualifier triplet
*/
public MetadataFieldConfig(String full) {
String elements[] = full.split("\\.");
String[] elements = full.split("\\.");
if (elements.length == 2) {
this.schema = elements[0];
this.element = elements[1];

View File

@@ -105,4 +105,13 @@ public class MetadatumDTO {
public void setValue(String value) {
this.value = value;
}
/**
* Return string representation of MetadatumDTO
* @return string representation of format "[schema].[element].[qualifier]=[value]"
*/
@Override
public String toString() {
return schema + "." + element + "." + qualifier + "=" + value;
}
}

View File

@@ -0,0 +1,127 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.importer.external.metadatamapping.contributor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* This Processor extracts values from a JSON array, but only when a condition
* on another attribute is met. For example, to extract all values of
* /names/value where /names/types contains "ror_display".
*
* Configurable via:
* pathToArray: e.g., /names
* elementAttribute: e.g., /value
* filterAttribute: e.g., /types
* requiredValueInFilter: e.g., ror_display
*
* Supports filtering when the filter attribute is either a JSON array or a single string.
*
* Example JSON:
* {
* "items": [{
* "names": [
* { "types": ["label", "ror_display"], "value": "Instituto Federal do Piauí" },
* { "types": ["acronym"], "value": "IFPI" }
* ]
* }]
* }
* This processor can extract "Instituto Federal do Piauí" using proper configuration.
*
* Author: Jesiel (based on Mykhaylo Boychuks original processor)
*/
public class ConditionalArrayElementAttributeProcessor implements JsonPathMetadataProcessor {
private static final Logger log = LogManager.getLogger();
private String pathToArray;
private String elementAttribute;
private String filterAttribute;
private String requiredValueInFilter;
@Override
public Collection<String> processMetadata(String json) {
JsonNode rootNode = convertStringJsonToJsonNode(json);
Collection<String> results = new ArrayList<>();
if (rootNode == null) {
return results;
}
Iterator<JsonNode> array = rootNode.at(pathToArray).iterator();
while (array.hasNext()) {
JsonNode element = array.next();
JsonNode filterNode = element.at(filterAttribute);
boolean match = false;
if (filterNode.isArray()) {
for (JsonNode filterValue : filterNode) {
if (requiredValueInFilter.equalsIgnoreCase(filterValue.textValue())) {
match = true;
break;
}
}
} else if (filterNode.isTextual()) {
if (requiredValueInFilter.equalsIgnoreCase(filterNode.textValue())) {
match = true;
}
}
if (match) {
JsonNode valueNode = element.at(elementAttribute);
if (valueNode.isTextual()) {
results.add(valueNode.textValue());
} else if (valueNode.isArray()) {
for (JsonNode item : valueNode) {
if (item.isTextual() && StringUtils.isNotBlank(item.textValue())) {
results.add(item.textValue());
}
}
}
}
}
return results;
}
private JsonNode convertStringJsonToJsonNode(String json) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readTree(json);
} catch (JsonProcessingException e) {
log.error("Unable to process JSON response.", e);
return null;
}
}
public void setPathToArray(String pathToArray) {
this.pathToArray = pathToArray;
}
public void setElementAttribute(String elementAttribute) {
this.elementAttribute = elementAttribute;
}
public void setFilterAttribute(String filterAttribute) {
this.filterAttribute = filterAttribute;
}
public void setRequiredValueInFilter(String requiredValueInFilter) {
this.requiredValueInFilter = requiredValueInFilter;
}
}

View File

@@ -56,6 +56,7 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
private String urlFetch;
private String urlSearch;
private String apiKey;
private int attempt = 3;
@@ -211,6 +212,9 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
@Override
public Integer call() throws Exception {
URIBuilder uriBuilder = new URIBuilder(urlSearch);
if (StringUtils.isNotBlank(apiKey)) {
uriBuilder.addParameter("api_key", apiKey);
}
uriBuilder.addParameter("db", "pubmed");
uriBuilder.addParameter("term", query.getParameterAsClass("query", String.class));
Map<String, Map<String, String>> params = new HashMap<String, Map<String,String>>();
@@ -287,6 +291,9 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
List<ImportRecord> records = new LinkedList<ImportRecord>();
URIBuilder uriBuilder = new URIBuilder(urlSearch);
if (StringUtils.isNotBlank(apiKey)) {
uriBuilder.addParameter("api_key", apiKey);
}
uriBuilder.addParameter("db", "pubmed");
uriBuilder.addParameter("retstart", start.toString());
uriBuilder.addParameter("retmax", count.toString());
@@ -317,6 +324,9 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
String webEnv = getSingleElementValue(response, "WebEnv");
URIBuilder uriBuilder2 = new URIBuilder(urlFetch);
if (StringUtils.isNotBlank(apiKey)) {
uriBuilder2.addParameter("api_key", apiKey);
}
uriBuilder2.addParameter("db", "pubmed");
uriBuilder2.addParameter("retstart", start.toString());
uriBuilder2.addParameter("retmax", count.toString());
@@ -389,6 +399,9 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
public ImportRecord call() throws Exception {
URIBuilder uriBuilder = new URIBuilder(urlFetch);
if (StringUtils.isNotBlank(apiKey)) {
uriBuilder.addParameter("api_key", apiKey);
}
uriBuilder.addParameter("db", "pubmed");
uriBuilder.addParameter("retmode", "xml");
uriBuilder.addParameter("id", query.getParameterAsClass("id", String.class));
@@ -429,6 +442,9 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
public Collection<ImportRecord> call() throws Exception {
URIBuilder uriBuilder = new URIBuilder(urlSearch);
if (StringUtils.isNotBlank(apiKey)) {
uriBuilder.addParameter("api_key", apiKey);
}
uriBuilder.addParameter("db", "pubmed");
uriBuilder.addParameter("usehistory", "y");
uriBuilder.addParameter("term", query.getParameterAsClass("term", String.class));
@@ -458,6 +474,9 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
String queryKey = getSingleElementValue(response, "QueryKey");
URIBuilder uriBuilder2 = new URIBuilder(urlFetch);
if (StringUtils.isNotBlank(apiKey)) {
uriBuilder.addParameter("api_key", apiKey);
}
uriBuilder2.addParameter("db", "pubmed");
uriBuilder2.addParameter("retmode", "xml");
uriBuilder2.addParameter("WebEnv", webEnv);
@@ -533,4 +552,8 @@ public class PubmedImportMetadataSourceServiceImpl extends AbstractImportMetadat
this.urlSearch = urlSearch;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
}

View File

@@ -46,7 +46,7 @@ public class RorImportMetadataSourceServiceImpl extends AbstractImportMetadataSo
private String url;
private int timeout = 1000;
private int timeout = 5000;
@Autowired
private LiveImportClient liveImportClient;

View File

@@ -39,6 +39,7 @@ public class OrcidWorkFieldMapping {
* The metadata fields related to the work external identifiers.
*/
private Map<String, String> externalIdentifierFields = new HashMap<>();
private Map<String, List<String>> externalIdentifierPartOfMap = new HashMap<>();
/**
* The metadata field related to the work publication date.
@@ -129,6 +130,15 @@ public class OrcidWorkFieldMapping {
this.externalIdentifierFields = parseConfigurations(externalIdentifierFields);
}
public Map<String, List<String>> getExternalIdentifierPartOfMap() {
return this.externalIdentifierPartOfMap;
}
public void setExternalIdentifierPartOfMap(
HashMap<String, List<String>> externalIdentifierPartOfMap) {
this.externalIdentifierPartOfMap = externalIdentifierPartOfMap;
}
public String getPublicationDateField() {
return publicationDateField;
}

View File

@@ -9,6 +9,7 @@ package org.dspace.orcid.model.factory.impl;
import static org.apache.commons.lang3.StringUtils.isBlank;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import static org.orcid.jaxb.model.common.Relationship.PART_OF;
import static org.orcid.jaxb.model.common.Relationship.SELF;
import java.util.ArrayList;
@@ -73,12 +74,12 @@ public class OrcidWorkFactory implements OrcidEntityFactory {
@Override
public Activity createOrcidObject(Context context, Item item) {
Work work = new Work();
work.setWorkType(getWorkType(context, item));
work.setJournalTitle(getJournalTitle(context, item));
work.setWorkContributors(getWorkContributors(context, item));
work.setWorkTitle(getWorkTitle(context, item));
work.setPublicationDate(getPublicationDate(context, item));
work.setWorkExternalIdentifiers(getWorkExternalIds(context, item));
work.setWorkType(getWorkType(context, item));
work.setWorkExternalIdentifiers(getWorkExternalIds(context, item, work));
work.setShortDescription(getShortDescription(context, item));
work.setLanguageCode(getLanguageCode(context, item));
work.setUrl(getUrl(context, item));
@@ -149,57 +150,65 @@ public class OrcidWorkFactory implements OrcidEntityFactory {
}
/**
* Creates an instance of ExternalIDs from the metadata values of the given
* item, using the orcid.mapping.funding.external-ids configuration.
* Returns a list of external work IDs constructed in the org.orcid.jaxb
* ExternalIDs object
*/
private ExternalIDs getWorkExternalIds(Context context, Item item) {
ExternalIDs externalIdentifiers = new ExternalIDs();
externalIdentifiers.getExternalIdentifier().addAll(getWorkSelfExternalIds(context, item));
return externalIdentifiers;
private ExternalIDs getWorkExternalIds(Context context, Item item, Work work) {
ExternalIDs externalIDs = new ExternalIDs();
externalIDs.getExternalIdentifier().addAll(getWorkExternalIdList(context, item, work));
return externalIDs;
}
/**
* Creates a list of ExternalID, one for orcid.mapping.funding.external-ids
* value, taking the values from the given item.
* value, taking the values from the given item and work type.
*/
private List<ExternalID> getWorkSelfExternalIds(Context context, Item item) {
private List<ExternalID> getWorkExternalIdList(Context context, Item item, Work work) {
List<ExternalID> selfExternalIds = new ArrayList<>();
List<ExternalID> externalIds = new ArrayList<>();
Map<String, String> externalIdentifierFields = fieldMapping.getExternalIdentifierFields();
if (externalIdentifierFields.containsKey(SIMPLE_HANDLE_PLACEHOLDER)) {
String handleType = externalIdentifierFields.get(SIMPLE_HANDLE_PLACEHOLDER);
selfExternalIds.add(getExternalId(handleType, item.getHandle(), SELF));
ExternalID handle = new ExternalID();
handle.setType(handleType);
handle.setValue(item.getHandle());
handle.setRelationship(SELF);
externalIds.add(handle);
}
// Resolve work type, used to determine identifier relationship type
// For version / funding relationships, we might want to use more complex
// business rules than just "work and id type"
final String workType = (work != null && work.getWorkType() != null) ?
work.getWorkType().value() : WorkType.OTHER.value();
getMetadataValues(context, item, externalIdentifierFields.keySet()).stream()
.map(this::getSelfExternalId)
.forEach(selfExternalIds::add);
.map(metadataValue -> this.getExternalId(metadataValue, workType))
.forEach(externalIds::add);
return selfExternalIds;
}
/**
* Creates an instance of ExternalID taking the value from the given
* metadataValue. The type of the ExternalID is calculated using the
* orcid.mapping.funding.external-ids configuration. The relationship of the
* ExternalID is SELF.
*/
private ExternalID getSelfExternalId(MetadataValue metadataValue) {
Map<String, String> externalIdentifierFields = fieldMapping.getExternalIdentifierFields();
String metadataField = metadataValue.getMetadataField().toString('.');
return getExternalId(externalIdentifierFields.get(metadataField), metadataValue.getValue(), SELF);
return externalIds;
}
/**
* Creates an instance of ExternalID with the given type, value and
* relationship.
*/
private ExternalID getExternalId(String type, String value, Relationship relationship) {
private ExternalID getExternalId(MetadataValue metadataValue, String workType) {
Map<String, String> externalIdentifierFields = fieldMapping.getExternalIdentifierFields();
Map<String, List<String>> externalIdentifierPartOfMap = fieldMapping.getExternalIdentifierPartOfMap();
String metadataField = metadataValue.getMetadataField().toString('.');
String identifierType = externalIdentifierFields.get(metadataField);
// Default relationship type is SELF, configuration can
// override to PART_OF based on identifier and work type
Relationship relationship = SELF;
if (externalIdentifierPartOfMap.containsKey(identifierType)
&& externalIdentifierPartOfMap.get(identifierType).contains(workType)) {
relationship = PART_OF;
}
ExternalID externalID = new ExternalID();
externalID.setType(type);
externalID.setValue(value);
externalID.setType(identifierType);
externalID.setValue(metadataValue.getValue());
externalID.setRelationship(relationship);
return externalID;
}

View File

@@ -283,6 +283,8 @@ public class ResearcherProfileServiceImpl implements ResearcherProfileService {
itemService.addMetadata(context, item, "dc", "title", null, null, fullName);
itemService.addMetadata(context, item, "person", "email", null, null, ePerson.getEmail());
itemService.addMetadata(context, item, "dspace", "object", "owner", null, fullName, id, CF_ACCEPTED);
itemService.addMetadata(context, item, "person", "familyName", null, null, ePerson.getLastName());
itemService.addMetadata(context, item, "person", "givenName", null, null, ePerson.getFirstName());
item = installItemService.installItem(context, workspaceItem);

View File

@@ -117,7 +117,7 @@ public abstract class DSpaceRunnable<T extends ScriptConfiguration> implements R
* @param args The primitive array of Strings representing the parameters
* @throws ParseException If something goes wrong
*/
private StepResult parse(String[] args) throws ParseException {
protected StepResult parse(String[] args) throws ParseException {
commandLine = new DefaultParser().parse(getScriptConfiguration().getOptions(), args);
setup();
return StepResult.Continue;

View File

@@ -34,6 +34,7 @@ import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
@@ -231,6 +232,10 @@ public class SolrLoggerServiceImpl implements SolrLoggerService, InitializingBea
throw new RuntimeException(e);
}
if (dspaceObject instanceof Bitstream && !isBitstreamLoggable((Bitstream) dspaceObject)) {
return;
}
if (solr == null) {
return;
}
@@ -278,6 +283,10 @@ public class SolrLoggerServiceImpl implements SolrLoggerService, InitializingBea
@Override
public void postView(DSpaceObject dspaceObject,
String ip, String userAgent, String xforwardedfor, EPerson currentUser, String referrer) {
if (dspaceObject instanceof Bitstream && !isBitstreamLoggable((Bitstream) dspaceObject)) {
return;
}
if (solr == null) {
return;
}
@@ -1617,4 +1626,35 @@ public class SolrLoggerServiceImpl implements SolrLoggerService, InitializingBea
throw new UnknownHostException("unknown ip format");
}
/**
* Checks if a given Bitstream's bundles are configured to be logged in Solr statistics.
*
* @param bitstream The bitstream to check.
* @return {@code true} if the bitstream event should be logged, {@code false} otherwise.
*/
private boolean isBitstreamLoggable(Bitstream bitstream) {
String[] allowedBundles = configurationService
.getArrayProperty("solr-statistics.query.filter.bundles");
if (allowedBundles == null || allowedBundles.length == 0) {
return true;
}
List<String> allowedBundlesList = Arrays.asList(allowedBundles);
try {
List<Bundle> actualBundles = bitstream.getBundles();
if (actualBundles.isEmpty()) {
return true;
}
for (Bundle bundle : actualBundles) {
if (allowedBundlesList.contains(bundle.getName())) {
return true;
}
}
} catch (SQLException e) {
log.error("Error checking bitstream bundles for logging statistics for bitstream {}",
bitstream.getID(), e);
return true;
}
return false;
}
}

View File

@@ -137,9 +137,10 @@ public abstract class ExportEventProcessor {
.append(URLEncoder.encode(clientUA, UTF_8));
String hostName = Utils.getHostName(configurationService.getProperty("dspace.ui.url"));
String oaiPrefix = configurationService.getProperty("oai.identifier.prefix");
data.append("&").append(URLEncoder.encode("rft.artnum", UTF_8)).append("=").
append(URLEncoder.encode("oai:" + hostName + ":" + item
append(URLEncoder.encode("oai:" + oaiPrefix + ":" + item
.getHandle(), UTF_8));
data.append("&").append(URLEncoder.encode("rfr_dat", UTF_8)).append("=")
.append(URLEncoder.encode(referer, UTF_8));

View File

@@ -429,7 +429,7 @@ public class BitstreamStorageServiceImpl implements BitstreamStorageService, Ini
//modulo
if ((processedCounter % batchCommitSize) == 0) {
log.info("Migration Commit Checkpoint: " + processedCounter);
context.dispatchEvents();
context.commit();
}
}

View File

@@ -19,9 +19,11 @@ import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger;
import org.dspace.content.Bitstream;
import org.dspace.core.Utils;
import org.dspace.services.factory.DSpaceServicesFactory;
/**
* Native DSpace (or "Directory Scatter" if you prefer) asset store.
@@ -252,7 +254,10 @@ public class DSBitStoreService extends BaseBitStoreService {
}
File bitstreamFile = new File(bufFilename.toString());
Path normalizedPath = bitstreamFile.toPath().normalize();
if (!normalizedPath.startsWith(baseDir.getAbsolutePath())) {
String[] allowedAssetstoreRoots = DSpaceServicesFactory.getInstance().getConfigurationService()
.getArrayProperty("assetstore.allowed.roots", new String[]{});
if (!normalizedPath.startsWith(baseDir.getAbsolutePath())
&& !StringUtils.startsWithAny(normalizedPath.toString(), allowedAssetstoreRoots)) {
log.error("Bitstream path outside of assetstore root requested:" +
"bitstream={}, path={}, assetstore={}",
bitstream.getID(), normalizedPath, baseDir.getAbsolutePath());

View File

@@ -123,16 +123,6 @@ public class DatabaseUtils {
// Print basic database connection information
printDBInfo(connection);
// Print any database warnings/errors found (if any)
boolean issueFound = printDBIssues(connection);
// If issues found, exit with an error status (even if connection succeeded).
if (issueFound) {
System.exit(1);
} else {
System.exit(0);
}
} catch (SQLException sqle) {
System.err.println("\nError running 'test': ");
System.err.println(" - " + sqle);
@@ -170,16 +160,6 @@ public class DatabaseUtils {
"migrate'.");
}
}
// Print any database warnings/errors found (if any)
boolean issueFound = printDBIssues(connection);
// If issues found, exit with an error status
if (issueFound) {
System.exit(1);
} else {
System.exit(0);
}
} catch (SQLException e) {
System.err.println("Info exception:");
e.printStackTrace(System.err);
@@ -335,31 +315,6 @@ public class DatabaseUtils {
}
try (Connection connection = dataSource.getConnection()) {
String dbType = getDbType(connection);
// Not all Postgres user accounts will be able to run a 'clean',
// as only 'superuser' accounts can remove the 'pgcrypto' extension.
if (dbType.equals(DBMS_POSTGRES)) {
// Check if database user has permissions suitable to run a clean
if (!PostgresUtils.checkCleanPermissions(connection)) {
String username = connection.getMetaData().getUserName();
// Exit immediately, providing a descriptive error message
System.out.println(
"\nERROR: The database user '" + username + "' does not have sufficient " +
"privileges to run a 'database clean' (via Flyway).");
System.out.println(
"\nIn order to run a 'clean', the database user MUST have 'superuser' privileges");
System.out.println(
"OR the '" + PostgresUtils.PGCRYPTO + "' extension must be installed in a " +
"separate schema (see documentation).");
System.out.println(
"\nOptionally, you could also manually remove the '" + PostgresUtils.PGCRYPTO +
"' extension first (DROP EXTENSION " + PostgresUtils.PGCRYPTO +
" CASCADE;), then rerun the 'clean'");
System.exit(1);
}
}
BufferedReader input = new BufferedReader(new InputStreamReader(System.in,
StandardCharsets.UTF_8));
@@ -368,11 +323,6 @@ public class DatabaseUtils {
.println("\nWARNING: ALL DATA AND TABLES IN YOUR DATABASE WILL BE PERMANENTLY DELETED.\n");
System.out.println("There is NO turning back from this action. Backup your DB before " +
"continuing.");
if (dbType.equals(DBMS_POSTGRES)) {
System.out.println(
"\nPOSTGRES WARNING: the '" + PostgresUtils.PGCRYPTO + "' extension will be dropped " +
"if it is in the same schema as the DSpace database.\n");
}
System.out.print("Do you want to PERMANENTLY DELETE everything from your database? [y/n]: ");
String choiceString = input.readLine();
input.close();
@@ -476,108 +426,10 @@ public class DatabaseUtils {
"Database Software: " + meta.getDatabaseProductName() + " version " + meta.getDatabaseProductVersion());
System.out.println("Database Driver: " + meta.getDriverName() + " version " + meta.getDriverVersion());
// For Postgres, report whether pgcrypto is installed
// (If it isn't, we'll also write out warnings...see below)
if (dbType.equals(DBMS_POSTGRES)) {
boolean pgcryptoUpToDate = PostgresUtils.isPgcryptoUpToDate();
Double pgcryptoVersion = PostgresUtils.getPgcryptoInstalledVersion(connection);
System.out.println(
"PostgreSQL '" + PostgresUtils.PGCRYPTO + "' extension installed/up-to-date? " + pgcryptoUpToDate + "" +
" " + ((pgcryptoVersion != null) ? "(version=" + pgcryptoVersion + ")" : "(not installed)"));
}
// Finally, print out our version of Flyway
System.out.println("FlywayDB Version: " + VersionPrinter.getVersion());
}
/**
* Print any warnings about current database setup to System.err (if any).
* This is utilized by both the 'test' and 'info' commandline options.
*
* @param connection current database connection
* @return boolean true if database issues found, false otherwise
* @throws SQLException if database error occurs
*/
private static boolean printDBIssues(Connection connection) throws SQLException {
boolean issueFound = false;
// Get the DB Type
String dbType = getDbType(connection);
// For PostgreSQL databases, we need to check for the 'pgcrypto' extension.
// If it is NOT properly installed, we'll need to warn the user, as DSpace will be unable to proceed.
if (dbType.equals(DBMS_POSTGRES)) {
// Get version of pgcrypto available in this postgres instance
Double pgcryptoAvailable = PostgresUtils.getPgcryptoAvailableVersion(connection);
// Generic requirements message
String requirementsMsg = "\n** DSpace REQUIRES PostgreSQL >= " + PostgresUtils.POSTGRES_VERSION + " AND "
+ PostgresUtils.PGCRYPTO + " extension >= " + PostgresUtils.PGCRYPTO_VERSION + " **\n";
// Check if installed in PostgreSQL & a supported version
if (pgcryptoAvailable != null && pgcryptoAvailable.compareTo(PostgresUtils.PGCRYPTO_VERSION) >= 0) {
// We now know it's available in this Postgres. Let's see if it is installed in this database.
Double pgcryptoInstalled = PostgresUtils.getPgcryptoInstalledVersion(connection);
// Check if installed in database, but outdated version
if (pgcryptoInstalled != null && pgcryptoInstalled.compareTo(PostgresUtils.PGCRYPTO_VERSION) < 0) {
System.out.println(
"\nWARNING: Required PostgreSQL '" + PostgresUtils.PGCRYPTO + "' extension is OUTDATED " +
"(installed version=" + pgcryptoInstalled + ", available version = " + pgcryptoAvailable
+ ").");
System.out.println(requirementsMsg);
System.out.println(
"To update it, please connect to your DSpace database as a 'superuser' and manually run the " +
"following command: ");
System.out.println(
"\n ALTER EXTENSION " + PostgresUtils.PGCRYPTO + " UPDATE TO '" + pgcryptoAvailable + "';\n");
issueFound = true;
} else if (pgcryptoInstalled == null) {
// If it's not installed in database
System.out.println(
"\nWARNING: Required PostgreSQL '" + PostgresUtils.PGCRYPTO + "' extension is NOT INSTALLED " +
"on this database.");
System.out.println(requirementsMsg);
System.out.println(
"To install it, please connect to your DSpace database as a 'superuser' and manually run the " +
"following command: ");
System.out.println("\n CREATE EXTENSION " + PostgresUtils.PGCRYPTO + ";\n");
issueFound = true;
}
} else if (pgcryptoAvailable != null && pgcryptoAvailable.compareTo(PostgresUtils.PGCRYPTO_VERSION) < 0) {
// If installed in Postgres, but an unsupported version
System.out.println(
"\nWARNING: UNSUPPORTED version of PostgreSQL '" + PostgresUtils.PGCRYPTO + "' extension found " +
"(version=" + pgcryptoAvailable + ").");
System.out.println(requirementsMsg);
System.out.println(
"Make sure you are running a supported version of PostgreSQL, and then install " + PostgresUtils
.PGCRYPTO + " version >= " + PostgresUtils.PGCRYPTO_VERSION);
System.out.println(
"The '" + PostgresUtils.PGCRYPTO + "' extension is often provided in the 'postgresql-contrib' " +
"package for your operating system.");
issueFound = true;
} else if (pgcryptoAvailable == null) {
// If it's not installed in Postgres
System.out.println(
"\nWARNING: PostgreSQL '" + PostgresUtils.PGCRYPTO + "' extension is NOT AVAILABLE. Please " +
"install it into this PostgreSQL instance.");
System.out.println(requirementsMsg);
System.out.println(
"The '" + PostgresUtils.PGCRYPTO + "' extension is often provided in the 'postgresql-contrib' " +
"package for your operating system.");
System.out.println(
"Once the extension is installed globally, please connect to your DSpace database as a " +
"'superuser' and manually run the following command: ");
System.out.println("\n CREATE EXTENSION " + PostgresUtils.PGCRYPTO + ";\n");
issueFound = true;
}
}
return issueFound;
}
/**
* Setup/Initialize the Flyway Configuration to run against our DSpace database
* and point at our migration scripts.

View File

@@ -1,149 +0,0 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.storage.rdbms;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.logging.log4j.Logger;
import org.flywaydb.core.api.FlywayException;
import org.flywaydb.core.api.callback.Callback;
import org.flywaydb.core.api.callback.Context;
import org.flywaydb.core.api.callback.Event;
/**
* This is a FlywayCallback class which automatically verifies that "pgcrypto"
* is at the proper version before running any database migrations.
* <P>
* When running PostgreSQL, pgcrypto is REQUIRED by DSpace as it allows UUIDs
* to be generated.
* <P>
* During a database "clean", this also de-registers "pgcrypto" proir to the
* full database clean.
*
* @author Tim Donohue
*/
public class PostgreSQLCryptoChecker implements Callback {
private Logger log = org.apache.logging.log4j.LogManager.getLogger(PostgreSQLCryptoChecker.class);
/**
* Check for pgcrypto (if needed). Throws an exception if pgcrypto is
* not installed or needs an upgrade.
*
* @param connection database connection
*/
public void checkPgCrypto(Connection connection) {
String dbType;
try {
dbType = DatabaseUtils.getDbType(connection);
} catch (SQLException se) {
throw new FlywayException("Unable to determine database type.", se);
}
// ONLY Check if this is a PostgreSQL database
if (dbType != null && dbType.equals(DatabaseUtils.DBMS_POSTGRES)) {
// If this is a PostgreSQL database, then a supported version
// of the 'pgcrypto' extension MUST be installed to continue.
// Check if pgcrypto is both installed & a supported version
if (!PostgresUtils.isPgcryptoUpToDate()) {
throw new FlywayException(
"This PostgreSQL Database is INCOMPATIBLE with DSpace. The upgrade will NOT proceed. " +
"A supported version (>=" + PostgresUtils.PGCRYPTO_VERSION + ") of the '" + PostgresUtils
.PGCRYPTO + "' extension must be installed! " +
"Please run 'dspace database info' for additional info/tips.");
}
}
}
/**
* Remove pgcrypto (if necessary).
* <P>
* The pgcrypto extension MUST be removed before a clean or else errors occur.
* This method checks if it needs to be removed and, if so, removes it.
*
* @param connection database connection
*/
public void removePgCrypto(Connection connection) {
try {
String dbType = DatabaseUtils.getDbType(connection);
// ONLY remove if this is a PostgreSQL database
if (dbType != null && dbType.equals(DatabaseUtils.DBMS_POSTGRES)) {
// Get current schema
String schema = DatabaseUtils.getSchemaName(connection);
// Check if pgcrypto is in this schema
// If so, it MUST be removed before a 'clean'
if (PostgresUtils.isPgcryptoInSchema(schema)) {
// remove the extension
try (Statement statement = connection.createStatement()) {
// WARNING: ONLY superusers can remove pgcrypto. However, at this point,
// we have already verified user acct permissions via PostgresUtils.checkCleanPermissions()
// (which is called prior to a 'clean' being triggered).
statement.execute("DROP EXTENSION " + PostgresUtils.PGCRYPTO + " CASCADE");
}
}
}
} catch (SQLException e) {
throw new FlywayException("Failed to check for and/or remove '" + PostgresUtils.PGCRYPTO + "' extension",
e);
}
}
/**
* The callback name, Flyway will use this to sort the callbacks alphabetically before executing them
* @return The callback name
*/
@Override
public String getCallbackName() {
// Return class name only (not prepended by package)
return PostgreSQLCryptoChecker.class.getSimpleName();
}
/**
* Events supported by this callback.
* @param event Flyway event
* @param context Flyway context
* @return true if BEFORE_BASELINE, BEFORE_MIGRATE or BEFORE_CLEAN
*/
@Override
public boolean supports(Event event, Context context) {
return event.equals(Event.BEFORE_BASELINE) || event.equals(Event.BEFORE_MIGRATE) ||
event.equals(Event.BEFORE_CLEAN);
}
/**
* Whether event can be handled in a transaction or whether it must be handle outside of transaction.
* @param event Flyway event
* @param context Flyway context
* @return true
*/
@Override
public boolean canHandleInTransaction(Event event, Context context) {
return true;
}
/**
* What to run when the callback is triggered.
* @param event Flyway event
* @param context Flyway context
*/
@Override
public void handle(Event event, Context context) {
// If, before initializing or migrating database, check for pgcrypto
// Else, before Cleaning database, remove pgcrypto (if exists)
if (event.equals(Event.BEFORE_BASELINE) || event.equals(Event.BEFORE_MIGRATE)) {
checkPgCrypto(context.getConnection());
} else if (event.equals(Event.BEFORE_CLEAN)) {
removePgCrypto(context.getConnection());
}
}
}

View File

@@ -1,218 +0,0 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.storage.rdbms;
import static org.dspace.storage.rdbms.DatabaseUtils.getSchemaName;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.flywaydb.core.api.FlywayException;
/**
* Database utility class specific to Postgres.
* This class contains tools and methods which are useful in determining
* the status of a PostgreSQL database backend. It's a companion class
* to DatabaseUtils, but PostgreSQL specific.
*
* @author Tim Donohue
*/
public class PostgresUtils {
// PostgreSQL pgcrypto extension name, and required versions of Postgres & pgcrypto
public static final String PGCRYPTO = "pgcrypto";
public static final Double PGCRYPTO_VERSION = 1.1;
public static final Double POSTGRES_VERSION = 9.4;
/**
* Default constructor
*/
private PostgresUtils() { }
/**
* Get version of pgcrypto extension available. The extension is "available"
* if it's been installed via operating system tools/packages. It also
* MUST be installed in the DSpace database (see getPgcryptoInstalled()).
* <P>
* The pgcrypto extension is required for Postgres databases
*
* @param connection database connection
* @return version number or null if not available
*/
protected static Double getPgcryptoAvailableVersion(Connection connection) {
Double version = null;
String checkPgCryptoAvailable = "SELECT default_version AS version FROM pg_available_extensions WHERE name=?";
// Run the query to obtain the version of 'pgcrypto' available
try (PreparedStatement statement = connection.prepareStatement(checkPgCryptoAvailable)) {
statement.setString(1, PGCRYPTO);
try (ResultSet results = statement.executeQuery()) {
if (results.next()) {
version = results.getDouble("version");
}
}
} catch (SQLException e) {
throw new FlywayException("Unable to determine whether 'pgcrypto' extension is available.", e);
}
return version;
}
/**
* Get version of pgcrypto extension installed in the DSpace database.
* <P>
* The pgcrypto extension is required for Postgres databases to support
* UUIDs.
*
* @param connection database connection
* @return version number or null if not installed
*/
protected static Double getPgcryptoInstalledVersion(Connection connection) {
Double version = null;
String checkPgCryptoInstalled = "SELECT extversion AS version FROM pg_extension WHERE extname=?";
// Run the query to obtain the version of 'pgcrypto' installed on this database
try (PreparedStatement statement = connection.prepareStatement(checkPgCryptoInstalled)) {
statement.setString(1, PGCRYPTO);
try (ResultSet results = statement.executeQuery()) {
if (results.next()) {
version = results.getDouble("version");
}
}
} catch (SQLException e) {
throw new FlywayException("Unable to determine whether 'pgcrypto' extension is installed.", e);
}
return version;
}
/**
* Check if the pgcrypto extension is BOTH installed AND up-to-date.
* <P>
* This requirement is only needed for PostgreSQL databases.
* It doesn't matter what schema pgcrypto is installed in, as long as it exists.
*
* @return true if everything is installed and up-to-date. False otherwise.
*/
public static boolean isPgcryptoUpToDate() {
// Get our configured dataSource
DataSource dataSource = DatabaseUtils.getDataSource();
try (Connection connection = dataSource.getConnection()) {
Double pgcryptoInstalled = getPgcryptoInstalledVersion(connection);
// Check if installed & up-to-date in this DSpace database
if (pgcryptoInstalled != null && pgcryptoInstalled.compareTo(PGCRYPTO_VERSION) >= 0) {
return true;
}
return false;
} catch (SQLException e) {
throw new FlywayException("Unable to determine whether 'pgcrypto' extension is up-to-date.", e);
}
}
/**
* Check if the pgcrypto extension is installed into a particular schema
* <P>
* This allows us to check if pgcrypto needs to be REMOVED prior to running
* a 'clean' on this database. If pgcrypto is in the same schema as the
* dspace database, a 'clean' will require removing pgcrypto FIRST.
*
* @param schema name of schema
* @return true if pgcrypto is in this schema. False otherwise.
*/
public static boolean isPgcryptoInSchema(String schema) {
// Get our configured dataSource
DataSource dataSource = DatabaseUtils.getDataSource();
try (Connection connection = dataSource.getConnection()) {
// Check if pgcrypto is installed in the current database schema.
String pgcryptoInstalledInSchema = "SELECT extversion FROM pg_extension,pg_namespace " +
"WHERE pg_extension.extnamespace=pg_namespace.oid " +
"AND extname=? " +
"AND nspname=?;";
Double pgcryptoVersion = null;
try (PreparedStatement statement = connection.prepareStatement(pgcryptoInstalledInSchema)) {
statement.setString(1, PGCRYPTO);
statement.setString(2, schema);
try (ResultSet results = statement.executeQuery()) {
if (results.next()) {
pgcryptoVersion = results.getDouble("extversion");
}
}
}
// If a pgcrypto version returns, it's installed in this schema
if (pgcryptoVersion != null) {
return true;
} else {
return false;
}
} catch (SQLException e) {
throw new FlywayException(
"Unable to determine whether 'pgcrypto' extension is installed in schema '" + schema + "'.", e);
}
}
/**
* Check if the current user has permissions to run a clean on existing
* database.
* <P>
* Mostly this just checks if you need to remove pgcrypto, and if so,
* whether you have permissions to do so.
*
* @param connection database connection
* @return true if permissions valid, false otherwise
*/
protected static boolean checkCleanPermissions(Connection connection) {
try {
// get username of our db user
String username = connection.getMetaData().getUserName();
// Check their permissions. Are they a 'superuser'?
String checkSuperuser = "SELECT rolsuper FROM pg_roles WHERE rolname=?;";
boolean superuser = false;
try (PreparedStatement statement = connection.prepareStatement(checkSuperuser)) {
statement.setString(1, username);
try (ResultSet results = statement.executeQuery()) {
if (results.next()) {
superuser = results.getBoolean("rolsuper");
}
}
} catch (SQLException e) {
throw new FlywayException("Unable to determine if user '" + username + "' is a superuser.", e);
}
// If user is a superuser, then "clean" can be run successfully
if (superuser) {
return true;
} else {
// Otherwise, we'll need to see which schema 'pgcrypto' is installed in
// Get current schema name
String schema = getSchemaName(connection);
// If pgcrypto is installed in this schema, then superuser privileges are needed to remove it
if (isPgcryptoInSchema(schema)) {
return false;
} else {
// otherwise, a 'clean' can be run by anyone
return true;
}
}
} catch (SQLException e) {
throw new FlywayException("Unable to determine if DB user has 'clean' privileges.", e);
}
}
}

View File

@@ -67,6 +67,7 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
public void perform(Context context, DSpaceRunnableHandler handler, String subscriptionType, String frequency) {
List<IndexableObject> communityItems = new ArrayList<>();
List<IndexableObject> collectionsItems = new ArrayList<>();
EPerson currentEperson = context.getCurrentUser();
try {
List<Subscription> subscriptions =
findAllSubscriptionsBySubscriptionTypeAndFrequency(context, subscriptionType, frequency);
@@ -77,7 +78,10 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
for (Subscription subscription : subscriptions) {
DSpaceObject dSpaceObject = subscription.getDSpaceObject();
EPerson ePerson = subscription.getEPerson();
// Set the current user to the subscribed eperson because the Solr query checks
// the permissions of the current user in the ANONYMOUS group.
// If there is no user (i.e., `current user = null`), it will send an email with no new items.
context.setCurrentUser(ePerson);
if (!authorizeService.authorizeActionBoolean(context, ePerson, dSpaceObject, READ, true)) {
iterator++;
continue;
@@ -126,6 +130,8 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
handler.handleException(e);
context.abort();
}
// Reset the current user because it was changed to subscriber eperson
context.setCurrentUser(currentEperson);
}
@SuppressWarnings("rawtypes")

View File

@@ -58,7 +58,7 @@ public class PubMedToImport {
*/
private PubMedToImport() { }
public static void main(String args[]) {
public static void main(String[] args) {
Options options = new Options();
options.addOption(new Option("s", "source", true, "Source xml"));

View File

@@ -556,7 +556,7 @@ public class SolrImportExport {
YearMonth monthStartDate;
String monthStart = monthFacet.getValue();
try {
monthStartDate = YearMonth.parse(monthStart);
monthStartDate = YearMonth.parse(monthStart, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
} catch (DateTimeParseException e) {
throw new SolrImportExportException("Could not read start of month batch as date: " + monthStart, e);
}

Some files were not shown because too many files have changed in this diff Show More