diff --git a/.codecov.yml b/.codecov.yml
index a628d33cbec5..326dd3e0b29e 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -4,13 +4,6 @@
# Can be validated via instructions at:
# https://docs.codecov.io/docs/codecov-yaml#validate-your-repository-yaml
-# Tell Codecov not to send a coverage notification until (at least) 2 builds are completed
-# Since we run Unit & Integration tests in parallel, this lets Codecov know that coverage
-# needs to be merged across those builds
-codecov:
- notify:
- after_n_builds: 2
-
# Settings related to code coverage analysis
coverage:
status:
diff --git a/.dockerignore b/.dockerignore
index 0e42960dc9c0..7d3bdc2b4b0d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -6,6 +6,5 @@ dspace/modules/*/target/
Dockerfile.*
dspace/src/main/docker/dspace-postgres-pgcrypto
dspace/src/main/docker/dspace-postgres-pgcrypto-curl
-dspace/src/main/docker/solr
dspace/src/main/docker/README.md
dspace/src/main/docker-compose/
diff --git a/.github/disabled-workflows/issue_opened.yml b/.github/disabled-workflows/issue_opened.yml
index 5d7c1c30f7d3..97f77063aa26 100644
--- a/.github/disabled-workflows/issue_opened.yml
+++ b/.github/disabled-workflows/issue_opened.yml
@@ -16,7 +16,11 @@ jobs:
# Only add to project board if issue is flagged as "needs triage" or has no labels
# NOTE: By default we flag new issues as "needs triage" in our issue template
if: (contains(github.event.issue.labels.*.name, 'needs triage') || join(github.event.issue.labels.*.name) == '')
+<<<<<<< HEAD:.github/disabled-workflows/issue_opened.yml
uses: actions/add-to-project@v0.3.0
+=======
+ uses: actions/add-to-project@v0.5.0
+>>>>>>> dspace-7.6.1:.github/workflows/issue_opened.yml
# Note, the authentication token below is an ORG level Secret.
# It must be created/recreated manually via a personal access token with admin:org, project, public_repo permissions
# See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token#permissions-for-the-github_token
diff --git a/.github/disabled-workflows/pull_request_opened.yml b/.github/disabled-workflows/pull_request_opened.yml
deleted file mode 100644
index 0dc718c0b9a3..000000000000
--- a/.github/disabled-workflows/pull_request_opened.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-# This workflow runs whenever a new pull request is created
-# TEMPORARILY DISABLED. Unfortunately this doesn't work for PRs created from forked repositories (which is how we tend to create PRs).
-# There is no known workaround yet. See https://github.community/t/how-to-use-github-token-for-prs-from-forks/16818
-name: Pull Request opened
-
-# Only run for newly opened PRs against the "main" branch
-on:
- pull_request:
- types: [opened]
- branches:
- - main
-
-jobs:
- automation:
- runs-on: ubuntu-latest
- steps:
- # Assign the PR to whomever created it. This is useful for visualizing assignments on project boards
- # See https://github.com/marketplace/actions/pull-request-assigner
- - name: Assign PR to creator
- uses: thomaseizinger/assign-pr-creator-action@v1.0.0
- # Note, this authentication token is created automatically
- # See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- # Ignore errors. It is possible the PR was created by someone who cannot be assigned
- continue-on-error: true
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 76ff6196da63..053d4708c9c0 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
| Phases | MP | MM | MB | MR | JM | Total |
|-----------------|----:|----:|----:|-----:|-----:|-------:|
| ETA | 0 | 0 | 0 | 0 | 0 | 0 |
@@ -13,3 +14,33 @@
(Write here, if there is needed describe some specific problem. Erase it, when it is not needed.)
## Problems
(Write here, if some unexpected problems occur during solving issues. Erase it, when it is not needed.)
+=======
+## References
+_Add references/links to any related issues or PRs. These may include:_
+* Fixes #`issue-number` (if this fixes an issue ticket)
+* Related to DSpace/RestContract#`pr-number` (if a corresponding REST Contract PR exists)
+
+## Description
+Short summary of changes (1-2 sentences).
+
+## Instructions for Reviewers
+Please add a more detailed description of the changes made by your PR. At a minimum, providing a bulleted list of changes in your PR is helpful to reviewers.
+
+List of changes in this PR:
+* First, ...
+* Second, ...
+
+**Include guidance for how to test or review your PR.** This may include: steps to reproduce a bug, screenshots or description of a new feature, or reasons behind specific changes.
+
+## Checklist
+_This checklist provides a reminder of what we are going to look for when reviewing your PR. You need not complete this checklist prior to creating your PR (draft PRs are always welcome). If you are unsure about an item in the checklist, don't hesitate to ask. We're here to help!_
+
+- [ ] My PR is small in size (e.g. less than 1,000 lines of code, not including comments & integration tests). Exceptions may be made if previously agreed upon.
+- [ ] My PR passes Checkstyle validation based on the [Code Style Guide](https://wiki.lyrasis.org/display/DSPACE/Code+Style+Guide).
+- [ ] My PR includes Javadoc for _all new (or modified) public methods and classes_. It also includes Javadoc for large or complex private methods.
+- [ ] My PR passes all tests and includes new/updated Unit or Integration Tests based on the [Code Testing Guide](https://wiki.lyrasis.org/display/DSPACE/Code+Testing+Guide).
+- [ ] If my PR includes new libraries/dependencies (in any `pom.xml`), I've made sure their licenses align with the [DSpace BSD License](https://github.com/DSpace/DSpace/blob/main/LICENSE) based on the [Licensing of Contributions](https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines#CodeContributionGuidelines-LicensingofContributions) documentation.
+- [ ] If my PR modifies REST API endpoints, I've opened a separate [REST Contract](https://github.com/DSpace/RestContract/blob/main/README.md) PR related to this change.
+- [ ] If my PR includes new configurations, I've provided basic technical documentation in the PR itself.
+- [ ] If my PR fixes an issue ticket, I've [linked them together](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
+>>>>>>> dspace-7.6.1
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8c4eda7ae529..5f42890b49eb 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,6 +13,9 @@ on:
permissions:
contents: read # to fetch code (actions/checkout)
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
jobs:
tests:
runs-on: ubuntu-latest
@@ -83,8 +86,45 @@ jobs:
name: ${{ matrix.type }} results
path: ${{ matrix.resultsdir }}
- # https://github.com/codecov/codecov-action
+ # Upload code coverage report to artifact, so that it can be shared with the 'codecov' job (see below)
+ - name: Upload code coverage report to Artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ matrix.type }} coverage report
+ path: 'dspace/target/site/jacoco-aggregate/jacoco.xml'
+ retention-days: 14
+
+ # Codecov upload is a separate job in order to allow us to restart this separate from the entire build/test
+ # job above. This is necessary because Codecov uploads seem to randomly fail at times.
+ # See https://community.codecov.com/t/upload-issues-unable-to-locate-build-via-github-actions-api/3954
+ codecov:
+ # Must run after 'tests' job above
+ needs: tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ # Download artifacts from previous 'tests' job
+ - name: Download coverage artifacts
+ uses: actions/download-artifact@v3
+
+ # Now attempt upload to Codecov using its action.
+ # NOTE: We use a retry action to retry the Codecov upload if it fails the first time.
+ #
+ # Retry action: https://github.com/marketplace/actions/retry-action
+ # Codecov action: https://github.com/codecov/codecov-action
- name: Upload coverage to Codecov.io
+<<<<<<< HEAD
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
+=======
+ uses: Wandalen/wretry.action@v1.0.36
+ with:
+ action: codecov/codecov-action@v3
+ # Try upload 5 times max
+ attempt_limit: 5
+ # Run again in 30 seconds
+ attempt_delay: 30000
+>>>>>>> dspace-7.6.1
diff --git a/.github/workflows/codescan.yml b/.github/workflows/codescan.yml
index 7580b4ba3dc3..5bdddbaecf2b 100644
--- a/.github/workflows/codescan.yml
+++ b/.github/workflows/codescan.yml
@@ -5,12 +5,25 @@
# because CodeQL requires a fresh build with all tests *disabled*.
name: "Code Scanning"
+<<<<<<< HEAD
# Run this code scan for all pushes / PRs to main branch. Also run once a week.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
+=======
+# Run this code scan for all pushes / PRs to main or maintenance branches. Also run once a week.
+on:
+ push:
+ branches:
+ - main
+ - 'dspace-**'
+ pull_request:
+ branches:
+ - main
+ - 'dspace-**'
+>>>>>>> dspace-7.6.1
# Don't run if PR is only updating static documentation
paths-ignore:
- '**/*.md'
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 9e568177e14e..1eeaf47339b3 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -13,7 +13,32 @@ on:
permissions:
contents: read # to fetch code (actions/checkout)
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
+# Define shared environment variables for all jobs below
+env:
+ # Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action)
+ # For a new commit on default branch (main), use the literal tag 'latest' on Docker image.
+ # For a new commit on other branches, use the branch name as the tag for Docker image.
+ # For a new tag, copy that tag name as the tag for Docker image.
+ IMAGE_TAGS: |
+ type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }}
+ type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }}
+ type=ref,event=tag
+ # Define default tag "flavor" for docker/metadata-action per
+ # https://github.com/docker/metadata-action#flavor-input
+ # We manage the 'latest' tag ourselves to the 'main' branch (see settings above)
+ TAGS_FLAVOR: |
+ latest=false
+ # Architectures / Platforms for which we will build Docker images
+ # If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work.
+ # If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. NOTE: The ARM64 build takes MUCH
+ # longer (around 45mins or so) which is why we only run it when pushing a new Docker image.
+ PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }}
+
jobs:
+<<<<<<< HEAD
docker:
# Ensure this job never runs on forked repos. It's only executed for our repo
if: github.repository == 'dataquest-dev/dspace'
@@ -37,14 +62,27 @@ jobs:
# If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. NOTE: The ARM64 build takes MUCH
# longer (around 45mins or so) which is why we only run it when pushing a new Docker image.
PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }}
+=======
+ ####################################################
+ # Build/Push the 'dspace/dspace-dependencies' image.
+ # This image is used by all other jobs.
+ ####################################################
+ dspace-dependencies:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ runs-on: ubuntu-latest
+>>>>>>> dspace-7.6.1
steps:
# https://github.com/actions/checkout
- name: Checkout codebase
uses: actions/checkout@v3
+<<<<<<< HEAD
- name: Add version
run: python scripts/sourceversion.py > dspace/config/VERSION_D.txt
+=======
+>>>>>>> dspace-7.6.1
# https://github.com/docker/setup-buildx-action
- name: Setup Docker Buildx
@@ -63,9 +101,12 @@ jobs:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+<<<<<<< HEAD
####################################################
# Build/Push the 'dataquest/dspace-dependencies' image
####################################################
+=======
+>>>>>>> dspace-7.6.1
# https://github.com/docker/metadata-action
# Get Metadata for docker_build_deps step below
- name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-dependencies' image
@@ -79,7 +120,11 @@ jobs:
# https://github.com/docker/build-push-action
- name: Build and push 'dspace-dependencies' image
id: docker_build_deps
+<<<<<<< HEAD
uses: docker/build-push-action@v3
+=======
+ uses: docker/build-push-action@v4
+>>>>>>> dspace-7.6.1
with:
context: .
file: ./Dockerfile.dependencies
@@ -91,9 +136,44 @@ jobs:
tags: ${{ steps.meta_build_deps.outputs.tags }}
labels: ${{ steps.meta_build_deps.outputs.labels }}
+<<<<<<< HEAD
#######################################
# Build/Push the 'dataquest/dspace' image
#######################################
+=======
+ #######################################
+ # Build/Push the 'dspace/dspace' image
+ #######################################
+ dspace:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ # Must run after 'dspace-dependencies' job above
+ needs: dspace-dependencies
+ runs-on: ubuntu-latest
+
+ steps:
+ # https://github.com/actions/checkout
+ - name: Checkout codebase
+ uses: actions/checkout@v3
+
+ # https://github.com/docker/setup-buildx-action
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ # https://github.com/docker/setup-qemu-action
+ - name: Set up QEMU emulation to build for multiple architectures
+ uses: docker/setup-qemu-action@v2
+
+ # https://github.com/docker/login-action
+ - name: Login to DockerHub
+ # Only login if not a PR, as PRs only trigger a Docker build and not a push
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+
+>>>>>>> dspace-7.6.1
# Get Metadata for docker_build step below
- name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace' image
id: meta_build
@@ -105,7 +185,11 @@ jobs:
- name: Build and push 'dspace' image
id: docker_build
+<<<<<<< HEAD
uses: docker/build-push-action@v3
+=======
+ uses: docker/build-push-action@v4
+>>>>>>> dspace-7.6.1
with:
context: .
file: ./Dockerfile
@@ -117,9 +201,44 @@ jobs:
tags: ${{ steps.meta_build.outputs.tags }}
labels: ${{ steps.meta_build.outputs.labels }}
+<<<<<<< HEAD
#####################################################
# Build/Push the 'dataquest/dspace' image ('-test' tag)
#####################################################
+=======
+ #############################################################
+ # Build/Push the 'dspace/dspace' image ('-test' tag)
+ #############################################################
+ dspace-test:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ # Must run after 'dspace-dependencies' job above
+ needs: dspace-dependencies
+ runs-on: ubuntu-latest
+
+ steps:
+ # https://github.com/actions/checkout
+ - name: Checkout codebase
+ uses: actions/checkout@v3
+
+ # https://github.com/docker/setup-buildx-action
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ # https://github.com/docker/setup-qemu-action
+ - name: Set up QEMU emulation to build for multiple architectures
+ uses: docker/setup-qemu-action@v2
+
+ # https://github.com/docker/login-action
+ - name: Login to DockerHub
+ # Only login if not a PR, as PRs only trigger a Docker build and not a push
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+
+>>>>>>> dspace-7.6.1
# Get Metadata for docker_build_test step below
- name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-test' image
id: meta_build_test
@@ -134,7 +253,11 @@ jobs:
- name: Build and push 'dspace-test' image
id: docker_build_test
+<<<<<<< HEAD
uses: docker/build-push-action@v3
+=======
+ uses: docker/build-push-action@v4
+>>>>>>> dspace-7.6.1
with:
context: .
file: ./Dockerfile.test
@@ -146,9 +269,44 @@ jobs:
tags: ${{ steps.meta_build_test.outputs.tags }}
labels: ${{ steps.meta_build_test.outputs.labels }}
+<<<<<<< HEAD
###########################################
# Build/Push the 'dataquest/dspace-cli' image
###########################################
+=======
+ ###########################################
+ # Build/Push the 'dspace/dspace-cli' image
+ ###########################################
+ dspace-cli:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ # Must run after 'dspace-dependencies' job above
+ needs: dspace-dependencies
+ runs-on: ubuntu-latest
+
+ steps:
+ # https://github.com/actions/checkout
+ - name: Checkout codebase
+ uses: actions/checkout@v3
+
+ # https://github.com/docker/setup-buildx-action
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ # https://github.com/docker/setup-qemu-action
+ - name: Set up QEMU emulation to build for multiple architectures
+ uses: docker/setup-qemu-action@v2
+
+ # https://github.com/docker/login-action
+ - name: Login to DockerHub
+ # Only login if not a PR, as PRs only trigger a Docker build and not a push
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+
+>>>>>>> dspace-7.6.1
# Get Metadata for docker_build_test step below
- name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-cli' image
id: meta_build_cli
@@ -160,7 +318,11 @@ jobs:
- name: Build and push 'dspace-cli' image
id: docker_build_cli
+<<<<<<< HEAD
uses: docker/build-push-action@v3
+=======
+ uses: docker/build-push-action@v4
+>>>>>>> dspace-7.6.1
with:
context: .
file: ./Dockerfile.cli
@@ -172,6 +334,7 @@ jobs:
tags: ${{ steps.meta_build_cli.outputs.tags }}
labels: ${{ steps.meta_build_cli.outputs.labels }}
+<<<<<<< HEAD
- name: redeploy
if: '!cancelled()'
run: |
@@ -181,3 +344,168 @@ jobs:
https://api.github.com/repos/dataquest-dev/\
dspace-angular/actions/workflows/deploy.yml/dispatches \
--data "{\"ref\":\"refs/heads/dtq-dev\"}"
+=======
+ ###########################################
+ # Build/Push the 'dspace/dspace-solr' image
+ ###########################################
+ dspace-solr:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ runs-on: ubuntu-latest
+
+ steps:
+ # https://github.com/actions/checkout
+ - name: Checkout codebase
+ uses: actions/checkout@v3
+
+ # https://github.com/docker/setup-buildx-action
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ # https://github.com/docker/setup-qemu-action
+ - name: Set up QEMU emulation to build for multiple architectures
+ uses: docker/setup-qemu-action@v2
+
+ # https://github.com/docker/login-action
+ - name: Login to DockerHub
+ # Only login if not a PR, as PRs only trigger a Docker build and not a push
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+
+ # Get Metadata for docker_build_solr step below
+ - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-solr' image
+ id: meta_build_solr
+ uses: docker/metadata-action@v4
+ with:
+ images: dspace/dspace-solr
+ tags: ${{ env.IMAGE_TAGS }}
+ flavor: ${{ env.TAGS_FLAVOR }}
+
+ - name: Build and push 'dspace-solr' image
+ id: docker_build_solr
+ uses: docker/build-push-action@v4
+ with:
+ context: .
+ file: ./dspace/src/main/docker/dspace-solr/Dockerfile
+ platforms: ${{ env.PLATFORMS }}
+ # For pull requests, we run the Docker build (to ensure no PR changes break the build),
+ # but we ONLY do an image push to DockerHub if it's NOT a PR
+ push: ${{ github.event_name != 'pull_request' }}
+ # Use tags / labels provided by 'docker/metadata-action' above
+ tags: ${{ steps.meta_build_solr.outputs.tags }}
+ labels: ${{ steps.meta_build_solr.outputs.labels }}
+
+ ###########################################################
+ # Build/Push the 'dspace/dspace-postgres-pgcrypto' image
+ ###########################################################
+ dspace-postgres-pgcrypto:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ runs-on: ubuntu-latest
+
+ steps:
+ # https://github.com/actions/checkout
+ - name: Checkout codebase
+ uses: actions/checkout@v3
+
+ # https://github.com/docker/setup-buildx-action
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ # https://github.com/docker/setup-qemu-action
+ - name: Set up QEMU emulation to build for multiple architectures
+ uses: docker/setup-qemu-action@v2
+
+ # https://github.com/docker/login-action
+ - name: Login to DockerHub
+ # Only login if not a PR, as PRs only trigger a Docker build and not a push
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+
+ # Get Metadata for docker_build_postgres step below
+ - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-postgres-pgcrypto' image
+ id: meta_build_postgres
+ uses: docker/metadata-action@v4
+ with:
+ images: dspace/dspace-postgres-pgcrypto
+ tags: ${{ env.IMAGE_TAGS }}
+ flavor: ${{ env.TAGS_FLAVOR }}
+
+ - name: Build and push 'dspace-postgres-pgcrypto' image
+ id: docker_build_postgres
+ uses: docker/build-push-action@v4
+ with:
+ # Must build out of subdirectory to have access to install script for pgcrypto
+ context: ./dspace/src/main/docker/dspace-postgres-pgcrypto/
+ dockerfile: Dockerfile
+ platforms: ${{ env.PLATFORMS }}
+ # For pull requests, we run the Docker build (to ensure no PR changes break the build),
+ # but we ONLY do an image push to DockerHub if it's NOT a PR
+ push: ${{ github.event_name != 'pull_request' }}
+ # Use tags / labels provided by 'docker/metadata-action' above
+ tags: ${{ steps.meta_build_postgres.outputs.tags }}
+ labels: ${{ steps.meta_build_postgres.outputs.labels }}
+
+ ########################################################################
+ # 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'
+ runs-on: ubuntu-latest
+
+ steps:
+ # https://github.com/actions/checkout
+ - name: Checkout codebase
+ uses: actions/checkout@v3
+
+ # https://github.com/docker/setup-buildx-action
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ # https://github.com/docker/setup-qemu-action
+ - name: Set up QEMU emulation to build for multiple architectures
+ uses: docker/setup-qemu-action@v2
+
+ # https://github.com/docker/login-action
+ - name: Login to DockerHub
+ # Only login if not a PR, as PRs only trigger a Docker build and not a push
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+
+ # Get Metadata for docker_build_postgres_loadsql step below
+ - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-postgres-pgcrypto-loadsql' image
+ id: meta_build_postgres_loadsql
+ uses: docker/metadata-action@v4
+ with:
+ images: dspace/dspace-postgres-pgcrypto
+ tags: ${{ env.IMAGE_TAGS }}
+ # Suffix all tags with "-loadsql". Otherwise, it uses the same
+ # tagging logic as the primary 'dspace/dspace-postgres-pgcrypto' image above.
+ flavor: ${{ env.TAGS_FLAVOR }}
+ suffix=-loadsql
+
+ - name: Build and push 'dspace-postgres-pgcrypto-loadsql' image
+ id: docker_build_postgres_loadsql
+ uses: docker/build-push-action@v4
+ with:
+ # Must build out of subdirectory to have access to install script for pgcrypto
+ context: ./dspace/src/main/docker/dspace-postgres-pgcrypto-curl/
+ dockerfile: Dockerfile
+ platforms: ${{ env.PLATFORMS }}
+ # For pull requests, we run the Docker build (to ensure no PR changes break the build),
+ # but we ONLY do an image push to DockerHub if it's NOT a PR
+ push: ${{ github.event_name != 'pull_request' }}
+ # Use tags / labels provided by 'docker/metadata-action' above
+ tags: ${{ steps.meta_build_postgres_loadsql.outputs.tags }}
+ labels: ${{ steps.meta_build_postgres_loadsql.outputs.labels }}
+>>>>>>> dspace-7.6.1
diff --git a/.github/workflows/label_merge_conflicts.yml b/.github/workflows/label_merge_conflicts.yml
new file mode 100644
index 000000000000..a023f4eef246
--- /dev/null
+++ b/.github/workflows/label_merge_conflicts.yml
@@ -0,0 +1,39 @@
+# This workflow checks open PRs for merge conflicts and labels them when conflicts are found
+name: Check for merge conflicts
+
+# Run this for all pushes (i.e. merges) to 'main' or maintenance branches
+on:
+ push:
+ branches:
+ - main
+ - 'dspace-**'
+ # So that the `conflict_label_name` is removed if conflicts are resolved,
+ # we allow this to run for `pull_request_target` so that github secrets are available.
+ pull_request_target:
+ types: [ synchronize ]
+
+permissions: {}
+
+jobs:
+ triage:
+ # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
+ if: github.repository == 'dspace/dspace'
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
+ steps:
+ # See: https://github.com/prince-chrismc/label-merge-conflicts-action
+ - name: Auto-label PRs with merge conflicts
+ uses: prince-chrismc/label-merge-conflicts-action@v3
+ # Ignore any failures -- may occur (randomly?) for older, outdated PRs.
+ continue-on-error: true
+ # Add "merge conflict" label if a merge conflict is detected. Remove it when resolved.
+ # Note, the authentication token is created automatically
+ # See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
+ with:
+ conflict_label_name: 'merge conflict'
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ conflict_comment: |
+ Hi @${author},
+ Conflicts have been detected against the base branch.
+ Please [resolve these conflicts](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts) as soon as you can. Thanks!
diff --git a/.github/workflows/port_merged_pull_request.yml b/.github/workflows/port_merged_pull_request.yml
new file mode 100644
index 000000000000..109835d14d3c
--- /dev/null
+++ b/.github/workflows/port_merged_pull_request.yml
@@ -0,0 +1,46 @@
+# This workflow will attempt to port a merged pull request to
+# the branch specified in a "port to" label (if exists)
+name: Port merged Pull Request
+
+# Only run for merged PRs against the "main" or maintenance branches
+# We allow this to run for `pull_request_target` so that github secrets are available
+# (This is required when the PR comes from a forked repo)
+on:
+ pull_request_target:
+ types: [ closed ]
+ branches:
+ - main
+ - 'dspace-**'
+
+permissions:
+ contents: write # so action can add comments
+ pull-requests: write # so action can create pull requests
+
+jobs:
+ port_pr:
+ runs-on: ubuntu-latest
+ # Don't run on closed *unmerged* pull requests
+ if: github.event.pull_request.merged
+ steps:
+ # Checkout code
+ - uses: actions/checkout@v3
+ # Port PR to other branch (ONLY if labeled with "port to")
+ # See https://github.com/korthout/backport-action
+ - name: Create backport pull requests
+ uses: korthout/backport-action@v1
+ with:
+ # Trigger based on a "port to [branch]" label on PR
+ # (This label must specify the branch name to port to)
+ label_pattern: '^port to ([^ ]+)$'
+ # Title to add to the (newly created) port PR
+ pull_title: '[Port ${target_branch}] ${pull_title}'
+ # Description to add to the (newly created) port PR
+ pull_description: 'Port of #${pull_number} by @${pull_author} to `${target_branch}`.'
+ # Copy all labels from original PR to (newly created) port PR
+ # NOTE: The labels matching 'label_pattern' are automatically excluded
+ copy_labels_pattern: '.*'
+ # Skip any merge commits in the ported PR. This means only non-merge commits are cherry-picked to the new PR
+ merge_commits: 'skip'
+ # Use a personal access token (PAT) to create PR as 'dspace-bot' user.
+ # A PAT is required in order for the new PR to trigger its own actions (for CI checks)
+ github_token: ${{ secrets.PR_PORT_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/pull_request_opened.yml b/.github/workflows/pull_request_opened.yml
new file mode 100644
index 000000000000..9b61af72d187
--- /dev/null
+++ b/.github/workflows/pull_request_opened.yml
@@ -0,0 +1,24 @@
+# This workflow runs whenever a new pull request is created
+name: Pull Request opened
+
+# Only run for newly opened PRs against the "main" or maintenance branches
+# We allow this to run for `pull_request_target` so that github secrets are available
+# (This is required to assign a PR back to the creator when the PR comes from a forked repo)
+on:
+ pull_request_target:
+ types: [ opened ]
+ branches:
+ - main
+ - 'dspace-**'
+
+permissions:
+ pull-requests: write
+
+jobs:
+ automation:
+ runs-on: ubuntu-latest
+ steps:
+ # Assign the PR to whomever created it. This is useful for visualizing assignments on project boards
+ # See https://github.com/toshimaru/auto-author-assign
+ - name: Assign PR to creator
+ uses: toshimaru/auto-author-assign@v1.6.2
diff --git a/Dockerfile b/Dockerfile
index 79cb24038666..cda20f74818c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -31,7 +31,7 @@ ARG TARGET_DIR=dspace-installer
COPY --from=build /install /dspace-src
WORKDIR /dspace-src
# Create the initial install deployment using ANT
-ENV ANT_VERSION 1.10.12
+ENV ANT_VERSION 1.10.13
ENV ANT_HOME /tmp/ant-$ANT_VERSION
ENV PATH $ANT_HOME/bin:$PATH
# Need wget to install ant
@@ -50,7 +50,7 @@ RUN ant init_installation update_configs update_code update_webapps
FROM tomcat:9-jdk${JDK_VERSION}
# NOTE: DSPACE_INSTALL must align with the "dspace.dir" default configuration.
ENV DSPACE_INSTALL=/dspace
-# Copy the /dspace directory from 'ant_build' containger to /dspace in this container
+# Copy the /dspace directory from 'ant_build' container to /dspace in this container
COPY --from=ant_build /dspace $DSPACE_INSTALL
# Expose Tomcat port and AJP port
EXPOSE 8080 8009 8000
diff --git a/Dockerfile.cli b/Dockerfile.cli
index 878ec038a3c1..09c61ea3ccca 100644
--- a/Dockerfile.cli
+++ b/Dockerfile.cli
@@ -30,12 +30,12 @@ ARG TARGET_DIR=dspace-installer
COPY --from=build /install /dspace-src
WORKDIR /dspace-src
# Create the initial install deployment using ANT
-ENV ANT_VERSION 1.10.12
+ENV ANT_VERSION 1.10.13
ENV ANT_HOME /tmp/ant-$ANT_VERSION
ENV PATH $ANT_HOME/bin:$PATH
-# Need wget to install ant
+# Need wget to install ant, and unzip for managing AIPs
RUN apt-get update \
- && apt-get install -y --no-install-recommends wget \
+ && apt-get install -y --no-install-recommends wget unzip \
&& apt-get purge -y --auto-remove \
&& rm -rf /var/lib/apt/lists/*
# Download and install 'ant'
diff --git a/LICENSES_THIRD_PARTY b/LICENSES_THIRD_PARTY
index b96ea77648a6..0169cb1363f9 100644
--- a/LICENSES_THIRD_PARTY
+++ b/LICENSES_THIRD_PARTY
@@ -26,7 +26,11 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* AWS Java SDK for Amazon S3 (com.amazonaws:aws-java-sdk-s3:1.12.261 - https://aws.amazon.com/sdkforjava)
* JMES Path Query library (com.amazonaws:jmespath-java:1.12.261 - https://aws.amazon.com/sdkforjava)
* HPPC Collections (com.carrotsearch:hppc:0.8.1 - http://labs.carrotsearch.com/hppc.html/hppc)
+<<<<<<< HEAD
* com.drewnoakes:metadata-extractor (com.drewnoakes:metadata-extractor:2.16.0 - https://drewnoakes.com/code/exif/)
+=======
+ * com.drewnoakes:metadata-extractor (com.drewnoakes:metadata-extractor:2.18.0 - https://drewnoakes.com/code/exif/)
+>>>>>>> dspace-7.6.1
* parso (com.epam:parso:2.0.14 - https://github.com/epam/parso)
* Esri Geometry API for Java (com.esri.geometry:esri-geometry-api:2.2.0 - https://github.com/Esri/geometry-api-java)
* ClassMate (com.fasterxml:classmate:1.3.0 - http://github.com/cowtowncoder/java-classmate)
@@ -34,12 +38,21 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Jackson-core (com.fasterxml.jackson.core:jackson-core:2.13.4 - https://github.com/FasterXML/jackson-core)
* jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.13.4.2 - http://github.com/FasterXML/jackson)
* Jackson dataformat: CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.12.6 - http://github.com/FasterXML/jackson-dataformats-binary)
+<<<<<<< HEAD
* Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.12.3 - http://github.com/FasterXML/jackson-dataformats-binary)
* Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1 - https://github.com/FasterXML/jackson-dataformats-text)
* Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.3 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
* Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.1 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
* Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
* Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.3 - https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names)
+=======
+ * Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.13.3 - http://github.com/FasterXML/jackson-dataformats-binary)
+ * Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1 - https://github.com/FasterXML/jackson-dataformats-text)
+ * Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
+ * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.1 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
+ * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
+ * Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5 - https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names)
+>>>>>>> dspace-7.6.1
* Java UUID Generator (com.fasterxml.uuid:java-uuid-generator:4.0.1 - https://github.com/cowtowncoder/java-uuid-generator)
* Woodstox (com.fasterxml.woodstox:woodstox-core:6.2.4 - https://github.com/FasterXML/woodstox)
* zjsonpatch (com.flipkart.zjsonpatch:zjsonpatch:0.4.6 - https://github.com/flipkart-incubator/zjsonpatch/)
@@ -56,19 +69,33 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Google Analytics API v3-rev145-1.23.0 (com.google.apis:google-api-services-analytics:v3-rev145-1.23.0 - http://nexus.sonatype.org/oss-repository-hosting.html/google-api-services-analytics)
* FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.1 - http://findbugs.sourceforge.net/)
* Gson (com.google.code.gson:gson:2.9.0 - https://github.com/google/gson/gson)
+<<<<<<< HEAD
* error-prone annotations (com.google.errorprone:error_prone_annotations:2.7.1 - http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations)
* Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess)
* Guava: Google Core Libraries for Java (com.google.guava:guava:31.0.1-jre - https://github.com/google/guava)
+=======
+ * error-prone annotations (com.google.errorprone:error_prone_annotations:2.18.0 - https://errorprone.info/error_prone_annotations)
+ * Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess)
+ * Guava: Google Core Libraries for Java (com.google.guava:guava:32.0.0-jre - https://github.com/google/guava)
+>>>>>>> dspace-7.6.1
* Guava: Google Core Libraries for Java (JDK5 Backport) (com.google.guava:guava-jdk5:17.0 - http://code.google.com/p/guava-libraries/guava-jdk5)
* Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture)
* Google HTTP Client Library for Java (com.google.http-client:google-http-client:1.23.0 - https://github.com/google/google-http-java-client/google-http-client)
* GSON extensions to the Google HTTP Client Library for Java. (com.google.http-client:google-http-client-gson:1.41.7 - https://github.com/googleapis/google-http-java-client/google-http-client-gson)
* Jackson 2 extensions to the Google HTTP Client Library for Java. (com.google.http-client:google-http-client-jackson2:1.23.0 - https://github.com/google/google-http-java-client/google-http-client-jackson2)
+<<<<<<< HEAD
* J2ObjC Annotations (com.google.j2objc:j2objc-annotations:1.3 - https://github.com/google/j2objc/)
* Google OAuth Client Library for Java (com.google.oauth-client:google-oauth-client:1.33.3 - https://github.com/googleapis/google-oauth-java-client/google-oauth-client)
* ConcurrentLinkedHashMap (com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2 - http://code.google.com/p/concurrentlinkedhashmap)
* libphonenumber (com.googlecode.libphonenumber:libphonenumber:8.11.1 - https://github.com/google/libphonenumber/)
* Jackcess (com.healthmarketscience.jackcess:jackcess:4.0.1 - https://jackcess.sourceforge.io)
+=======
+ * J2ObjC Annotations (com.google.j2objc:j2objc-annotations:2.8 - https://github.com/google/j2objc/)
+ * Google OAuth Client Library for Java (com.google.oauth-client:google-oauth-client:1.33.3 - https://github.com/googleapis/google-oauth-java-client/google-oauth-client)
+ * ConcurrentLinkedHashMap (com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2 - http://code.google.com/p/concurrentlinkedhashmap)
+ * libphonenumber (com.googlecode.libphonenumber:libphonenumber:8.11.1 - https://github.com/google/libphonenumber/)
+ * Jackcess (com.healthmarketscience.jackcess:jackcess:4.0.2 - https://jackcess.sourceforge.io)
+>>>>>>> dspace-7.6.1
* Jackcess Encrypt (com.healthmarketscience.jackcess:jackcess-encrypt:4.0.1 - http://jackcessencrypt.sf.net)
* project ':json-path' (com.jayway.jsonpath:json-path:2.6.0 - https://github.com/jayway/JsonPath)
* project ':json-path-assert' (com.jayway.jsonpath:json-path-assert:2.6.0 - https://github.com/jayway/JsonPath)
@@ -79,11 +106,26 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Nimbus JOSE+JWT (com.nimbusds:nimbus-jose-jwt:7.9 - https://bitbucket.org/connect2id/nimbus-jose-jwt)
* opencsv (com.opencsv:opencsv:5.6 - http://opencsv.sf.net)
* java-libpst (com.pff:java-libpst:0.9.3 - https://github.com/rjohnsondev/java-libpst)
+<<<<<<< HEAD
* rome (com.rometools:rome:1.18.0 - http://rometools.com/rome)
* rome-modules (com.rometools:rome-modules:1.18.0 - http://rometools.com/rome-modules)
* rome-utils (com.rometools:rome-utils:1.18.0 - http://rometools.com/rome-utils)
+=======
+ * rome (com.rometools:rome:1.19.0 - http://rometools.com/rome)
+ * rome-modules (com.rometools:rome-modules:1.19.0 - http://rometools.com/rome-modules)
+ * rome-utils (com.rometools:rome-utils:1.19.0 - http://rometools.com/rome-utils)
+>>>>>>> dspace-7.6.1
* fastinfoset (com.sun.xml.fastinfoset:FastInfoset:1.2.15 - http://fi.java.net)
* T-Digest (com.tdunning:t-digest:3.1 - https://github.com/tdunning/t-digest)
+ * config (com.typesafe:config:1.3.3 - https://github.com/lightbend/config)
+ * ssl-config-core (com.typesafe:ssl-config-core_2.13:0.3.8 - https://github.com/lightbend/ssl-config)
+ * akka-actor (com.typesafe.akka:akka-actor_2.13:2.5.31 - https://akka.io/)
+ * akka-http-core (com.typesafe.akka:akka-http-core_2.13:10.1.12 - https://akka.io)
+ * akka-http (com.typesafe.akka:akka-http_2.13:10.1.12 - https://akka.io)
+ * akka-parsing (com.typesafe.akka:akka-parsing_2.13:10.1.12 - https://akka.io)
+ * akka-protobuf (com.typesafe.akka:akka-protobuf_2.13:2.5.31 - https://akka.io/)
+ * akka-stream (com.typesafe.akka:akka-stream_2.13:2.5.31 - https://akka.io/)
+ * scala-logging (com.typesafe.scala-logging:scala-logging_2.13:3.9.2 - https://github.com/lightbend/scala-logging)
* JSON library from Android SDK (com.vaadin.external.google:android-json:0.0.20131108.vaadin1 - http://developer.android.com/sdk)
* SparseBitSet (com.zaxxer:SparseBitSet:1.2 - https://github.com/brettwooldridge/SparseBitSet)
* Apache Commons BeanUtils (commons-beanutils:commons-beanutils:1.9.4 - https://commons.apache.org/proper/commons-beanutils/)
@@ -91,20 +133,27 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Apache Commons Codec (commons-codec:commons-codec:1.10 - http://commons.apache.org/proper/commons-codec/)
* Apache Commons Collections (commons-collections:commons-collections:3.2.2 - http://commons.apache.org/collections/)
* Commons Digester (commons-digester:commons-digester:1.8.1 - http://commons.apache.org/digester/)
- * Apache Commons FileUpload (commons-fileupload:commons-fileupload:1.3.3 - http://commons.apache.org/proper/commons-fileupload/)
+ * Apache Commons FileUpload (commons-fileupload:commons-fileupload:1.5 - https://commons.apache.org/proper/commons-fileupload/)
* Apache Commons IO (commons-io:commons-io:2.7 - https://commons.apache.org/proper/commons-io/)
* Commons Lang (commons-lang:commons-lang:2.6 - http://commons.apache.org/lang/)
* Apache Commons Logging (commons-logging:commons-logging:1.2 - http://commons.apache.org/proper/commons-logging/)
* Apache Commons Validator (commons-validator:commons-validator:1.5.0 - http://commons.apache.org/proper/commons-validator/)
* GeoJson POJOs for Jackson (de.grundid.opendatalab:geojson-jackson:1.14 - https://github.com/opendatalab-de/geojson-jackson)
+<<<<<<< HEAD
* Boilerpipe -- Boilerplate Removal and Fulltext Extraction from HTML pages (de.l3s.boilerpipe:boilerpipe:1.1.0 - http://code.google.com/p/boilerpipe/)
+=======
+>>>>>>> dspace-7.6.1
* OpenAIRE Funders Model (eu.openaire:funders-model:2.0.0 - https://api.openaire.eu)
* Metrics Core (io.dropwizard.metrics:metrics-core:4.1.5 - https://metrics.dropwizard.io/metrics-core)
* Graphite Integration for Metrics (io.dropwizard.metrics:metrics-graphite:4.1.5 - https://metrics.dropwizard.io/metrics-graphite)
* Metrics Integration for Jetty 9.3 and higher (io.dropwizard.metrics:metrics-jetty9:4.1.5 - https://metrics.dropwizard.io/metrics-jetty9)
* Metrics Integration with JMX (io.dropwizard.metrics:metrics-jmx:4.1.5 - https://metrics.dropwizard.io/metrics-jmx)
* JVM Integration for Metrics (io.dropwizard.metrics:metrics-jvm:4.1.5 - https://metrics.dropwizard.io/metrics-jvm)
+<<<<<<< HEAD
* micrometer-core (io.micrometer:micrometer-core:1.8.6 - https://github.com/micrometer-metrics/micrometer)
+=======
+ * micrometer-core (io.micrometer:micrometer-core:1.9.11 - https://github.com/micrometer-metrics/micrometer)
+>>>>>>> dspace-7.6.1
* Netty/Buffer (io.netty:netty-buffer:4.1.68.Final - https://netty.io/netty-buffer/)
* Netty/Codec (io.netty:netty-codec:4.1.68.Final - https://netty.io/netty-codec/)
* Netty/Codec/HTTP (io.netty:netty-codec-http:4.1.53.Final - https://netty.io/netty-codec-http/)
@@ -188,6 +237,7 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Kerby-kerb Util (org.apache.kerby:kerb-util:1.0.1 - http://directory.apache.org/kerby/kerby-kerb/kerb-util)
* Kerby ASN1 Project (org.apache.kerby:kerby-asn1:1.0.1 - http://directory.apache.org/kerby/kerby-common/kerby-asn1)
* Kerby PKIX Project (org.apache.kerby:kerby-pkix:1.0.1 - http://directory.apache.org/kerby/kerby-pkix)
+<<<<<<< HEAD
* Apache Log4j 1.x Compatibility API (org.apache.logging.log4j:log4j-1.2-api:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-1.2-api/)
* Apache Log4j API (org.apache.logging.log4j:log4j-api:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-api/)
* Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-core/)
@@ -261,15 +311,97 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* tomcat-embed-core (org.apache.tomcat.embed:tomcat-embed-core:9.0.63 - https://tomcat.apache.org/)
* tomcat-embed-el (org.apache.tomcat.embed:tomcat-embed-el:9.0.63 - https://tomcat.apache.org/)
* tomcat-embed-websocket (org.apache.tomcat.embed:tomcat-embed-websocket:9.0.63 - https://tomcat.apache.org/)
+=======
+ * Apache Log4j 1.x Compatibility API (org.apache.logging.log4j:log4j-1.2-api:2.20.0 - https://logging.apache.org/log4j/2.x/log4j-1.2-api/)
+ * Apache Log4j API (org.apache.logging.log4j:log4j-api:2.20.0 - https://logging.apache.org/log4j/2.x/log4j-api/)
+ * Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.20.0 - https://logging.apache.org/log4j/2.x/log4j-core/)
+ * Apache Log4j JUL Adapter (org.apache.logging.log4j:log4j-jul:2.20.0 - https://logging.apache.org/log4j/2.x/log4j-jul/)
+ * Apache Log4j Layout for JSON template (org.apache.logging.log4j:log4j-layout-template-json:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-layout-template-json/)
+ * Apache Log4j SLF4J Binding (org.apache.logging.log4j:log4j-slf4j-impl:2.20.0 - https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/)
+ * Apache Log4j Web (org.apache.logging.log4j:log4j-web:2.20.0 - https://logging.apache.org/log4j/2.x/log4j-web/)
+ * Lucene Common Analyzers (org.apache.lucene:lucene-analyzers-common:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-common)
+ * Lucene ICU Analysis Components (org.apache.lucene:lucene-analyzers-icu:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-icu)
+ * Lucene Kuromoji Japanese Morphological Analyzer (org.apache.lucene:lucene-analyzers-kuromoji:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-kuromoji)
+ * Lucene Nori Korean Morphological Analyzer (org.apache.lucene:lucene-analyzers-nori:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-nori)
+ * Lucene Phonetic Filters (org.apache.lucene:lucene-analyzers-phonetic:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-phonetic)
+ * Lucene Smart Chinese Analyzer (org.apache.lucene:lucene-analyzers-smartcn:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-smartcn)
+ * Lucene Stempel Analyzer (org.apache.lucene:lucene-analyzers-stempel:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-analyzers-stempel)
+ * Lucene Memory (org.apache.lucene:lucene-backward-codecs:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-backward-codecs)
+ * Lucene Classification (org.apache.lucene:lucene-classification:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-classification)
+ * Lucene codecs (org.apache.lucene:lucene-codecs:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-codecs)
+ * Lucene Core (org.apache.lucene:lucene-core:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-core)
+ * Lucene Expressions (org.apache.lucene:lucene-expressions:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-expressions)
+ * Lucene Grouping (org.apache.lucene:lucene-grouping:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-grouping)
+ * Lucene Highlighter (org.apache.lucene:lucene-highlighter:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-highlighter)
+ * Lucene Join (org.apache.lucene:lucene-join:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-join)
+ * Lucene Memory (org.apache.lucene:lucene-memory:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-memory)
+ * Lucene Miscellaneous (org.apache.lucene:lucene-misc:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-misc)
+ * Lucene Queries (org.apache.lucene:lucene-queries:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-queries)
+ * Lucene QueryParsers (org.apache.lucene:lucene-queryparser:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-queryparser)
+ * Lucene Sandbox (org.apache.lucene:lucene-sandbox:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-sandbox)
+ * Lucene Spatial Extras (org.apache.lucene:lucene-spatial-extras:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-spatial-extras)
+ * Lucene Spatial 3D (org.apache.lucene:lucene-spatial3d:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-spatial3d)
+ * Lucene Suggest (org.apache.lucene:lucene-suggest:8.11.2 - https://lucene.apache.org/lucene-parent/lucene-suggest)
+ * Apache FontBox (org.apache.pdfbox:fontbox:2.0.28 - http://pdfbox.apache.org/)
+ * PDFBox JBIG2 ImageIO plugin (org.apache.pdfbox:jbig2-imageio:3.0.4 - https://www.apache.org/jbig2-imageio/)
+ * Apache JempBox (org.apache.pdfbox:jempbox:1.8.17 - http://www.apache.org/pdfbox-parent/jempbox/)
+ * Apache PDFBox (org.apache.pdfbox:pdfbox:2.0.28 - https://www.apache.org/pdfbox-parent/pdfbox/)
+ * Apache PDFBox tools (org.apache.pdfbox:pdfbox-tools:2.0.27 - https://www.apache.org/pdfbox-parent/pdfbox-tools/)
+ * Apache XmpBox (org.apache.pdfbox:xmpbox:2.0.27 - https://www.apache.org/pdfbox-parent/xmpbox/)
+ * Apache POI - Common (org.apache.poi:poi:5.2.3 - https://poi.apache.org/)
+ * Apache POI - API based on OPC and OOXML schemas (org.apache.poi:poi-ooxml:5.2.3 - https://poi.apache.org/)
+ * Apache POI (org.apache.poi:poi-ooxml-lite:5.2.3 - https://poi.apache.org/)
+ * Apache POI (org.apache.poi:poi-scratchpad:5.2.3 - https://poi.apache.org/)
+ * Apache Solr Core (org.apache.solr:solr-core:8.11.2 - https://lucene.apache.org/solr-parent/solr-core)
+ * Apache Solr Solrj (org.apache.solr:solr-solrj:8.11.2 - https://lucene.apache.org/solr-parent/solr-solrj)
+ * Apache Standard Taglib Implementation (org.apache.taglibs:taglibs-standard-impl:1.2.5 - http://tomcat.apache.org/taglibs/standard-1.2.5/taglibs-standard-impl)
+ * Apache Standard Taglib Specification API (org.apache.taglibs:taglibs-standard-spec:1.2.5 - http://tomcat.apache.org/taglibs/standard-1.2.5/taglibs-standard-spec)
+ * Apache Thrift (org.apache.thrift:libthrift:0.9.2 - http://thrift.apache.org)
+ * Apache Tika core (org.apache.tika:tika-core:2.5.0 - https://tika.apache.org/)
+ * Apache Tika Apple parser module (org.apache.tika:tika-parser-apple-module:2.5.0 - https://tika.apache.org/tika-parser-apple-module/)
+ * Apache Tika audiovideo parser module (org.apache.tika:tika-parser-audiovideo-module:2.5.0 - https://tika.apache.org/tika-parser-audiovideo-module/)
+ * Apache Tika cad parser module (org.apache.tika:tika-parser-cad-module:2.5.0 - https://tika.apache.org/tika-parser-cad-module/)
+ * Apache Tika code parser module (org.apache.tika:tika-parser-code-module:2.5.0 - https://tika.apache.org/tika-parser-code-module/)
+ * Apache Tika crypto parser module (org.apache.tika:tika-parser-crypto-module:2.5.0 - https://tika.apache.org/tika-parser-crypto-module/)
+ * Apache Tika digest commons (org.apache.tika:tika-parser-digest-commons:2.5.0 - https://tika.apache.org/tika-parser-digest-commons/)
+ * Apache Tika font parser module (org.apache.tika:tika-parser-font-module:2.5.0 - https://tika.apache.org/tika-parser-font-module/)
+ * Apache Tika html parser module (org.apache.tika:tika-parser-html-module:2.5.0 - https://tika.apache.org/tika-parser-html-module/)
+ * Apache Tika image parser module (org.apache.tika:tika-parser-image-module:2.5.0 - https://tika.apache.org/tika-parser-image-module/)
+ * Apache Tika mail commons (org.apache.tika:tika-parser-mail-commons:2.5.0 - https://tika.apache.org/tika-parser-mail-commons/)
+ * Apache Tika mail parser module (org.apache.tika:tika-parser-mail-module:2.5.0 - https://tika.apache.org/tika-parser-mail-module/)
+ * Apache Tika Microsoft parser module (org.apache.tika:tika-parser-microsoft-module:2.5.0 - https://tika.apache.org/tika-parser-microsoft-module/)
+ * Apache Tika miscellaneous office format parser module (org.apache.tika:tika-parser-miscoffice-module:2.5.0 - https://tika.apache.org/tika-parser-miscoffice-module/)
+ * Apache Tika news parser module (org.apache.tika:tika-parser-news-module:2.5.0 - https://tika.apache.org/tika-parser-news-module/)
+ * Apache Tika OCR parser module (org.apache.tika:tika-parser-ocr-module:2.5.0 - https://tika.apache.org/tika-parser-ocr-module/)
+ * Apache Tika PDF parser module (org.apache.tika:tika-parser-pdf-module:2.5.0 - https://tika.apache.org/tika-parser-pdf-module/)
+ * Apache Tika package parser module (org.apache.tika:tika-parser-pkg-module:2.5.0 - https://tika.apache.org/tika-parser-pkg-module/)
+ * Apache Tika text parser module (org.apache.tika:tika-parser-text-module:2.5.0 - https://tika.apache.org/tika-parser-text-module/)
+ * Apache Tika WARC parser module (org.apache.tika:tika-parser-webarchive-module:2.5.0 - https://tika.apache.org/tika-parser-webarchive-module/)
+ * Apache Tika XML parser module (org.apache.tika:tika-parser-xml-module:2.5.0 - https://tika.apache.org/tika-parser-xml-module/)
+ * Apache Tika XMP commons (org.apache.tika:tika-parser-xmp-commons:2.5.0 - https://tika.apache.org/tika-parser-xmp-commons/)
+ * Apache Tika ZIP commons (org.apache.tika:tika-parser-zip-commons:2.5.0 - https://tika.apache.org/tika-parser-zip-commons/)
+ * Apache Tika standard parser package (org.apache.tika:tika-parsers-standard-package:2.5.0 - https://tika.apache.org/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/)
+ * tomcat-embed-core (org.apache.tomcat.embed:tomcat-embed-core:9.0.75 - https://tomcat.apache.org/)
+ * tomcat-embed-el (org.apache.tomcat.embed:tomcat-embed-el:9.0.75 - https://tomcat.apache.org/)
+ * tomcat-embed-websocket (org.apache.tomcat.embed:tomcat-embed-websocket:9.0.75 - https://tomcat.apache.org/)
+>>>>>>> dspace-7.6.1
* Apache Velocity - Engine (org.apache.velocity:velocity-engine-core:2.3 - http://velocity.apache.org/engine/devel/velocity-engine-core/)
* Apache Velocity - JSR 223 Scripting (org.apache.velocity:velocity-engine-scripting:2.2 - http://velocity.apache.org/engine/devel/velocity-engine-scripting/)
* Axiom API (org.apache.ws.commons.axiom:axiom-api:1.2.22 - http://ws.apache.org/axiom/)
* Abdera Model (FOM) Implementation (org.apache.ws.commons.axiom:fom-impl:1.2.22 - http://ws.apache.org/axiom/implementations/fom-impl/)
+<<<<<<< HEAD
* XmlBeans (org.apache.xmlbeans:xmlbeans:5.0.3 - https://xmlbeans.apache.org/)
* Apache ZooKeeper - Server (org.apache.zookeeper:zookeeper:3.6.2 - http://zookeeper.apache.org/zookeeper)
* Apache ZooKeeper - Jute (org.apache.zookeeper:zookeeper-jute:3.6.2 - http://zookeeper.apache.org/zookeeper-jute)
* org.apiguardian:apiguardian-api (org.apiguardian:apiguardian-api:1.1.0 - https://github.com/apiguardian-team/apiguardian)
* AssertJ fluent assertions (org.assertj:assertj-core:3.21.0 - https://assertj.github.io/doc/assertj-core/)
+=======
+ * XmlBeans (org.apache.xmlbeans:xmlbeans:5.1.1 - https://xmlbeans.apache.org/)
+ * Apache ZooKeeper - Server (org.apache.zookeeper:zookeeper:3.6.2 - http://zookeeper.apache.org/zookeeper)
+ * Apache ZooKeeper - Jute (org.apache.zookeeper:zookeeper-jute:3.6.2 - http://zookeeper.apache.org/zookeeper-jute)
+ * org.apiguardian:apiguardian-api (org.apiguardian:apiguardian-api:1.1.0 - https://github.com/apiguardian-team/apiguardian)
+ * AssertJ fluent assertions (org.assertj:assertj-core:3.22.0 - https://assertj.github.io/doc/assertj-core/)
+>>>>>>> dspace-7.6.1
* Evo Inflector (org.atteo:evo-inflector:1.3 - http://atteo.org/static/evo-inflector)
* jose4j (org.bitbucket.b_c:jose4j:0.6.5 - https://bitbucket.org/b_c/jose4j/)
* TagSoup (org.ccil.cowan.tagsoup:tagsoup:1.2.1 - http://home.ccil.org/~cowan/XML/tagsoup/)
@@ -279,6 +411,7 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Apache :: JSTL module (org.eclipse.jetty:apache-jstl:9.4.15.v20190215 - http://tomcat.apache.org/taglibs/standard/)
* Jetty :: ALPN :: Client (org.eclipse.jetty:jetty-alpn-client:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-client)
* Jetty :: ALPN :: JDK9 Client Implementation (org.eclipse.jetty:jetty-alpn-java-client:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-java-client)
+<<<<<<< HEAD
* Jetty :: ALPN :: JDK9 Server Implementation (org.eclipse.jetty:jetty-alpn-java-server:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-java-server)
* Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
* Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
@@ -289,11 +422,24 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Jetty :: Deployers (org.eclipse.jetty:jetty-deploy:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-deploy)
* Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-http)
* Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-io)
+=======
+ * Jetty :: ALPN :: JDK9 Server Implementation (org.eclipse.jetty:jetty-alpn-java-server:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-java-server)
+ * Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
+ * Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
+ * Jetty :: Servlet Annotations (org.eclipse.jetty:jetty-annotations:9.4.15.v20190215 - http://www.eclipse.org/jetty)
+ * Jetty :: Asynchronous HTTP Client (org.eclipse.jetty:jetty-client:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-client)
+ * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-continuation)
+ * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-continuation)
+ * Jetty :: Deployers (org.eclipse.jetty:jetty-deploy:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-deploy)
+ * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-http)
+ * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-io)
+>>>>>>> dspace-7.6.1
* Jetty :: JMX Management (org.eclipse.jetty:jetty-jmx:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-jmx)
* Jetty :: JNDI Naming (org.eclipse.jetty:jetty-jndi:9.4.15.v20190215 - http://www.eclipse.org/jetty)
* Jetty :: Plus (org.eclipse.jetty:jetty-plus:9.4.15.v20190215 - http://www.eclipse.org/jetty)
* Jetty :: Rewrite Handler (org.eclipse.jetty:jetty-rewrite:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-rewrite)
* Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-security)
+<<<<<<< HEAD
* Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-security)
* Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-server)
* Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-servlet)
@@ -307,6 +453,21 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Jetty :: HTTP2 :: HPACK (org.eclipse.jetty.http2:http2-hpack:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-hpack)
* Jetty :: HTTP2 :: HTTP Client Transport (org.eclipse.jetty.http2:http2-http-client-transport:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-http-client-transport)
* Jetty :: HTTP2 :: Server (org.eclipse.jetty.http2:http2-server:9.4.48.v20220622 - https://eclipse.org/jetty/http2-parent/http2-server)
+=======
+ * Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-security)
+ * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-server)
+ * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-servlet)
+ * Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-servlets)
+ * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-util)
+ * Jetty :: Utilities :: Ajax(JSON) (org.eclipse.jetty:jetty-util-ajax:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-util-ajax)
+ * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-webapp)
+ * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-xml)
+ * Jetty :: HTTP2 :: Client (org.eclipse.jetty.http2:http2-client:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-client)
+ * Jetty :: HTTP2 :: Common (org.eclipse.jetty.http2:http2-common:9.4.51.v20230217 - https://eclipse.org/jetty/http2-parent/http2-common)
+ * Jetty :: HTTP2 :: HPACK (org.eclipse.jetty.http2:http2-hpack:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-hpack)
+ * Jetty :: HTTP2 :: HTTP Client Transport (org.eclipse.jetty.http2:http2-http-client-transport:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-http-client-transport)
+ * Jetty :: HTTP2 :: Server (org.eclipse.jetty.http2:http2-server:9.4.51.v20230217 - https://eclipse.org/jetty/http2-parent/http2-server)
+>>>>>>> dspace-7.6.1
* Jetty :: Schemas (org.eclipse.jetty.toolchain:jetty-schemas:3.1.2 - https://eclipse.org/jetty/jetty-schemas)
* Ehcache (org.ehcache:ehcache:3.4.0 - http://ehcache.org)
* flyway-core (org.flywaydb:flyway-core:8.4.4 - https://flywaydb.org/flyway-core)
@@ -315,8 +476,15 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* jersey-core-client (org.glassfish.jersey.core:jersey-client:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-client)
* jersey-core-common (org.glassfish.jersey.core:jersey-common:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-common)
* jersey-inject-hk2 (org.glassfish.jersey.inject:jersey-hk2:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-hk2)
+<<<<<<< HEAD
* Hibernate Validator Engine (org.hibernate.validator:hibernate-validator:6.0.23.Final - http://hibernate.org/validator/hibernate-validator)
* Hibernate Validator Portable Extension (org.hibernate.validator:hibernate-validator-cdi:6.0.23.Final - http://hibernate.org/validator/hibernate-validator-cdi)
+=======
+ * Hibernate Validator Engine (org.hibernate.validator:hibernate-validator:6.2.5.Final - http://hibernate.org/validator/hibernate-validator)
+ * Hibernate Validator Portable Extension (org.hibernate.validator:hibernate-validator-cdi:6.2.5.Final - http://hibernate.org/validator/hibernate-validator-cdi)
+ * leveldb (org.iq80.leveldb:leveldb:0.12 - http://github.com/dain/leveldb/leveldb)
+ * leveldb-api (org.iq80.leveldb:leveldb-api:0.12 - http://github.com/dain/leveldb/leveldb-api)
+>>>>>>> dspace-7.6.1
* Javassist (org.javassist:javassist:3.25.0-GA - http://www.javassist.org/)
* Java Annotation Indexer (org.jboss:jandex:2.4.2.Final - http://www.jboss.org/jandex)
* JBoss Logging 3 (org.jboss.logging:jboss-logging:3.4.3.Final - http://www.jboss.org)
@@ -337,10 +505,12 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Jetty Servlet Tester (org.mortbay.jetty:jetty-servlet-tester:6.1.26 - http://www.eclipse.org/jetty/jetty-parent/project/jetty-servlet-tester)
* Jetty Utilities (org.mortbay.jetty:jetty-util:6.1.26 - http://www.eclipse.org/jetty/jetty-parent/project/jetty-util)
* Servlet Specification API (org.mortbay.jetty:servlet-api:2.5-20081211 - http://jetty.mortbay.org/servlet-api)
+ * jwarc (org.netpreserve:jwarc:0.19.0 - https://github.com/iipc/jwarc)
* Objenesis (org.objenesis:objenesis:3.2 - http://objenesis.org/objenesis)
* parboiled-core (org.parboiled:parboiled-core:1.3.1 - http://parboiled.org)
* parboiled-java (org.parboiled:parboiled-java:1.3.1 - http://parboiled.org)
* RRD4J (org.rrd4j:rrd4j:3.5 - https://github.com/rrd4j/rrd4j/)
+<<<<<<< HEAD
* JSONassert (org.skyscreamer:jsonassert:1.5.0 - https://github.com/skyscreamer/JSONassert)
* Spring AOP (org.springframework:spring-aop:5.3.20 - https://github.com/spring-projects/spring-framework)
* Spring Beans (org.springframework:spring-beans:5.3.20 - https://github.com/spring-projects/spring-framework)
@@ -383,13 +553,70 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* spring-security-crypto (org.springframework.security:spring-security-crypto:5.6.5 - https://spring.io/projects/spring-security)
* spring-security-test (org.springframework.security:spring-security-test:5.6.5 - https://spring.io/projects/spring-security)
* spring-security-web (org.springframework.security:spring-security-web:5.6.5 - https://spring.io/projects/spring-security)
+=======
+ * Scala Library (org.scala-lang:scala-library:2.13.9 - https://www.scala-lang.org/)
+ * Scala Compiler (org.scala-lang:scala-reflect:2.13.0 - https://www.scala-lang.org/)
+ * scala-collection-compat (org.scala-lang.modules:scala-collection-compat_2.13:2.1.6 - http://www.scala-lang.org/)
+ * scala-java8-compat (org.scala-lang.modules:scala-java8-compat_2.13:0.9.0 - http://www.scala-lang.org/)
+ * scala-parser-combinators (org.scala-lang.modules:scala-parser-combinators_2.13:1.1.2 - http://www.scala-lang.org/)
+ * scala-xml (org.scala-lang.modules:scala-xml_2.13:1.3.0 - http://www.scala-lang.org/)
+ * JSONassert (org.skyscreamer:jsonassert:1.5.1 - https://github.com/skyscreamer/JSONassert)
+ * JCL 1.2 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.36 - http://www.slf4j.org)
+ * Spring AOP (org.springframework:spring-aop:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Beans (org.springframework:spring-beans:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Context (org.springframework:spring-context:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Context Support (org.springframework:spring-context-support:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Core (org.springframework:spring-core:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Expression Language (SpEL) (org.springframework:spring-expression:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Commons Logging Bridge (org.springframework:spring-jcl:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring JDBC (org.springframework:spring-jdbc:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Object/Relational Mapping (org.springframework:spring-orm:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring TestContext Framework (org.springframework:spring-test:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Transaction (org.springframework:spring-tx:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Web (org.springframework:spring-web:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * Spring Web MVC (org.springframework:spring-webmvc:5.3.27 - https://github.com/spring-projects/spring-framework)
+ * spring-boot (org.springframework.boot:spring-boot:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-actuator (org.springframework.boot:spring-boot-actuator:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-actuator-autoconfigure (org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-autoconfigure (org.springframework.boot:spring-boot-autoconfigure:2.7.12 - https://spring.io/projects/spring-boot)
+ * Spring Boot Configuration Processor (org.springframework.boot:spring-boot-configuration-processor:2.0.0.RELEASE - https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-tools/spring-boot-configuration-processor)
+ * spring-boot-starter (org.springframework.boot:spring-boot-starter:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-actuator (org.springframework.boot:spring-boot-starter-actuator:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-aop (org.springframework.boot:spring-boot-starter-aop:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-cache (org.springframework.boot:spring-boot-starter-cache:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-data-rest (org.springframework.boot:spring-boot-starter-data-rest:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-json (org.springframework.boot:spring-boot-starter-json:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-log4j2 (org.springframework.boot:spring-boot-starter-log4j2:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-security (org.springframework.boot:spring-boot-starter-security:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-test (org.springframework.boot:spring-boot-starter-test:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-tomcat (org.springframework.boot:spring-boot-starter-tomcat:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-starter-web (org.springframework.boot:spring-boot-starter-web:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-test (org.springframework.boot:spring-boot-test:2.7.12 - https://spring.io/projects/spring-boot)
+ * spring-boot-test-autoconfigure (org.springframework.boot:spring-boot-test-autoconfigure:2.7.12 - https://spring.io/projects/spring-boot)
+ * Spring Data Core (org.springframework.data:spring-data-commons:2.7.12 - https://www.spring.io/spring-data/spring-data-commons)
+ * Spring Data REST - Core (org.springframework.data:spring-data-rest-core:3.7.12 - https://www.spring.io/spring-data/spring-data-rest-parent/spring-data-rest-core)
+ * Spring Data REST - WebMVC (org.springframework.data:spring-data-rest-webmvc:3.7.12 - https://www.spring.io/spring-data/spring-data-rest-parent/spring-data-rest-webmvc)
+ * Spring HATEOAS (org.springframework.hateoas:spring-hateoas:1.5.4 - https://github.com/spring-projects/spring-hateoas)
+ * Spring Plugin - Core (org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE - https://github.com/spring-projects/spring-plugin/spring-plugin-core)
+ * spring-security-config (org.springframework.security:spring-security-config:5.7.8 - https://spring.io/projects/spring-security)
+ * spring-security-core (org.springframework.security:spring-security-core:5.7.8 - https://spring.io/projects/spring-security)
+ * spring-security-crypto (org.springframework.security:spring-security-crypto:5.7.8 - https://spring.io/projects/spring-security)
+ * spring-security-test (org.springframework.security:spring-security-test:5.7.8 - https://spring.io/projects/spring-security)
+ * spring-security-web (org.springframework.security:spring-security-web:5.7.8 - https://spring.io/projects/spring-security)
+>>>>>>> dspace-7.6.1
* SWORD v2 :: Common Server Library (org.swordapp:sword2-server:1.0 - http://www.swordapp.org/)
* snappy-java (org.xerial.snappy:snappy-java:1.1.7.6 - https://github.com/xerial/snappy-java)
* xml-matchers (org.xmlmatchers:xml-matchers:0.10 - http://code.google.com/p/xml-matchers/)
* org.xmlunit:xmlunit-core (org.xmlunit:xmlunit-core:2.8.0 - https://www.xmlunit.org/)
+<<<<<<< HEAD
* org.xmlunit:xmlunit-core (org.xmlunit:xmlunit-core:2.8.4 - https://www.xmlunit.org/)
* org.xmlunit:xmlunit-placeholders (org.xmlunit:xmlunit-placeholders:2.8.0 - https://www.xmlunit.org/xmlunit-placeholders/)
* SnakeYAML (org.yaml:snakeyaml:1.29 - http://www.snakeyaml.org)
+=======
+ * org.xmlunit:xmlunit-core (org.xmlunit:xmlunit-core:2.9.1 - https://www.xmlunit.org/)
+ * org.xmlunit:xmlunit-placeholders (org.xmlunit:xmlunit-placeholders:2.8.0 - https://www.xmlunit.org/xmlunit-placeholders/)
+ * SnakeYAML (org.yaml:snakeyaml:1.30 - https://bitbucket.org/snakeyaml/snakeyaml)
+>>>>>>> dspace-7.6.1
* software.amazon.ion:ion-java (software.amazon.ion:ion-java:1.0.2 - https://github.com/amznlabs/ion-java/)
* Xalan Java Serializer (xalan:serializer:2.7.2 - http://xml.apache.org/xalan-j/)
* xalan (xalan:xalan:2.7.0 - no url defined)
@@ -404,7 +631,7 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* coverity-escapers (com.coverity.security:coverity-escapers:1.1.1 - http://coverity.com/security)
* Java Advanced Imaging Image I/O Tools API core (standalone) (com.github.jai-imageio:jai-imageio-core:1.4.0 - https://github.com/jai-imageio/jai-imageio-core)
* JSONLD Java :: Core (com.github.jsonld-java:jsonld-java:0.5.1 - http://github.com/jsonld-java/jsonld-java/jsonld-java/)
- * curvesapi (com.github.virtuald:curvesapi:1.06 - https://github.com/virtuald/curvesapi)
+ * curvesapi (com.github.virtuald:curvesapi:1.07 - https://github.com/virtuald/curvesapi)
* Protocol Buffers [Core] (com.google.protobuf:protobuf-java:3.11.0 - https://developers.google.com/protocol-buffers/protobuf-java/)
* JZlib (com.jcraft:jzlib:1.1.3 - http://www.jcraft.com/jzlib/)
* dnsjava (dnsjava:dnsjava:2.1.7 - http://www.dnsjava.org)
@@ -426,11 +653,19 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* asm-commons (org.ow2.asm:asm-commons:8.0.1 - http://asm.ow2.io/)
* asm-tree (org.ow2.asm:asm-tree:7.1 - http://asm.ow2.org/)
* asm-util (org.ow2.asm:asm-util:7.1 - http://asm.ow2.org/)
+<<<<<<< HEAD
* PostgreSQL JDBC Driver (org.postgresql:postgresql:42.4.3 - https://jdbc.postgresql.org)
+=======
+ * PostgreSQL JDBC Driver (org.postgresql:postgresql:42.6.0 - https://jdbc.postgresql.org)
+>>>>>>> dspace-7.6.1
* Reflections (org.reflections:reflections:0.9.12 - http://github.com/ronmamo/reflections)
* JMatIO (org.tallison:jmatio:1.5 - https://github.com/tballison/jmatio)
* XMLUnit for Java (xmlunit:xmlunit:1.3 - http://xmlunit.sourceforge.net/)
+ CC0:
+
+ * reactive-streams (org.reactivestreams:reactive-streams:1.0.2 - http://www.reactive-streams.org/)
+
Common Development and Distribution License (CDDL):
* istack common utility code runtime (com.sun.istack:istack-commons-runtime:3.0.7 - http://java.net/istack-commons/istack-commons-runtime/)
@@ -446,7 +681,11 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Java Servlet API (javax.servlet:javax.servlet-api:3.1.0 - http://servlet-spec.java.net)
* javax.transaction API (javax.transaction:javax.transaction-api:1.3 - http://jta-spec.java.net)
* jaxb-api (javax.xml.bind:jaxb-api:2.3.1 - https://github.com/javaee/jaxb-spec/jaxb-api)
+<<<<<<< HEAD
* JHighlight (org.codelibs:jhighlight:1.0.3 - https://github.com/codelibs/jhighlight)
+=======
+ * JHighlight (org.codelibs:jhighlight:1.1.0 - https://github.com/codelibs/jhighlight)
+>>>>>>> dspace-7.6.1
* HK2 API module (org.glassfish.hk2:hk2-api:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-api)
* ServiceLocator Default Implementation (org.glassfish.hk2:hk2-locator:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-locator)
* HK2 Implementation Utilities (org.glassfish.hk2:hk2-utils:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-utils)
@@ -489,6 +728,7 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Apache :: JSTL module (org.eclipse.jetty:apache-jstl:9.4.15.v20190215 - http://tomcat.apache.org/taglibs/standard/)
* Jetty :: ALPN :: Client (org.eclipse.jetty:jetty-alpn-client:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-client)
* Jetty :: ALPN :: JDK9 Client Implementation (org.eclipse.jetty:jetty-alpn-java-client:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-java-client)
+<<<<<<< HEAD
* Jetty :: ALPN :: JDK9 Server Implementation (org.eclipse.jetty:jetty-alpn-java-server:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-java-server)
* Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
* Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
@@ -499,11 +739,24 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Jetty :: Deployers (org.eclipse.jetty:jetty-deploy:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-deploy)
* Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-http)
* Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-io)
+=======
+ * Jetty :: ALPN :: JDK9 Server Implementation (org.eclipse.jetty:jetty-alpn-java-server:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-java-server)
+ * Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
+ * Jetty :: ALPN :: Server (org.eclipse.jetty:jetty-alpn-server:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-alpn-parent/jetty-alpn-server)
+ * Jetty :: Servlet Annotations (org.eclipse.jetty:jetty-annotations:9.4.15.v20190215 - http://www.eclipse.org/jetty)
+ * Jetty :: Asynchronous HTTP Client (org.eclipse.jetty:jetty-client:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-client)
+ * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-continuation)
+ * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-continuation)
+ * Jetty :: Deployers (org.eclipse.jetty:jetty-deploy:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-deploy)
+ * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-http)
+ * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-io)
+>>>>>>> dspace-7.6.1
* Jetty :: JMX Management (org.eclipse.jetty:jetty-jmx:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-jmx)
* Jetty :: JNDI Naming (org.eclipse.jetty:jetty-jndi:9.4.15.v20190215 - http://www.eclipse.org/jetty)
* Jetty :: Plus (org.eclipse.jetty:jetty-plus:9.4.15.v20190215 - http://www.eclipse.org/jetty)
* Jetty :: Rewrite Handler (org.eclipse.jetty:jetty-rewrite:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-rewrite)
* Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.44.v20210927 - https://eclipse.org/jetty/jetty-security)
+<<<<<<< HEAD
* Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-security)
* Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-server)
* Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.48.v20220622 - https://eclipse.org/jetty/jetty-servlet)
@@ -517,6 +770,21 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Jetty :: HTTP2 :: HPACK (org.eclipse.jetty.http2:http2-hpack:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-hpack)
* Jetty :: HTTP2 :: HTTP Client Transport (org.eclipse.jetty.http2:http2-http-client-transport:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-http-client-transport)
* Jetty :: HTTP2 :: Server (org.eclipse.jetty.http2:http2-server:9.4.48.v20220622 - https://eclipse.org/jetty/http2-parent/http2-server)
+=======
+ * Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-security)
+ * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-server)
+ * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-servlet)
+ * Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-servlets)
+ * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-util)
+ * Jetty :: Utilities :: Ajax(JSON) (org.eclipse.jetty:jetty-util-ajax:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-util-ajax)
+ * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-webapp)
+ * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.51.v20230217 - https://eclipse.org/jetty/jetty-xml)
+ * Jetty :: HTTP2 :: Client (org.eclipse.jetty.http2:http2-client:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-client)
+ * Jetty :: HTTP2 :: Common (org.eclipse.jetty.http2:http2-common:9.4.51.v20230217 - https://eclipse.org/jetty/http2-parent/http2-common)
+ * Jetty :: HTTP2 :: HPACK (org.eclipse.jetty.http2:http2-hpack:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-hpack)
+ * Jetty :: HTTP2 :: HTTP Client Transport (org.eclipse.jetty.http2:http2-http-client-transport:9.4.44.v20210927 - https://eclipse.org/jetty/http2-parent/http2-http-client-transport)
+ * Jetty :: HTTP2 :: Server (org.eclipse.jetty.http2:http2-server:9.4.51.v20230217 - https://eclipse.org/jetty/http2-parent/http2-server)
+>>>>>>> dspace-7.6.1
* Jetty :: Schemas (org.eclipse.jetty.toolchain:jetty-schemas:3.1.2 - https://eclipse.org/jetty/jetty-schemas)
* HK2 API module (org.glassfish.hk2:hk2-api:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-api)
* ServiceLocator Default Implementation (org.glassfish.hk2:hk2-locator:2.6.1 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-locator)
@@ -542,10 +810,17 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* msg-simple (com.github.java-json-tools:msg-simple:1.2 - https://github.com/java-json-tools/msg-simple)
* uri-template (com.github.java-json-tools:uri-template:0.10 - https://github.com/java-json-tools/uri-template)
* FindBugs-Annotations (com.google.code.findbugs:annotations:3.0.1u2 - http://findbugs.sourceforge.net/)
+<<<<<<< HEAD
* JHighlight (org.codelibs:jhighlight:1.0.3 - https://github.com/codelibs/jhighlight)
* Hibernate ORM - hibernate-core (org.hibernate:hibernate-core:5.6.5.Final - https://hibernate.org/orm)
* Hibernate ORM - hibernate-jcache (org.hibernate:hibernate-jcache:5.6.5.Final - https://hibernate.org/orm)
* Hibernate ORM - hibernate-jpamodelgen (org.hibernate:hibernate-jpamodelgen:5.6.5.Final - https://hibernate.org/orm)
+=======
+ * JHighlight (org.codelibs:jhighlight:1.1.0 - https://github.com/codelibs/jhighlight)
+ * Hibernate ORM - hibernate-core (org.hibernate:hibernate-core:5.6.15.Final - https://hibernate.org/orm)
+ * Hibernate ORM - hibernate-jcache (org.hibernate:hibernate-jcache:5.6.15.Final - https://hibernate.org/orm)
+ * Hibernate ORM - hibernate-jpamodelgen (org.hibernate:hibernate-jpamodelgen:5.6.15.Final - https://hibernate.org/orm)
+>>>>>>> dspace-7.6.1
* Hibernate Commons Annotations (org.hibernate.common:hibernate-commons-annotations:5.1.2.Final - http://hibernate.org)
* im4java (org.im4java:im4java:1.4.0 - http://sourceforge.net/projects/im4java/)
* Javassist (org.javassist:javassist:3.25.0-GA - http://www.javassist.org/)
@@ -562,9 +837,16 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
MIT License:
+ * better-files (com.github.pathikrit:better-files_2.13:3.9.1 - https://github.com/pathikrit/better-files)
* Java SemVer (com.github.zafarkhaja:java-semver:0.9.0 - https://github.com/zafarkhaja/jsemver)
+<<<<<<< HEAD
* dd-plist (com.googlecode.plist:dd-plist:1.23 - http://www.github.com/3breadt/dd-plist)
* DigitalCollections: IIIF API Library (de.digitalcollections.iiif:iiif-apis:0.3.9 - https://github.com/dbmdz/iiif-apis)
+=======
+ * dd-plist (com.googlecode.plist:dd-plist:1.25 - http://www.github.com/3breadt/dd-plist)
+ * DigitalCollections: IIIF API Library (de.digitalcollections.iiif:iiif-apis:0.3.9 - https://github.com/dbmdz/iiif-apis)
+ * s3mock (io.findify:s3mock_2.13:0.2.6 - https://github.com/findify/s3mock)
+>>>>>>> dspace-7.6.1
* JOpt Simple (net.sf.jopt-simple:jopt-simple:5.0.4 - http://jopt-simple.github.io/jopt-simple)
* Bouncy Castle S/MIME API (org.bouncycastle:bcmail-jdk15on:1.70 - https://www.bouncycastle.org/java.html)
* Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs (org.bouncycastle:bcpkix-jdk15on:1.70 - https://www.bouncycastle.org/java.html)
@@ -572,15 +854,18 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* Bouncy Castle ASN.1 Extension and Utility APIs (org.bouncycastle:bcutil-jdk15on:1.70 - https://www.bouncycastle.org/java.html)
* org.brotli:dec (org.brotli:dec:0.1.2 - http://brotli.org/dec)
* Checker Qual (org.checkerframework:checker-qual:3.10.0 - https://checkerframework.org)
+<<<<<<< HEAD
* Checker Qual (org.checkerframework:checker-qual:3.5.0 - https://checkerframework.org)
+=======
+ * Checker Qual (org.checkerframework:checker-qual:3.31.0 - https://checkerframework.org)
+>>>>>>> dspace-7.6.1
* jersey-core-client (org.glassfish.jersey.core:jersey-client:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-client)
* jersey-inject-hk2 (org.glassfish.jersey.inject:jersey-hk2:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-hk2)
* mockito-core (org.mockito:mockito-core:3.12.4 - https://github.com/mockito/mockito)
* mockito-inline (org.mockito:mockito-inline:3.12.4 - https://github.com/mockito/mockito)
* ORCID - Model (org.orcid:orcid-model:3.0.2 - http://github.com/ORCID/orcid-model)
- * JCL 1.2 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.25 - http://www.slf4j.org)
- * JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.25 - http://www.slf4j.org)
- * SLF4J API Module (org.slf4j:slf4j-api:1.7.25 - http://www.slf4j.org)
+ * JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.36 - http://www.slf4j.org)
+ * SLF4J API Module (org.slf4j:slf4j-api:1.7.36 - http://www.slf4j.org)
* SLF4J Extensions Module (org.slf4j:slf4j-ext:1.7.28 - http://www.slf4j.org)
* HAL Browser (org.webjars:hal-browser:ad9b865 - http://webjars.org)
* toastr (org.webjars.bowergithub.codeseven:toastr:2.1.4 - http://webjars.org)
@@ -589,7 +874,11 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* jquery (org.webjars.bowergithub.jquery:jquery-dist:3.6.0 - https://www.webjars.org)
* urijs (org.webjars.bowergithub.medialize:uri.js:1.19.10 - https://www.webjars.org)
* bootstrap (org.webjars.bowergithub.twbs:bootstrap:4.6.1 - https://www.webjars.org)
+<<<<<<< HEAD
* core-js (org.webjars.npm:core-js:3.28.0 - https://www.webjars.org)
+=======
+ * core-js (org.webjars.npm:core-js:3.30.1 - https://www.webjars.org)
+>>>>>>> dspace-7.6.1
* @json-editor/json-editor (org.webjars.npm:json-editor__json-editor:2.6.1 - https://www.webjars.org)
Mozilla Public License:
@@ -606,6 +895,7 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
* jersey-core-common (org.glassfish.jersey.core:jersey-common:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-common)
* jersey-inject-hk2 (org.glassfish.jersey.inject:jersey-hk2:2.35 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-hk2)
* HdrHistogram (org.hdrhistogram:HdrHistogram:2.1.12 - http://hdrhistogram.github.io/HdrHistogram/)
+<<<<<<< HEAD
* LatencyUtils (org.latencyutils:LatencyUtils:2.0.3 - http://latencyutils.github.io/LatencyUtils/)
* Reflections (org.reflections:reflections:0.9.12 - http://github.com/ronmamo/reflections)
* XZ for Java (org.tukaani:xz:1.9 - https://tukaani.org/xz/java.html)
@@ -617,6 +907,16 @@ https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines
UnRar License:
* Java Unrar (com.github.junrar:junrar:7.4.1 - https://github.com/junrar/junrar)
+=======
+ * JSON in Java (org.json:json:20230227 - https://github.com/douglascrockford/JSON-java)
+ * LatencyUtils (org.latencyutils:LatencyUtils:2.0.3 - http://latencyutils.github.io/LatencyUtils/)
+ * Reflections (org.reflections:reflections:0.9.12 - http://github.com/ronmamo/reflections)
+ * XZ for Java (org.tukaani:xz:1.9 - https://tukaani.org/xz/java.html)
+
+ UnRar License:
+
+ * Java Unrar (com.github.junrar:junrar:7.5.3 - https://github.com/junrar/junrar)
+>>>>>>> dspace-7.6.1
Unicode/ICU License:
diff --git a/docker-compose.yml b/docker-compose.yml
index 6008b873ae5f..6c1615040722 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -28,6 +28,7 @@ services:
# proxies.trusted.ipranges: This setting is required for a REST API running in Docker to trust requests
# from the host machine. This IP range MUST correspond to the 'dspacenet' subnet defined above.
proxies__P__trusted__P__ipranges: '172.23.0'
+ LOGGING_CONFIG: /dspace/config/log4j2-container.xml
image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}"
build:
context: .
@@ -62,13 +63,17 @@ services:
while (! /dev/null 2>&1; do sleep 1; done;
/dspace/bin/dspace database migrate
catalina.sh run
- # DSpace database container
+ # DSpace PostgreSQL database container
dspacedb:
container_name: dspacedb
+ # Uses a custom Postgres image with pgcrypto installed
+ image: "${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-dspace-7_x}"
+ build:
+ # Must build out of subdirectory to have access to install script for pgcrypto
+ context: ./dspace/src/main/docker/dspace-postgres-pgcrypto/
environment:
PGDATA: /pgdata
- # Uses a custom Postgres image with pgcrypto installed
- image: dspace/dspace-postgres-pgcrypto
+ POSTGRES_PASSWORD: dspace
networks:
dspacenet:
ports:
@@ -77,12 +82,17 @@ services:
stdin_open: true
tty: true
volumes:
+ # Keep Postgres data directory between reboots
- pgdata:/pgdata
# DSpace Solr container
dspacesolr:
container_name: dspacesolr
- # Uses official Solr image at https://hub.docker.com/_/solr/
- image: solr:8.11-slim
+ image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}"
+ build:
+ context: .
+ dockerfile: ./dspace/src/main/docker/dspace-solr/Dockerfile
+ args:
+ SOLR_VERSION: "${SOLR_VER:-8.11}"
networks:
dspacenet:
ports:
@@ -92,30 +102,25 @@ services:
tty: true
working_dir: /var/solr/data
volumes:
- # Mount our local Solr core configs so that they are available as Solr configsets on container
- - ./dspace/solr/authority:/opt/solr/server/solr/configsets/authority
- - ./dspace/solr/oai:/opt/solr/server/solr/configsets/oai
- - ./dspace/solr/search:/opt/solr/server/solr/configsets/search
- - ./dspace/solr/statistics:/opt/solr/server/solr/configsets/statistics
# Keep Solr data directory between reboots
- solr_data:/var/solr/data
- # Initialize all DSpace Solr cores using the mounted local configsets (see above), then start Solr
+ # Initialize all DSpace Solr cores then start Solr:
# * First, run precreate-core to create the core (if it doesn't yet exist). If exists already, this is a no-op
- # * Second, copy updated configs from mounted configsets to this core. If it already existed, this updates core
- # to the latest configs. If it's a newly created core, this is a no-op.
+ # * Second, copy configsets to this core:
+ # Updates to Solr configs require the container to be rebuilt/restarted: `docker compose -p d7 up -d --build dspacesolr`
entrypoint:
- /bin/bash
- '-c'
- |
init-var-solr
precreate-core authority /opt/solr/server/solr/configsets/authority
- cp -r -u /opt/solr/server/solr/configsets/authority/* authority
+ cp -r /opt/solr/server/solr/configsets/authority/* authority
precreate-core oai /opt/solr/server/solr/configsets/oai
- cp -r -u /opt/solr/server/solr/configsets/oai/* oai
+ cp -r /opt/solr/server/solr/configsets/oai/* oai
precreate-core search /opt/solr/server/solr/configsets/search
- cp -r -u /opt/solr/server/solr/configsets/search/* search
+ cp -r /opt/solr/server/solr/configsets/search/* search
precreate-core statistics /opt/solr/server/solr/configsets/statistics
- cp -r -u /opt/solr/server/solr/configsets/statistics/* statistics
+ cp -r /opt/solr/server/solr/configsets/statistics/* statistics
exec solr -f
volumes:
assetstore:
diff --git a/dspace-api/pom.xml b/dspace-api/pom.xml
index 9d75342bd231..09c95919b8d5 100644
--- a/dspace-api/pom.xml
+++ b/dspace-api/pom.xml
@@ -12,7 +12,11 @@
The "strategy" by which approvers are chosen is in an implementation of
+ * {@link RequestItemAuthorExtractor} which is injected by the name
+ * {@code requestItemAuthorExtractor}. See the DI configuration documents.
+ *
* @author Mark H. Wood This package includes several "strategy" classes which discover responsible
- * parties in various ways. See {@link RequestItemSubmitterStrategy} and the
- * classes which extend it. A strategy class must be configured and identified
- * as {@link RequestItemAuthorExtractor} for injection into code which requires
- * Request a Copy services.
+ * Mailing is handled by {@link RequestItemEmailNotifier}. Responsible
+ * parties are represented by {@link RequestItemAuthor}
+ *
+ * This package includes several "strategy" classes which discover
+ * responsible parties in various ways. See
+ * {@link RequestItemSubmitterStrategy} and the classes which extend it, and
+ * others which implement {@link RequestItemAuthorExtractor}. A strategy class
+ * must be configured and identified as {@link requestItemAuthorExtractor}
+ * (note capitalization) for injection into code which requires Request
+ * a Copy services.
*/
package org.dspace.app.requestitem;
diff --git a/dspace-api/src/main/java/org/dspace/app/sitemap/GenerateSitemaps.java b/dspace-api/src/main/java/org/dspace/app/sitemap/GenerateSitemaps.java
index d65447d311ee..90962d12aa75 100644
--- a/dspace-api/src/main/java/org/dspace/app/sitemap/GenerateSitemaps.java
+++ b/dspace-api/src/main/java/org/dspace/app/sitemap/GenerateSitemaps.java
@@ -7,18 +7,10 @@
*/
package org.dspace.app.sitemap;
-import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLEncoder;
import java.sql.SQLException;
import java.util.Date;
-import java.util.Iterator;
import java.util.List;
import org.apache.commons.cli.CommandLine;
@@ -29,12 +21,8 @@
import org.apache.commons.cli.ParseException;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger;
-import org.dspace.content.Collection;
-import org.dspace.content.Community;
-import org.dspace.content.Item;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService;
@@ -43,6 +31,7 @@
import org.dspace.core.LogHelper;
import org.dspace.discovery.DiscoverQuery;
import org.dspace.discovery.DiscoverResult;
+import org.dspace.discovery.IndexableObject;
import org.dspace.discovery.SearchService;
import org.dspace.discovery.SearchServiceException;
import org.dspace.discovery.SearchUtils;
@@ -68,6 +57,7 @@ public class GenerateSitemaps {
private static final ConfigurationService configurationService =
DSpaceServicesFactory.getInstance().getConfigurationService();
private static final SearchService searchService = SearchUtils.getSearchService();
+ private static final int PAGE_SIZE = 100;
/**
* Default constructor
@@ -87,11 +77,6 @@ public static void main(String[] args) throws Exception {
"do not generate sitemaps.org protocol sitemap");
options.addOption("b", "no_htmlmap", false,
"do not generate a basic HTML sitemap");
- options.addOption("a", "ping_all", false,
- "ping configured search engines");
- options
- .addOption("p", "ping", true,
- "ping specified search engine URL");
options
.addOption("d", "delete", false,
"delete sitemaps dir and its contents");
@@ -116,14 +101,13 @@ public static void main(String[] args) throws Exception {
}
/*
- * Sanity check -- if no sitemap generation or pinging to do, or deletion, print usage
+ * Sanity check -- if no sitemap generation or deletion, print usage
*/
if (line.getArgs().length != 0 || line.hasOption('d') || line.hasOption('b')
&& line.hasOption('s') && !line.hasOption('g')
- && !line.hasOption('m') && !line.hasOption('y')
- && !line.hasOption('p')) {
+ && !line.hasOption('m') && !line.hasOption('y')) {
System.err
- .println("Nothing to do (no sitemap to generate, no search engines to ping)");
+ .println("Nothing to do (no sitemap to generate)");
hf.printHelp(usage, options);
System.exit(1);
}
@@ -137,20 +121,6 @@ public static void main(String[] args) throws Exception {
deleteSitemaps();
}
- if (line.hasOption('a')) {
- pingConfiguredSearchEngines();
- }
-
- if (line.hasOption('p')) {
- try {
- pingSearchEngine(line.getOptionValue('p'));
- } catch (MalformedURLException me) {
- System.err
- .println("Bad search engine URL (include all except sitemap URL)");
- System.exit(1);
- }
- }
-
System.exit(0);
}
@@ -189,7 +159,10 @@ public static void deleteSitemaps() throws IOException {
*/
public static void generateSitemaps(boolean makeHTMLMap, boolean makeSitemapOrg) throws SQLException, IOException {
String uiURLStem = configurationService.getProperty("dspace.ui.url");
- String sitemapStem = uiURLStem + "/sitemap";
+ if (!uiURLStem.endsWith("/")) {
+ uiURLStem = uiURLStem + '/';
+ }
+ String sitemapStem = uiURLStem + "sitemap";
File outputDir = new File(configurationService.getProperty("sitemap.dir"));
if (!outputDir.exists() && !outputDir.mkdir()) {
@@ -208,171 +181,113 @@ public static void generateSitemaps(boolean makeHTMLMap, boolean makeSitemapOrg)
}
Context c = new Context(Context.Mode.READ_ONLY);
+ int offset = 0;
+ long commsCount = 0;
+ long collsCount = 0;
+ long itemsCount = 0;
- List Handles permissions for DSpace content.
- Philosophy Policies are attached to Content
+ *
+ * @author Mohamed Eskander (mohamed.eskander at 4science.it)
+ */
+public class BulkAccessControlInput {
+
+ AccessConditionItem item;
+
+ AccessConditionBitstream bitstream;
+
+ public BulkAccessControlInput() {
+ }
+
+ public BulkAccessControlInput(AccessConditionItem item,
+ AccessConditionBitstream bitstream) {
+ this.item = item;
+ this.bitstream = bitstream;
+ }
+
+ public AccessConditionItem getItem() {
+ return item;
+ }
+
+ public void setItem(AccessConditionItem item) {
+ this.item = item;
+ }
+
+ public AccessConditionBitstream getBitstream() {
+ return bitstream;
+ }
+
+ public void setBitstream(AccessConditionBitstream bitstream) {
+ this.bitstream = bitstream;
+ }
+}
diff --git a/dspace-api/src/main/java/org/dspace/app/bulkaccesscontrol/service/BulkAccessConditionConfigurationService.java b/dspace-api/src/main/java/org/dspace/app/bulkaccesscontrol/service/BulkAccessConditionConfigurationService.java
new file mode 100644
index 000000000000..321b6d928e92
--- /dev/null
+++ b/dspace-api/src/main/java/org/dspace/app/bulkaccesscontrol/service/BulkAccessConditionConfigurationService.java
@@ -0,0 +1,45 @@
+/**
+ * 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.app.bulkaccesscontrol.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.dspace.app.bulkaccesscontrol.model.BulkAccessConditionConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Simple bean to manage different Bulk Access Condition configurations
+ *
+ * @author Mohamed Eskander (mohamed.eskander at 4science.it)
+ */
+public class BulkAccessConditionConfigurationService {
+
+ @Autowired
+ private List
+ * {
+ * item: {
+ * mode: "replace",
+ * accessConditions: [
+ * {
+ * "name": "openaccess"
+ * }
+ * ]
+ * },
+ * bitstream: {
+ * constraints: {
+ * uuid: [bit-uuid1, bit-uuid2, ..., bit-uuidN],
+ * },
+ * mode: "add",
+ * accessConditions: [
+ * {
+ * "name": "embargo",
+ * "startDate": "2024-06-24T23:59:59.999+0000"
+ * }
+ * ]
+ * }
+ * }
+ * Philosophy
+ * DSpace's authorization system follows the classical "police state"
+ * philosophy of security - the user can do nothing, unless it is
+ * specifically allowed. Those permissions are spelled out with
+ * {@link ResourcePolicy} objects, stored in the {@code resourcepolicy} table
+ * in the database.
+ *
+ * Policies are attached to Content
+ * Resource Policies get assigned to all of the content objects in
+ * DSpace - collections, communities, items, bundles, and bitstreams.
+ * (Currently they are not attached to non-content objects such as
+ * {@code EPerson} or {@code Group}. But they could be, hence the name
+ * {@code ResourcePolicy} instead of {@code ContentPolicy}.)
+ *
+ * Policies are tuples
+ * Authorization is based on evaluating the tuple of (object, action, actor),
+ * such as (ITEM, READ, EPerson John Smith) to check if the {@code EPerson}
+ * "John Smith" can read an item. {@code ResourcePolicy} objects are pretty
+ * simple, describing a single instance of (object, action, actor). If
+ * multiple actors are desired, such as groups 10, 11, and 12 are allowed to
+ * READ Item 13, you simply create a {@code ResourcePolicy} for each group.
+ *
+ * Built-in groups
+ * The install process should create two built-in groups - {@code Anonymous}
+ * for anonymous/public access, and {@code Administrators} for administrators.
+ * Group {@code Anonymous} allows anyone access, even if not authenticated.
+ * Group {@code Administrators}' members have super-user rights,
+ * and are allowed to do any action to any object.
+ *
+ * Policy types
+ * Policies have a "type" used to distinguish policies which are applied for
+ * specific purposes.
+ *
+ *
Start and End dates
+ * A policy may have a start date and/or an end date. The policy is
+ * considered not valid before the start date or after the end date. No date
+ * means do not apply the related test. For example, embargo until a given
+ * date can be expressed by a READ policy with a given start date, and a
+ * limited-time offer by a READ policy with a given end date.
+ *
+ * @author dstuve
+ * @author mwood
+ */
+package org.dspace.authorize;
diff --git a/dspace-api/src/main/java/org/dspace/authorize/package.html b/dspace-api/src/main/java/org/dspace/authorize/package.html
deleted file mode 100644
index 66ce0f824773..000000000000
--- a/dspace-api/src/main/java/org/dspace/authorize/package.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
-
-DSpace's authorization system follows the classical "police state"
-philosophy of security - the user can do nothing, unless it is
-specifically allowed. Those permissions are spelled out with
-ResourcePolicy objects, stored in the resourcepolicy table in the
-database.
-Policies are attached to Content
-
-Resource Policies get assigned to all of the content objects in
-DSpace - collections, communities, items, bundles, and bitstreams.
-(Currently they are not attached to non-content objects such as EPerson
-or Group. But they could be, hence the name ResourcePolicy instead of
-ContentPolicy.)
-Policies are tuples
-Authorization is based on evaluating the tuple of (object, action, who),
-such as (ITEM, READ, EPerson John Smith) to check if the EPerson "John Smith"
-can read an item. ResourcePolicy objects are pretty simple, describing a single instance of
-(object, action, who). If multiple who's are desired, such as Groups 10, 11, and
-12 are allowed to READ Item 13, you simply create a ResourcePolicy for each
-group.
-Special Groups
-The install process should create two special groups - group 0, for
-anonymous/public access, and group 1 for administrators.
-Group 0 (public/anonymous) allows anyone access, even if they are not
-authenticated. Group 1's (admin) members have super-user rights, and
-are allowed to do any action to any object.
-Unused ResourcePolicy attributes
-ResourcePolicies have a few attributes that are currently unused,
-but are included with the intent that they will be used someday.
-One is start and end dates, for when policies will be active, so that
-permissions for content can change over time. The other is the EPerson -
-policies could apply to only a single EPerson, but for ease of
-administration currently a Group is the recommended unit to use to
-describe 'who'.
-
true
if the item is an inprogress submission, i.e. a WorkspaceItem or WorkflowItem
* @throws SQLException An exception that provides information on a database access error or other errors.
*/
+ @Override
public boolean isInProgressSubmission(Context context, Item item) throws SQLException {
return workspaceItemService.findByItem(context, item) != null
|| workflowItemService.findByItem(context, item) != null;
@@ -1183,8 +1289,8 @@ protected void addDefaultPoliciesNotInPlace(Context context, DSpaceObject dso,
if (!authorizeService
.isAnIdenticalPolicyAlreadyInPlace(context, dso, defaultPolicy.getGroup(), Constants.READ,
defaultPolicy.getID()) &&
- ((!appendMode && this.isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso)) ||
- (appendMode && this.shouldBeAppended(context, dso, defaultPolicy)))) {
+ (!appendMode && this.isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso) ||
+ appendMode && this.shouldBeAppended(context, dso, defaultPolicy))) {
ResourcePolicy newPolicy = resourcePolicyService.clone(context, defaultPolicy);
newPolicy.setdSpaceObject(dso);
newPolicy.setAction(Constants.READ);
@@ -1226,7 +1332,7 @@ private boolean isNotAlreadyACustomRPOfThisTypeOnDSO(Context context, DSpaceObje
* 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
@@ -1615,7 +1721,7 @@ public List* Typical use: - *
+ *+ *+ * {@code path} is the filesystem path of an email template, typically in + * {@code ${dspace.dir}/config/emails/} and can include the subject -- see + * below. Templates are processed by + * Apache Velocity. They may contain VTL directives and property + * placeholders. + *Email email = Email.getEmail(path);
+ *email.addRecipient("foo@bar.com");
+ *email.addArgument("John");
+ *email.addArgument("On the Testing of DSpace");
+ *email.send();
+ *
+ * {@link addArgument(string)} adds a property to the {@code params} array + * in the Velocity context, which can be used to replace placeholder tokens + * in the message. These arguments are indexed by number in the order they were + * added to the message. + *
+ * The DSpace configuration properties are also available to templates as the + * array {@code config}, indexed by name. Example: {@code ${config.get('dspace.name')}} + *
+ * Recipients and attachments may be added as needed. See {@link addRecipient}, + * {@link addAttachment(File, String)}, and + * {@link addAttachment(InputStream, String, String)}. *
- * Email email = new Email();
- * email.addRecipient("foo@bar.com");
- * email.addArgument("John");
- * email.addArgument("On the Testing of DSpace");
- * email.send();
- *
- * name
is the name of an email template in
- * dspace-dir/config/emails/
(which also includes the subject.)
- * arg0
and arg1
are arguments to fill out the
- * message with.
- *
- * Emails are formatted using Apache Velocity. Headers such as Subject may be - * supplied by the template, by defining them using #set(). Example: - *
+ * Example: * ** @@ -91,12 +103,14 @@ * * Thank you for sending us your submission "${params[1]}". * + * -- + * The ${config.get('dspace.name')} Team + * ** *
* If the example code above was used to send this mail, the resulting mail
* would have the subject Example e-mail
and the body would be:
- *
* @@ -105,7 +119,16 @@ * * Thank you for sending us your submission "On the Testing of DSpace". * + * -- + * The DSpace Team + * *+ *
+ * There are two ways to load a message body. One can create an instance of + * {@link Email} and call {@link setContent} on it, passing the body as a String. Or + * one can use the static factory method {@link getEmail} to load a file by its + * complete filesystem path. In either case the text will be loaded into a + * Velocity template. * * @author Robert Tansley * @author Jim Downing - added attachment handling code @@ -115,7 +138,6 @@ public class Email { /** * The content of the message */ - private String content; private String contentName; /** @@ -176,13 +198,12 @@ public Email() { moreAttachments = new ArrayList<>(10); subject = ""; template = null; - content = ""; replyTo = null; charset = null; } /** - * Add a recipient + * Add a recipient. * * @param email the recipient's email address */ @@ -196,16 +217,24 @@ public void addRecipient(String email) { * "Subject:" line must be stripped. * * @param name a name for this message body - * @param cnt the content of the message + * @param content the content of the message */ - public void setContent(String name, String cnt) { - content = cnt; + public void setContent(String name, String content) { contentName = name; arguments.clear(); + + VelocityEngine templateEngine = new VelocityEngine(); + templateEngine.init(VELOCITY_PROPERTIES); + + StringResourceRepository repo = (StringResourceRepository) + templateEngine.getApplicationAttribute(RESOURCE_REPOSITORY_NAME); + repo.putStringResource(contentName, content); + // Turn content into a template. + template = templateEngine.getTemplate(contentName); } /** - * Set the subject of the message + * Set the subject of the message. * * @param s the subject of the message */ @@ -214,7 +243,7 @@ public void setSubject(String s) { } /** - * Set the reply-to email address + * Set the reply-to email address. * * @param email the reply-to email address */ @@ -223,7 +252,7 @@ public void setReplyTo(String email) { } /** - * Fill out the next argument in the template + * Fill out the next argument in the template. * * @param arg the value for the next argument */ @@ -231,6 +260,13 @@ public void addArgument(Object arg) { arguments.add(arg); } + /** + * Add an attachment bodypart to the message from an external file. + * + * @param f reference to a file to be attached. + * @param name a name for the resulting bodypart in the message's MIME + * structure. + */ public void addAttachment(File f, String name) { attachments.add(new FileAttachment(f, name)); } @@ -238,6 +274,17 @@ public void addAttachment(File f, String name) { /** When given a bad MIME type for an attachment, use this instead. */ private static final String DEFAULT_ATTACHMENT_TYPE = "application/octet-stream"; + /** + * Add an attachment bodypart to the message from a byte stream. + * + * @param is the content of this stream will become the content of the + * bodypart. + * @param name a name for the resulting bodypart in the message's MIME + * structure. + * @param mimetype the MIME type of the resulting bodypart, such as + * "text/pdf". If {@code null} it will default to + * "application/octet-stream", which is MIME for "unknown format". + */ public void addAttachment(InputStream is, String name, String mimetype) { if (null == mimetype) { LOG.error("Null MIME type replaced with '" + DEFAULT_ATTACHMENT_TYPE @@ -257,6 +304,11 @@ public void addAttachment(InputStream is, String name, String mimetype) { moreAttachments.add(new InputStreamAttachment(is, name, mimetype)); } + /** + * Set the character set of the message. + * + * @param cs the name of a character set, such as "UTF-8" or "EUC-JP". + */ public void setCharset(String cs) { charset = cs; } @@ -280,15 +332,20 @@ public void reset() { * {@code mail.message.headers} then that name and its value will be added * to the message's headers. * - *
"subject" is treated specially: if {@link setSubject()} has not been called, - * the value of any "subject" property will be used as if setSubject had - * been called with that value. Thus a template may define its subject, but - * the caller may override it. + *
"subject" is treated specially: if {@link setSubject()} has not been
+ * called, the value of any "subject" property will be used as if setSubject
+ * had been called with that value. Thus a template may define its subject,
+ * but the caller may override it.
*
* @throws MessagingException if there was a problem sending the mail.
* @throws IOException if IO error
*/
public void send() throws MessagingException, IOException {
+ if (null == template) {
+ // No template -- no content -- PANIC!!!
+ throw new MessagingException("Email has no body");
+ }
+
ConfigurationService config
= DSpaceServicesFactory.getInstance().getConfigurationService();
@@ -308,23 +365,19 @@ public void send() throws MessagingException, IOException {
MimeMessage message = new MimeMessage(session);
// Set the recipients of the message
- Iterator
+ * Note that everything is stored here, so that only send() throws a
+ * MessagingException.
*
* @param emailFile
* full name for the email template, for example "/dspace/config/emails/register".
@@ -484,15 +543,6 @@ public static Email getEmail(String emailFile)
}
return email;
}
- /*
- * Implementation note: It might be necessary to add a quick utility method
- * like "send(to, subject, message)". We'll see how far we get without it -
- * having all emails as templates in the config allows customisation and
- * internationalisation.
- *
- * Note that everything is stored and the run in send() so that only send()
- * throws a MessagingException.
- */
/**
* Test method to send an email to check email server settings
@@ -547,7 +597,7 @@ public static void main(String[] args) {
}
/**
- * Utility struct class for handling file attachments.
+ * Utility record class for handling file attachments.
*
* @author ojd20
*/
@@ -563,7 +613,7 @@ public FileAttachment(File f, String n) {
}
/**
- * Utility struct class for handling file attachments.
+ * Utility record class for handling file attachments.
*
* @author Adán Román Ruiz at arvo.es
*/
@@ -580,6 +630,8 @@ public InputStreamAttachment(InputStream is, String name, String mimetype) {
}
/**
+ * Wrap an {@link InputStream} in a {@link DataSource}.
+ *
* @author arnaldo
*/
public static class InputStreamDataSource implements DataSource {
@@ -587,6 +639,14 @@ public static class InputStreamDataSource implements DataSource {
private final String contentType;
private final ByteArrayOutputStream baos;
+ /**
+ * Consume the content of an InputStream and store it in a local buffer.
+ *
+ * @param name give the DataSource a name.
+ * @param contentType the DataSource contains this type of data.
+ * @param inputStream content to be buffered in the DataSource.
+ * @throws IOException if the stream cannot be read.
+ */
InputStreamDataSource(String name, String contentType, InputStream inputStream) throws IOException {
this.name = name;
this.contentType = contentType;
diff --git a/dspace-api/src/main/java/org/dspace/core/HibernateDBConnection.java b/dspace-api/src/main/java/org/dspace/core/HibernateDBConnection.java
index 3321e4d837e5..b371af80eede 100644
--- a/dspace-api/src/main/java/org/dspace/core/HibernateDBConnection.java
+++ b/dspace-api/src/main/java/org/dspace/core/HibernateDBConnection.java
@@ -337,4 +337,17 @@ public
+ * NOTE: when run in workflow, curation tasks run with
+ * authorization disabled.
+ *
* @see CurationTaskConfig
* @author mwood
*/
@Service
public class XmlWorkflowCuratorServiceImpl
implements XmlWorkflowCuratorService {
- private static final Logger LOG
- = org.apache.logging.log4j.LogManager.getLogger();
+ private static final Logger LOG = LogManager.getLogger();
@Autowired(required = true)
protected XmlWorkflowFactory workflowFactory;
@@ -97,7 +103,18 @@ public boolean doCuration(Context c, XmlWorkflowItem wfi)
throws AuthorizeException, IOException, SQLException {
Curator curator = new Curator();
curator.setReporter(reporter);
- return curate(curator, c, wfi);
+ c.turnOffAuthorisationSystem();
+ boolean wasAnonymous = false;
+ if (null == c.getCurrentUser()) { // We need someone to email
+ wasAnonymous = true;
+ c.setCurrentUser(ePersonService.getSystemEPerson(c));
+ }
+ boolean failedP = curate(curator, c, wfi);
+ if (wasAnonymous) {
+ c.setCurrentUser(null);
+ }
+ c.restoreAuthSystemState();
+ return failedP;
}
@Override
@@ -123,40 +140,48 @@ public boolean curate(Curator curator, Context c, XmlWorkflowItem wfi)
item.setOwningCollection(wfi.getCollection());
for (Task task : step.tasks) {
curator.addTask(task.name);
- curator.curate(item);
- int status = curator.getStatus(task.name);
- String result = curator.getResult(task.name);
- String action = "none";
- switch (status) {
- case Curator.CURATE_FAIL:
- // task failed - notify any contacts the task has assigned
- if (task.powers.contains("reject")) {
- action = "reject";
- }
- notifyContacts(c, wfi, task, "fail", action, result);
- // if task so empowered, reject submission and terminate
- if ("reject".equals(action)) {
- workflowService.sendWorkflowItemBackSubmission(c, wfi,
- c.getCurrentUser(), null,
- task.name + ": " + result);
- return false;
- }
- break;
- case Curator.CURATE_SUCCESS:
- if (task.powers.contains("approve")) {
- action = "approve";
- }
- notifyContacts(c, wfi, task, "success", action, result);
- if ("approve".equals(action)) {
- // cease further task processing and advance submission
- return true;
- }
- break;
- case Curator.CURATE_ERROR:
- notifyContacts(c, wfi, task, "error", action, result);
- break;
- default:
- break;
+
+ // Check whether the task is configured to be queued rather than automatically run
+ if (StringUtils.isNotEmpty(step.queue)) {
+ // queue attribute has been set in the FlowStep configuration: add task to configured queue
+ curator.queue(c, item.getID().toString(), step.queue);
+ } else {
+ // Task is configured to be run automatically
+ curator.curate(c, item);
+ int status = curator.getStatus(task.name);
+ String result = curator.getResult(task.name);
+ String action = "none";
+ switch (status) {
+ case Curator.CURATE_FAIL:
+ // task failed - notify any contacts the task has assigned
+ if (task.powers.contains("reject")) {
+ action = "reject";
+ }
+ notifyContacts(c, wfi, task, "fail", action, result);
+ // if task so empowered, reject submission and terminate
+ if ("reject".equals(action)) {
+ workflowService.sendWorkflowItemBackSubmission(c, wfi,
+ c.getCurrentUser(), null,
+ task.name + ": " + result);
+ return false;
+ }
+ break;
+ case Curator.CURATE_SUCCESS:
+ if (task.powers.contains("approve")) {
+ action = "approve";
+ }
+ notifyContacts(c, wfi, task, "success", action, result);
+ if ("approve".equals(action)) {
+ // cease further task processing and advance submission
+ return true;
+ }
+ break;
+ case Curator.CURATE_ERROR:
+ notifyContacts(c, wfi, task, "error", action, result);
+ break;
+ default:
+ break;
+ }
}
curator.clear();
}
@@ -223,8 +248,12 @@ protected void notifyContacts(Context c, XmlWorkflowItem wfi,
String status, String action, String message)
throws AuthorizeException, IOException, SQLException {
List
+ * WARNING: This method may have bad performance for Groups with large numbers of EPerson members.
+ * Therefore, only use this when you need to access every EPerson member. Instead, consider using
+ * EPersonService.findByGroups() for a paginated list of EPersons.
*
* @return list of EPersons
*/
@@ -143,9 +147,13 @@ List
+ * WARNING: This method may have bad performance for Groups with large numbers of Subgroups.
+ * Therefore, only use this when you need to access every Subgroup. Instead, consider using
+ * GroupService.findByParent() for a paginated list of Subgroups.
*
- * @return list of groups
+ * @return list of subgroups
*/
public List
+ * NOTE: As long as a query is specified, the EPerson's email address is included in the search alongside any given
+ * metadata fields.
+ *
+ * @param context DSpace context
+ * @param query the text to search EPersons for
+ * @param queryFields the metadata fields to search within (email is also included automatically)
+ * @param sortFields the metadata field(s) to sort the results by
+ * @param offset the position of the first result to return
+ * @param limit how many results return
+ * @return List of matching EPerson objects
+ * @throws SQLException if an error occurs
+ */
public List
+ * NOTE: The parent group itself is also excluded from the search.
+ *
+ * @param context The DSpace context
+ * @param groupName Group name to fuzzy match against.
+ * @param excludeParent Parent Group to exclude results from. Groups under this parent will never be returned.
+ * @param offset Offset to use for pagination (-1 to disable)
+ * @param limit The maximum number of results to return (-1 to disable)
+ * @return Groups matching the query (which are not members of the given parent)
+ * @throws SQLException if database error
+ */
+ List
+ * NOTE: The parent group itself is also excluded from the count.
+ *
+ * @param context The DSpace context
+ * @param groupName Group name to fuzzy match against.
+ * @param excludeParent Parent Group to exclude results from. Groups under this parent will never be returned.
+ * @return Groups matching the query (which are not members of the given parent)
+ * @throws SQLException if database error
+ */
+ int countByNameLikeAndNotMember(Context context, String groupName, Group excludeParent) throws SQLException;
+
/**
* Find a group by its name and the membership of the given EPerson
*
@@ -146,4 +178,28 @@ List
+ * NOTE: the EPerson's email address is included in the search alongside any given metadata fields.
+ *
+ * @param context DSpace Context
+ * @param queryString String which defines the beginning "SELECT" for the SQL query
+ * @param queryParam Actual text being searched for
+ * @param queryFields List of metadata fields to search within
+ * @param excludeGroup Optional Group which should be excluded from search. Any EPersons who are members
+ * of this group will not be included in the results.
+ * @param sortFields Optional List of metadata fields to sort by (should not be specified if sortField is used)
+ * @param sortField Optional database column to sort on (should not be specified if sortFields is used)
+ * @param pageSize how many results return
+ * @param offset the position of the first result to return
+ * @return built Query object
+ * @throws SQLException if error occurs
+ */
protected Query getSearchQuery(Context context, String queryString, String queryParam,
- Listnull
otherwise
+ * @return true if the currentUser is allowed to run the script with the specified parameters or
+ * at least in some case if the parameters are not yet known
*/
@Override
- public boolean isAllowedToExecute(Context context) {
+ public boolean isAllowedToExecute(Context context, List