Compare commits

..

2 Commits

Author SHA1 Message Date
Marcello Teodori
4a3def2c7f format java code 2021-10-19 19:00:30 +02:00
Marcello Teodori
45eb22e67d Apply autoformat with prettier 2021-10-19 19:00:12 +02:00
7649 changed files with 1597502 additions and 1425505 deletions

View File

@@ -38,6 +38,27 @@ updates:
- dependency-name: org.activiti:activiti-spring
versions:
- ">= 7.1.a, < 7.2"
- dependency-name: org.apache.camel:camel-activemq
versions:
- "> 3.7.1"
- dependency-name: org.apache.camel:camel-amqp
versions:
- "> 3.7.1"
- dependency-name: org.apache.camel:camel-direct
versions:
- "> 3.7.1"
- dependency-name: org.apache.camel:camel-directvm
versions:
- "> 3.7.1"
- dependency-name: org.apache.camel:camel-jackson
versions:
- "> 3.7.1"
- dependency-name: org.apache.camel:camel-mock
versions:
- "> 3.7.1"
- dependency-name: org.apache.camel:camel-spring
versions:
- "> 3.7.1"
- dependency-name: org.apache.chemistry.opencmis:chemistry-opencmis-client-impl
versions:
- "> 1.0.0"
@@ -53,6 +74,24 @@ updates:
- dependency-name: org.freemarker:freemarker
versions:
- "> 2.3.20-alfresco-patched-20200421"
- dependency-name: org.keycloak:keycloak-adapter-core
versions:
- "> 12.0.2"
- dependency-name: org.keycloak:keycloak-adapter-spi
versions:
- "> 12.0.2"
- dependency-name: org.keycloak:keycloak-authz-client
versions:
- "> 12.0.2"
- dependency-name: org.keycloak:keycloak-common
versions:
- "> 12.0.2"
- dependency-name: org.keycloak:keycloak-core
versions:
- "> 12.0.2"
- dependency-name: org.keycloak:keycloak-servlet-adapter-spi
versions:
- "> 12.0.2"
- dependency-name: org.eclipse.jetty:jetty-server
versions:
- 9.4.38.v20210224
@@ -140,9 +179,3 @@ updates:
- "8.16"
registries:
- maven-repository-artifacts-alfresco-com-nexus-content-groups-int
- package-ecosystem: "docker"
directory: "packaging/docker-alfresco/"
schedule:
interval: "daily"
time: "22:00"
timezone: Africa/Abidjan

View File

@@ -1,549 +0,0 @@
name: Alfresco Community Repo CI
on:
pull_request:
branches:
- feature/**
- fix/**
- master
- release/**
push:
branches:
- feature/**
- fix/**
workflow_call:
workflow_dispatch:
env:
DOCKERHUB_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKER_USERNAME }}
GITHUB_ACTIONS_DEPLOY_TIMEOUT: 60
LOG_WARN: "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
MAVEN_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
MAVEN_USERNAME: ${{ secrets.NEXUS_USERNAME }}
QUAY_PASSWORD: ${{ secrets.QUAY_PASSWORD }}
QUAY_USERNAME: ${{ secrets.QUAY_USERNAME }}
CI_WORKSPACE: ${{ github.workspace }}
TAS_ENVIRONMENT: ./packaging/tests/environment
TAS_SCRIPTS: ../alfresco-community-repo/packaging/tests/scripts
jobs:
prepare:
name: "Prepare"
runs-on: ubuntu-latest
if: >
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Prepare maven cache and check compilation"
run: bash ./scripts/ci/prepare.sh
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
veracode:
name: "Source Clear Scan (SCA)"
runs-on: ubuntu-latest
needs: [prepare]
if: >
((github.ref_name == 'master' || startsWith(github.ref_name, 'release/')) && github.event_name != 'pull_request') &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- uses: Alfresco/alfresco-build-tools/.github/actions/veracode@v1.33.0
continue-on-error: true
with:
srcclr-api-token: ${{ secrets.SRCCLR_API_TOKEN }}
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
all_unit_tests_suite:
name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
runs-on: ubuntu-latest
needs: [prepare]
if: >
!contains(github.event.head_commit.message, '[skip repo]') &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run tests"
run: |
mvn -B test -pl core,data-model -am -DfailIfNoTests=false
mvn -B test -pl "repository,mmt" -am "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite" -DfailIfNoTests=false
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
remote_api_app_context_test_suites:
name: Remote-api - ${{ matrix.testSuite }}
runs-on: ubuntu-latest
needs: [prepare]
if: >
!contains(github.event.head_commit.message, '[skip repo]') &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
strategy:
fail-fast: false
matrix:
include:
- testSuite: AppContext01TestSuite
compose-profile: default
- testSuite: AppContext02TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContext03TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContext04TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContextExtraTestSuite
compose-profile: default
env:
REQUIRES_INSTALLED_ARTIFACTS: true
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Build"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
bash ./scripts/ci/init.sh
bash ./scripts/ci/build.sh
- name: "Set transformers tag"
run: echo "TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)" >> $GITHUB_ENV
- name: "Set up the environment"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile ${{ matrix.compose-profile }} up -d
- name: "Run tests"
run: mvn -B test -pl remote-api -Dtest=${{ matrix.testSuite }} -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_mariadb_tests:
name: Repository - MariaDB ${{ matrix.version }} tests
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/')) &&
github.event_name != 'pull_request' &&
!contains(github.event.head_commit.message, '[skip db]')) ||
contains(github.event.head_commit.message, '[db]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
strategy:
fail-fast: false
matrix:
version: ['10.2.18', '10.4', '10.5']
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: Run MariaDB ${{ matrix.version }} database
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile mariadb up -d
env:
MARIADB_VERSION: ${{ matrix.version }}
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_mariadb_10_6_tests:
name: "Repository - MariaDB 10.6 tests"
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/') || github.event_name == 'pull_request') &&
!contains(github.event.head_commit.message, '[skip db]')) ||
contains(github.event.head_commit.message, '[latest db]') ||
contains(github.event.head_commit.message, '[db]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run MariaDB 10.6 database"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile mariadb up -d
env:
MARIADB_VERSION: 10.6
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_mysql_tests:
name: Repository - MySQL 8 tests
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/') || github.event_name == 'pull_request') &&
!contains(github.event.head_commit.message, '[skip db]')) ||
contains(github.event.head_commit.message, '[latest db]') ||
contains(github.event.head_commit.message, '[db]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run MySQL 8 database"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile mysql up -d
env:
MYSQL_VERSION: 8
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_postgresql_13_7_tests:
name: "Repository - PostgreSQL 13.7 tests"
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/')) && github.event_name != 'pull_request' &&
!contains(github.event.head_commit.message, '[skip db]')) ||
contains(github.event.head_commit.message, '[db]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run PostgreSQL 13.7 database"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile postgres up -d
env:
POSTGRES_VERSION: 13.7
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_postgresql_14_4_tests:
name: "Repository - PostgreSQL 14.4 tests"
runs-on: ubuntu-latest
needs: [prepare]
if: >
(!contains(github.event.head_commit.message, '[skip db]') ||
contains(github.event.head_commit.message, '[latest db]') ||
contains(github.event.head_commit.message, '[db]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run PostgreSQL 14.4 database"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile postgres up -d
env:
POSTGRES_VERSION: 14.4
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_messaging_tests:
name: Repository - Messaging tests
runs-on: ubuntu-latest
needs: [prepare]
if: >
!contains(github.event.head_commit.message, '[skip repo]') &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run ActiveMQ"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile activemq up -d
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=CamelRoutesTest,CamelComponentsTest -DfailIfNoTests=false
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
repository_app_context_test_suites:
name: Repository - ${{ matrix.testSuite }}
runs-on: ubuntu-latest
needs: [prepare]
if: >
!contains(github.event.head_commit.message, '[skip repo]') &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
strategy:
fail-fast: false
matrix:
include:
- testSuite: AppContext01TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContext02TestSuite
compose-profile: default
- testSuite: AppContext03TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContext04TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContext05TestSuite
compose-profile: default
mvn-options: '"-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"'
- testSuite: AppContext06TestSuite
compose-profile: with-transform-core-aio
- testSuite: AppContextExtraTestSuite
compose-profile: with-transform-core-aio
- testSuite: MiscContextTestSuite
compose-profile: with-transform-core-aio
- testSuite: SearchTestSuite
compose-profile: default
mvn-options: '-Dindex.subsystem.name=solr6'
- testSuite: MTLSTestSuite
compose-profile: with-mtls-transform-core-aio
mtls: true
disabledHostnameVerification: false
mvn-options: '-Dencryption.ssl.keystore.location=${CI_WORKSPACE}/keystores/alfresco/alfresco.keystore -Dencryption.ssl.truststore.location=${CI_WORKSPACE}/keystores/alfresco/alfresco.truststore'
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Set transformers tag"
run: echo "TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)" >> $GITHUB_ENV
- name: "Generate Keystores and Truststores for Mutual TLS configuration"
if: ${{ matrix.mtls }}
run: |
git clone -b "master" --depth=1 "https://${{ secrets.BOT_GITHUB_USERNAME }}:${{ secrets.BOT_GITHUB_TOKEN }}@github.com/Alfresco/alfresco-ssl-generator.git"
if ${{ matrix.disabledHostnameVerification }} ; then
bash ${{ env.CI_WORKSPACE }}/alfresco-ssl-generator/scripts/ci/generate_keystores_wrong_hostnames.sh
echo "HOSTNAME_VERIFICATION_DISABLED=true" >> "$GITHUB_ENV"
else
bash ${{ env.CI_WORKSPACE }}/alfresco-ssl-generator/scripts/ci/generate_keystores.sh
echo "HOSTNAME_VERIFICATION_DISABLED=false" >> "$GITHUB_ENV"
fi
- name: "Set up the environment"
run: |
if [ -e ./scripts/ci/tests/${{ matrix.testSuite }}-setup.sh ]; then
bash ./scripts/ci/tests/${{ matrix.testSuite }}-setup.sh
fi
docker-compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile ${{ matrix.compose-profile }} up -d
- name: "Run tests"
run: mvn -B test -pl repository -am -Dtest=${{ matrix.testSuite }} -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco ${{ matrix.mvn-options }}
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
tas_tests:
name: ${{ matrix.test-name }}
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/') || github.event_name == 'pull_request' ) &&
!contains(github.event.head_commit.message, '[skip tas]')) ||
contains(github.event.head_commit.message, '[tas]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
strategy:
fail-fast: false
matrix:
include:
- test-name: "REST API TAS tests part1"
pom-dir: tas-restapi
test-profile: run-restapi-part1
- test-name: "REST API TAS tests part2"
pom-dir: tas-restapi
test-profile: run-restapi-part2
- test-name: "REST API TAS tests part3"
pom-dir: tas-restapi
test-profile: run-restapi-part3
- test-name: "CMIS TAS tests - BROWSER binding"
pom-dir: tas-cmis
test-profile: run-cmis-browser
- test-name: "CMIS TAS tests - ATOM binding"
pom-dir: tas-cmis
test-profile: run-cmis-atom
- test-name: "CMIS TAS tests - WEBSERVICES binding"
pom-dir: tas-cmis
test-profile: run-cmis-webservices
- test-name: "Email TAS tests"
pom-dir: tas-email
- test-name: "WebDAV TAS tests"
pom-dir: tas-webdav
- test-name: "Integration TAS tests"
pom-dir: tas-integration
env:
REQUIRES_LOCAL_IMAGES: true
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Build"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
bash ./scripts/ci/init.sh
bash ./scripts/ci/build.sh
- name: "Set up the environment"
run: |
${{ env.TAS_SCRIPTS }}/start-compose.sh ${{ env.TAS_ENVIRONMENT }}/docker-compose-minimal+transforms.yml
${{ env.TAS_SCRIPTS }}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
- name: "Build TAS integration tests"
if: ${{ matrix.test-name }} == 'Integration TAS tests'
run: mvn install -pl :alfresco-community-repo-integration-test -am -DskipTests -Pall-tas-tests
- name: "Run tests"
id: tests
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: mvn -B verify -f packaging/tests/${{ matrix.pom-dir }}/pom.xml -Pall-tas-tests,${{ matrix.test-profile }} -Denvironment=default -DrunBugs=false
- name: "Print output after success"
if: ${{ always() && steps.tests.outcome == 'success' }}
run: ${TAS_SCRIPTS}/output_tests_run.sh "packaging/tests/${{ matrix.pom-dir }}"
- name: "Print output after failure"
if: ${{ always() && steps.tests.outcome == 'failure' }}
run: ${TAS_SCRIPTS}/output_logs_for_failures.sh "packaging/tests/${{ matrix.pom-dir }}"
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
share_services_test_suite:
name: Share Services - ShareServicesTestSuite
runs-on: ubuntu-latest
needs: [prepare]
if: >
!contains(github.event.head_commit.message, '[skip repo]') &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- name: "Run Postgres 14.4 database"
run: docker-compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile postgres up -d
- name: "Run tests"
run: mvn -B test -pl :alfresco-share-services -am -Dtest=ShareServicesTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
ags_postgresql_tests:
name: AGS Integration Tests 0${{ matrix.part }} (PostgreSQL) ${{ matrix.test-name }}
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/') || github.event_name == 'pull_request' ) &&
!contains(github.event.head_commit.message, '[skip ags]')) ||
contains(github.event.head_commit.message, '[ags]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
strategy:
fail-fast: false
matrix:
part: [1, 2, 3, 4]
env:
REQUIRES_INSTALLED_ARTIFACTS: true
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Build"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
bash ./scripts/ci/init.sh
bash ./scripts/ci/build.sh
- name: "Verify"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: mvn --file amps/ags/pom.xml -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt${{ matrix.part }} ${{ env.LOG_WARN }}
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
ags_mysql_tests:
name: AGS Integration Tests 0${{ matrix.part }} (MySQL) ${{ matrix.test-name }}
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/') || github.event_name == 'pull_request' ) &&
!contains(github.event.head_commit.message, '[skip ags]')) ||
contains(github.event.head_commit.message, '[ags on MySQL]')) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
strategy:
fail-fast: false
matrix:
part: [1, 2, 3, 4]
env:
REQUIRES_INSTALLED_ARTIFACTS: true
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Build"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
bash ./scripts/ci/init.sh
bash ./scripts/ci/build.sh
- name: "Verify"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: mvn --file amps/ags/pom.xml -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt${{ matrix.part }} ${{ env.LOG_WARN }}
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
ags_community_rest_api_tests:
name: "AGS Community Rest API Tests"
runs-on: ubuntu-latest
needs: [prepare]
if: >
(((github.ref_name == 'master' || startsWith(github.ref_name, 'release/') || github.event_name == 'pull_request' ) &&
!contains(github.event.head_commit.message, '[skip ags]') && !contains(github.event.head_commit.message, '[skip tas]')) ||
(contains(github.event.head_commit.message, '[ags]') && contains(github.event.head_commit.message, '[tas]'))) &&
!contains(github.event.head_commit.message, '[skip tests]') &&
!contains(github.event.head_commit.message, '[force')
env:
REQUIRES_LOCAL_IMAGES: true
steps:
- uses: actions/checkout@v3
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Build"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
bash ./scripts/ci/init.sh
bash ./scripts/ci/build.sh
- name: "Set up the environment"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
${{ env.TAS_SCRIPTS }}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml
${{ env.TAS_SCRIPTS }}/wait-for-alfresco-start.sh "http://localhost:8080/alfresco"
mvn -B install -pl :alfresco-governance-services-automation-community-rest-api -am -Pags -Pall-tas-tests -DskipTests
- name: "Test"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags -Pall-tas-tests
- name: "Configure AWS credentials"
if: ${{ always() }}
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AGS_AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AGS_AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: "Upload artifacts to Amazon S3 bucket"
if: ${{ always() }}
run: |
bash amps/ags/ci/scripts/getLogs.sh
aws s3 cp --acl private alfresco.log s3://ags-travis-artifacts/community/${{ github.run_number }}/AGS-Community-Rest-API-Tests/alfresco.log
aws s3 cp --acl private solr.log s3://ags-travis-artifacts/community/${{ github.run_number }}/AGS-Community-Rest-API-Tests/solr.log
aws s3 cp --acl private ./amps/ags/rm-automation/rm-automation-community-rest-api/target/reports/rm-automation-community-rest-api.log s3://ags-travis-artifacts/community/${{ github.run_number }}/AGS-Community-Rest-API-Tests/rm-automation-community-rest-api.log
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh

View File

@@ -1,79 +0,0 @@
name: Master/Release branch workflow
on:
push:
branches:
- master
- release/**
env:
GIT_USERNAME: ${{ secrets.BOT_GITHUB_USERNAME }}
GIT_EMAIL: ${{ secrets.BOT_GITHUB_EMAIL }}
GIT_PASSWORD: ${{ secrets.BOT_GITHUB_TOKEN }}
DOCKERHUB_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKER_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
MAVEN_USERNAME: ${{ secrets.NEXUS_USERNAME }}
QUAY_PASSWORD: ${{ secrets.QUAY_PASSWORD }}
QUAY_USERNAME: ${{ secrets.QUAY_USERNAME }}
GITHUB_ACTIONS_DEPLOY_TIMEOUT: 60
jobs:
run_ci:
uses: ./.github/workflows/ci.yml
secrets: inherit
push_to_nexus:
name: "Push to Nexus"
runs-on: ubuntu-latest
needs: [run_ci]
if: >
!(failure() || cancelled()) &&
!contains(github.event.head_commit.message, '[no release]') &&
github.event_name != 'pull_request'
steps:
- uses: actions/checkout@v3
with:
persist-credentials: false
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v1.33.0
with:
username: ${{ env.GIT_USERNAME }}
email: ${{ env.GIT_EMAIL }}
global: true
- name: "Release"
timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }}
run: |
bash scripts/ci/verify_release_tag.sh
bash scripts/ci/maven_release.sh
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh
update_downstream:
name: "Update alfresco-enterprise-repo"
runs-on: ubuntu-latest
needs: [push_to_nexus]
if: >
!(failure() || cancelled()) &&
!contains(github.event.head_commit.message, '[no downstream]') &&
github.event_name != 'pull_request'
steps:
- uses: actions/checkout@v3
with:
persist-credentials: false
- uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v1.33.0
- uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v1.33.0
- name: "Init"
run: bash ./scripts/ci/init.sh
- uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v1.33.0
with:
username: ${{ env.GIT_USERNAME }}
email: ${{ env.GIT_EMAIL }}
global: true
- name: "Update downstream"
run: bash ./scripts/ci/update_downstream.sh
env:
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
- name: "Clean Maven cache"
run: bash ./scripts/ci/cleanup_cache.sh

5
.gitignore vendored
View File

@@ -24,17 +24,16 @@ target
*.log.*
# Mobile Tools for Java (J2ME)
.mtj
.tmp/
# Package Files #
*.jar
*.war
*.ear
# maven-shade-plugin for mmt tool
dependency-reduced-pom.xml
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

9
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,9 @@
repos:
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.4.1
hooks:
- id: prettier
types: [java]
additional_dependencies:
- prettier@2.4.1
- prettier-plugin-java@1.4.0

432
.travis.yml Normal file
View File

@@ -0,0 +1,432 @@
---
import:
- source: Alfresco/alfresco-build-tools:.travis.pre-commit.yml@v1.1.5
dist: focal
language: java
jdk: openjdk11
services:
- docker
git:
depth: false
quiet: true
cache:
directories:
- ${HOME}/.m2/repository
# the cache can grow constantly
before_cache: bash scripts/travis/cleanup_cache.sh
branches:
only:
- master
- /release\/.*/
- /feature\/.*/
- /fix\/.*/
env:
global:
- TAS_SCRIPTS=../alfresco-community-repo/packaging/tests/scripts
- TAS_ENVIRONMENT=./packaging/tests/environment
- LOG_WARN="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
stages:
- name: lint
- name: test
if: commit_message !~ /\[skip tests\]/
- name: release
if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
- name: update_downstream
if: commit_message !~ /\[no downstream\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
before_install: travis_retry bash scripts/travis/init.sh
install: travis_retry travis_wait 40 bash scripts/travis/build.sh
jobs:
include:
- name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
stage: test
if: commit_message !~ /\[skip repo\]/
script:
- travis_retry mvn -B test -pl core,data-model
- travis_retry mvn -B test -pl repository -Dtest=AllUnitTestsSuite
- name: "Repository - AppContext01TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext02TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext03TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext04TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext05TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- mkdir -p "${HOME}/tmp"
- cp repository/src/test/resources/realms/alfresco-realm.json "${HOME}/tmp"
- export HOST_IP=$(hostname -I | cut -f1 -d' ')
- docker run -d -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e DB_VENDOR=h2 -p 8999:8080 -e KEYCLOAK_IMPORT=/tmp/alfresco-realm.json -v $HOME/tmp/alfresco-realm.json:/tmp/alfresco-realm.json alfresco/alfresco-identity-service:1.2
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext05TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
- name: "Repository - AppContext06TestSuite"
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext06TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContextExtraTestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - MiscContextTestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl repository -Dtest=MiscContextTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - SearchTestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=SearchTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
- name: "Repository - MariaDB 10.2.18 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.2.18 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MariaDB 10.4 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.4 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MariaDB 10.5 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.5 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MariaDB 10.6 tests"
stage: test
# We run tests on the latest version of MariaDB on pull requests plus the normal master and release branches - ignored on feature branches
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
before_script:
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.6 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
- name: "Repository - MySQL 5.7.23 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:5.7.23 --transaction-isolation='READ-COMMITTED'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - MySQL 8 tests"
stage: test
# We run tests on the latest version of MySQL on pull requests plus the normal master and release branches - ignored on feature branches
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
before_script:
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:8 --transaction-isolation='READ-COMMITTED'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 10.9 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.9 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 11.7 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.7 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 11.12 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.12 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 12.4 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.4 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 12.7 tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.7 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 13.1 tests"
stage: test
# We only run DB tests on the latest version of PostgreSQL on feature branches
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.1 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - PostgreSQL 13.3 tests"
stage: test
# We only run DB tests on the latest version of PostgreSQL on feature branches
if: commit_message !~ /\[skip db\]/ OR commit_message =~ /\[latest db\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - Messaging tests"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl repository -Dtest=CamelRoutesTest,CamelComponentsTest
- name: "Remote-api - AppContext01TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext02TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext03TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext04TestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.3
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContextExtraTestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "REST API TAS tests part1"
stage: test
# TAS tests are generally skipped on feature branches as they will be repeated on the enterprise repo or community packaging builds
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
- name: "REST API TAS tests part2"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
- name: "REST API TAS tests part3"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
- name: "CMIS TAS tests - BROWSER binding"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
- name: "CMIS TAS tests - ATOM binding"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
- name: "CMIS TAS tests - WEBSERVICES binding"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
- name: "Email TAS tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 30 mvn -B install -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
- name: "WebDAV TAS tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 30 mvn -B install -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
- name: "Integration TAS tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
script: travis_wait 30 mvn -B install -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
- name: "Share Services - ShareServicesTestSuite"
stage: test
if: commit_message !~ /\[skip repo\]/
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
script: travis_wait 20 mvn -B test -pl :alfresco-share-services -Dtest=ShareServicesTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "AGS Unit & Integration Tests 01 (PostgreSQL)"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 02 (PostgreSQL)"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 03 (PostgreSQL)"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Unit & Integration Tests 01 (MySQL) "
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 02 (MySQL) "
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Integration Tests 03 (MySQL) "
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
- name: "AGS Community Rest API Tests"
stage: test
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
addons:
artifacts:
paths:
- ./amps/ags/rm-automation/rm-automation-community-rest-api/target/reports/rm-automation-community-rest-api.log
- alfresco.log
- solr.log
target_paths: community/${TRAVIS_BUILD_NUMBER}/${TRAVIS_JOB_NAME}
before_script:
- ${TAS_SCRIPTS}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8080/alfresco"
script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags
after_script: bash amps/ags/travis/scripts/getLogs.sh
- name: "Push to Nexus"
stage: release
before_script: bash scripts/travis/verify_release_tag.sh
script: travis_wait 40 bash scripts/travis/maven_release.sh
- name: "Update alfresco-enterprise-repo"
stage: update_downstream
install: skip
script: bash scripts/travis/update_downstream.sh

View File

@@ -1,6 +1,13 @@
# alfresco-community-repo
[![Build Status](https://github.com/Alfresco/alfresco-community-repo/actions/workflows/master_release.yml/badge.svg?branch=master)](https://github.com/Alfresco/alfresco-community-repo/actions/workflows/master_release.yml)
[![Build Status](https://travis-ci.com/Alfresco/alfresco-community-repo.svg?branch=master)](https://travis-ci.com/Alfresco/alfresco-community-repo)
This project contains the bulk of the [Alfresco Content Services Repository](https://community.alfresco.com/docs/DOC-6385-project-overview-repository) code.
To make the development process simpler, it brings together code historically in `alfresco-core`,
`alfresco-data-madel`, `alfresco-repository`, `alfresco-remote-api` and repository specific
tests and war file creation from `acs-community-packaging`. They exist as sub projects within the Maven Reactor and still
create the same artifacts.
#### Alfresco Core
@@ -9,6 +16,8 @@ Alfresco Core is a library packaged as a jar file which contains the following:
* Canned queries interface and supporting classes
* Generic encryption supporting classes
Version 7 of the library uses Spring 5, Quartz 2.3 and does not have Hibernate dependency.
#### Alfresco Data Model
Data model is a library packaged as a jar file which contains the following:
* Dictionary, Repository and Search Services interfaces
@@ -22,6 +31,14 @@ Repository is a library packaged as a jar file which contains the following:
* Various Service implementations
* Utility classes
Tests are combined into test classes split by test type or Spring application context used in the test, see classes
in _src/test/java/org/alfresco_. All of these classes as well as individual tests can be run by specifying the test
class name and a set of DB connection properties. Check the travis.yml file for docker images that should be started
to provide a suitable test environment. For example:
~~~
mvn clean test -Dtest=SomeRepoTest -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql:alfresco -Ddb.username=alfresco -Ddb.password=alfresco
~~~
#### Alfresco Remote API
Remote API is a library packaged as a jar file which contains the following:
@@ -29,10 +46,13 @@ Remote API is a library packaged as a jar file which contains the following:
* WebScript implementations including [V1 REST APIs](https://community.alfresco.com/community/ecm/blog/2017/05/02/v1-rest-api-10-things-you-should-know)
* [OpenCMIS](https://chemistry.apache.org/java/opencmis.html) implementations
Like the `alfresco-repository` tests are combined in test classes split by test type or Spring application context used
in the test.
#### Artifacts
The artifacts can be obtained by:
* downloading from [Alfresco maven repository](https://artifacts.alfresco.com/nexus/content/groups/public)
* as Maven dependency by adding the dependency to your pom file:
* getting as Maven dependency by adding the dependency to your pom file:
~~~
<dependency>
<groupId>org.alfresco</groupId>
@@ -74,24 +94,40 @@ and Alfresco maven repository:
~~~
The SNAPSHOT versions of the artifact are not published.
## Setting up and building your development environment
See the [Development Tomcat Environment](https://github.com/Alfresco/acs-community-packaging/tree/master/dev/README.md)
page which will show you how to try out your repository changes in a local tomcat instance.
If you wish to use Docker images, take a look at the aliases ending in `D` and the docker-compose files in this
project's test modules.
## Branches
This project has a branch for each ACS release. For example the code in ACS 6.2.1 is a
branch called `releases/6.2.2`. In addition to the original 6.2.2 release it will also contain Hot Fixes
added later. The latest unreleased code is on the `master` branch. There are also `.N` branches, such as
`releases/7.1.N` on which we gather unreleased fixes for future service pack releases. They do not indicate
that one is planned.
For historic reasons the version of artifacts created on each branch do not match the ACS version.
For example artifact in ACS 7.2.0 will be `14.<something>`.
The enterprise projects which extend the `alfresco-community-repo` use the same branch names and leading
artifact version number.
All current source versions are held in github. Historic versions can be found in [Alfresco SVN](https://svn.alfresco.com/repos/alfresco-open-mirror/services/alfresco-core/)
### Contributing guide
Please use [this guide](CONTRIBUTING.md) to make a contribution to the project.
Please use [this guide](CONTRIBUTING.md) to make a contribution to the project.
## Setting up your development environment
Although it is possible to work on individual github projects, we recommend working on the `alfresco-community-repo`
and `acs-community-packaging` in a single Intellij IDEA project. They depend on each other and typically you will
want to make changes to both of them if you are changing the repository code.
~~~
mkdir work
cd work
git clone git@github.com:Alfresco/alfresco-community-repo.git
git clone git@github.com:Alfresco/acs-community-packaging.git
~~~
If you wish to build these projects from the command line, use the following commands.
~~~
cd alfresco-community-repo
mvn clean install -Pbuild-docker-images -DskipTests=true -Dversion.edition=Community
cd ..
cd acs-community-packaging
mvn clean install -Pbuild-docker-images -Dmaven.javadoc.skip=true
cd ..
~~~
In Intellij IDEA, create a new project using the `work` directory as the source.
* File > New Project from Existing Sources > .../work > Maven
## Branches
As multiple projects have been combined, branch names use the ACS version they are targeting.
For example the code used to create the repository in ACS 6.2.1 is a branch called `releases/6.2.1`.
The actual version number of the **repository artifacts** created by `alfresco-community-repo` are however different.
For example `release/6.2.1` artifacts are `7.183.x`. This adds some complexity, but ensures that
version numbers do not go backwards in existing releases. It also provides some level of
independence between the repository and other ACS components.

View File

@@ -7,29 +7,20 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId>
<version>22.2</version>
<version>14.15-SNAPSHOT</version>
</parent>
<modules>
<module>rm-community</module>
<module>rm-automation</module>
</modules>
<profiles>
<profile>
<id>all-tas-tests</id>
<modules>
<module>rm-automation</module>
</modules>
</profile>
</profiles>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<license.update.dryrun>true</license.update.dryrun>
<license.verbose>false</license.verbose>
<license.failOnNotUptodateHeader>true</license.failOnNotUptodateHeader>
</properties>
<build>
@@ -38,20 +29,16 @@
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Keeping illegal-access=permit for Java 11 compatibility, even though it has no effect on JDK 17 -->
<argLine>
--illegal-access=permit
--add-opens=java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<!-- Keeping illegal-access=permit for Java 11 compatibility, even though it has no effect on JDK 17 -->
<configuration>
<argLine>
--illegal-access=permit
--add-opens=java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
@@ -59,49 +46,50 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>1.16</version>
<configuration>
<verbose>${license.verbose}</verbose>
<addSvnKeyWords>false</addSvnKeyWords>
<addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
<!-- header configuration -->
<organizationName>Alfresco Software Limited</organizationName>
<descriptionTemplate>${project.parent.parent.basedir}/license/description.ftl</descriptionTemplate>
<canUpdateCopyright>true</canUpdateCopyright>
<canUpdateDescription>true</canUpdateDescription>
<!-- licence configuration -->
<licenseResolver>file:${project.parent.parent.basedir}/license</licenseResolver>
<!-- dry run options -->
<dryRun>${license.update.dryrun}</dryRun>
<failOnMissingHeader>true</failOnMissingHeader>
<failOnNotUptodateHeader>true</failOnNotUptodateHeader>
<!-- default root -->
<roots>
<root>src</root>
</roots>
<!-- exculsions -->
<excludes>
<exclude>**/package-info.java</exclude>
<exclude>**/*.properties</exclude>
<exclude>**/*.css</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.json</exclude>
<exclude>**/*.txt</exclude>
<exclude>**/*.html</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>first</id>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>none</phase>
<configuration>
<verbose>${license.verbose}</verbose>
<addSvnKeyWords>false</addSvnKeyWords>
<addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
<!-- header configuration -->
<organizationName>Alfresco Software Limited</organizationName>
<descriptionTemplate>${project.parent.parent.basedir}/license/description.ftl</descriptionTemplate>
<canUpdateCopyright>true</canUpdateCopyright>
<canUpdateDescription>true</canUpdateDescription>
<!-- license configuration -->
<licenseResolver>file:${project.parent.parent.basedir}/license</licenseResolver>
<!-- dry run options -->
<dryRun>${license.update.dryrun}</dryRun>
<failOnMissingHeader>true</failOnMissingHeader>
<failOnNotUptodateHeader>${license.failOnNotUptodateHeader}</failOnNotUptodateHeader>
<!-- default root -->
<roots>
<root>src</root>
</roots>
<!-- exclusions -->
<excludes>
<exclude>**/package-info.java</exclude>
<exclude>**/*.properties</exclude>
<exclude>**/*.css</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.json</exclude>
<exclude>**/*.txt</exclude>
<exclude>**/*.html</exclude>
</excludes>
</configuration>
<phase>process-sources</phase>
</execution>
</executions>
</plugin>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId>
<version>22.2</version>
<version>14.15-SNAPSHOT</version>
</parent>
<modules>
@@ -37,16 +37,6 @@
<skipTests>${skip.automationtests}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<executions>
<execution>
<id>third-party-licenses</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -7,25 +7,20 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-automation-community-repo</artifactId>
<version>22.2</version>
<version>14.15-SNAPSHOT</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<executions>
<execution>
<id>first</id>
<phase>process-sources</phase>
<configuration>
<licenseName>alfresco_community</licenseName>
<licenseResolver>file:${project.parent.parent.basedir}/license</licenseResolver>
<descriptionTemplate>${project.parent.parent.basedir}/license/description.ftl</descriptionTemplate>
</configuration>
</execution>
</executions>
<configuration>
<licenseName>alfresco_community</licenseName>
<licenseResolver>file:${project.parent.parent.basedir}/license</licenseResolver>
<descriptionTemplate>${project.parent.parent.basedir}/license/description.ftl</descriptionTemplate>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -42,10 +37,15 @@
</build>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.32</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.alfresco.tas</groupId>
<artifactId>restapi</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>org.alfresco.tas</groupId>
@@ -82,7 +82,7 @@
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.2.13</version>
<version>3.2.12</version>
</dependency>
</dependencies>
</project>

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,12 +26,11 @@
*/
package org.alfresco.rest.core;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import lombok.Getter;
/**
* Extends {@link RestProperties} to be able to change/add properties
*
@@ -40,23 +39,31 @@ import lombok.Getter;
*/
@Getter
@Configuration
@PropertySource(value = {"classpath:default.properties", "classpath:config.properties"})
@PropertySource(value = "classpath:module.properties", ignoreResourceNotFound = true)
@PropertySource(value = "classpath:local.properties", ignoreResourceNotFound = true)
public class RMRestProperties extends RestProperties
{
@Value ("${alfresco.scheme}")
@PropertySource(
value = { "classpath:default.properties", "classpath:config.properties" }
)
@PropertySource(
value = "classpath:module.properties",
ignoreResourceNotFound = true
)
@PropertySource(
value = "classpath:local.properties",
ignoreResourceNotFound = true
)
public class RMRestProperties extends RestProperties {
@Value("${alfresco.scheme}")
private String scheme;
@Value ("${alfresco.server}")
@Value("${alfresco.server}")
private String server;
@Value ("${alfresco.port}")
@Value("${alfresco.port}")
private String port;
@Value ("${rest.rmPath}")
@Value("${rest.rmPath}")
private String restRmPath;
@Value ("${docker.host}")
@Value("${docker.host}")
private String dockerHost;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,7 @@
package org.alfresco.rest.core;
import io.restassured.builder.RequestSpecBuilder;
import lombok.Getter;
import org.alfresco.rest.exception.EmptyJsonResponseException;
import org.alfresco.rest.model.RestErrorModel;
import org.alfresco.rest.model.RestHtmlResponse;
@@ -43,8 +43,6 @@ import org.springframework.context.annotation.Scope;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import lombok.Getter;
/**
* Extends {@link RestWrapper} in order to call GS APIs with our own properties
*
@@ -53,8 +51,8 @@ import lombok.Getter;
*/
@Service
@Scope(value = "prototype")
public class RMRestWrapper
{
public class RMRestWrapper {
/** The class that wraps the ReST APIs from core. */
@Autowired
private RestWrapper restWrapper;
@@ -63,92 +61,77 @@ public class RMRestWrapper
@Getter
private RMRestProperties rmRestProperties;
public GSCoreAPI withGSCoreAPI()
{
public GSCoreAPI withGSCoreAPI() {
return new GSCoreAPI(this, getRmRestProperties());
}
/** Get the core class that wraps the ReST APIs. */
public RestWrapper getRestWrapper()
{
public RestWrapper getRestWrapper() {
return restWrapper;
}
/** Authenticate specific user to Alfresco REST API */
public void authenticateUser(UserModel userModel)
{
public void authenticateUser(UserModel userModel) {
restWrapper.authenticateUser(userModel);
}
/** Get the last error thrown (if any). */
public RestErrorModel assertLastError()
{
public RestErrorModel assertLastError() {
return restWrapper.assertLastError();
}
/** Process responses for a collection of models as {@link RestSiteModelsCollection}. */
public <T> T processModels(Class<T> classz, RestRequest simpleRequest)
{
public <T> T processModels(Class<T> classz, RestRequest simpleRequest) {
return restWrapper.processModels(classz, simpleRequest);
}
/** Process responses for a single model as {@link RestSiteModel}. */
public <T> T processModel(Class<T> classz, RestRequest restRequest)
{
public <T> T processModel(Class<T> classz, RestRequest restRequest) {
return restWrapper.processModel(classz, restRequest);
}
/** Process a response that has no body - basically will need only the status code from it. */
public void processEmptyModel(RestRequest simpleRequest)
{
public void processEmptyModel(RestRequest simpleRequest) {
restWrapper.processEmptyModel(simpleRequest);
}
/** Get the most recently returned status object. */
public StatusModel getLastStatus()
{
public StatusModel getLastStatus() {
return restWrapper.getLastStatus();
}
/** Get the most recently returned status code. */
public String getStatusCode()
{
public String getStatusCode() {
return restWrapper.getStatusCode();
}
/** Set the status code. This should only be needed when calling APIs without using the TAS framework. */
public void setStatusCode(String statusCode)
{
public void setStatusCode(String statusCode) {
restWrapper.setStatusCode(statusCode);
}
/** Assert that a specific status code is returned. */
public void assertStatusCodeIs(HttpStatus statusCode)
{
public void assertStatusCodeIs(HttpStatus statusCode) {
restWrapper.assertStatusCodeIs(statusCode);
}
/** @return A parameters string that you could pass on the request ?param=value */
public String getParameters()
{
public String getParameters() {
return restWrapper.getParameters();
}
/** Create a {@link UserModel} for a new test user. */
public UserModel getTestUser()
{
public UserModel getTestUser() {
return restWrapper.getTestUser();
}
/** Get the Alfresco Core API. */
public RestCoreAPI withCoreAPI()
{
public RestCoreAPI withCoreAPI() {
return restWrapper.withCoreAPI();
}
/** Get the Alfresco Search API. */
public SearchAPI withSearchAPI()
{
public SearchAPI withSearchAPI() {
return restWrapper.withSearchAPI();
}
@@ -163,8 +146,7 @@ public class RMRestWrapper
* restClient.withCoreAPI().usingNode(ContentModel.my()).createNode();
* </pre> This will create the node using the multipart data defined.
*/
public RequestSpecBuilder configureRequestSpec()
{
public RequestSpecBuilder configureRequestSpec() {
return restWrapper.configureRequestSpec();
}
@@ -173,8 +155,7 @@ public class RMRestWrapper
*
* @throws EmptyJsonResponseException If there is no response from the server.
*/
public RestHtmlResponse processHtmlResponse(RestRequest simpleRequest)
{
public RestHtmlResponse processHtmlResponse(RestRequest simpleRequest) {
return restWrapper.processHtmlResponse(simpleRequest);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,7 +29,6 @@ package org.alfresco.rest.core;
import static lombok.AccessLevel.PROTECTED;
import javax.annotation.Resource;
import lombok.Getter;
import lombok.Setter;
import org.alfresco.rest.requests.Node;
@@ -63,10 +62,10 @@ import org.springframework.stereotype.Service;
*/
@Service
@Scope(value = "prototype")
public class RestAPIFactory
{
public class RestAPIFactory {
@Autowired
@Getter (value = PROTECTED)
@Getter(value = PROTECTED)
private DataUserAIS dataUser;
@Resource(name = "RMRestWrapper")
@@ -74,173 +73,149 @@ public class RestAPIFactory
@Setter
private RMRestWrapper rmRestWrapper;
private GSCoreAPI getGSCoreAPI(UserModel userModel)
{
getRmRestWrapper().authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser());
private GSCoreAPI getGSCoreAPI(UserModel userModel) {
getRmRestWrapper()
.authenticateUser(
userModel != null ? userModel : getDataUser().getAdminUser()
);
return getRmRestWrapper().withGSCoreAPI();
}
private RestCoreAPI getCoreAPI(UserModel userModel)
{
getRmRestWrapper().authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser());
private RestCoreAPI getCoreAPI(UserModel userModel) {
getRmRestWrapper()
.authenticateUser(
userModel != null ? userModel : getDataUser().getAdminUser()
);
return getRmRestWrapper().withCoreAPI();
}
public SearchAPI getSearchAPI(UserModel userModel)
{
getRmRestWrapper().authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser());
public SearchAPI getSearchAPI(UserModel userModel) {
getRmRestWrapper()
.authenticateUser(
userModel != null ? userModel : getDataUser().getAdminUser()
);
return getRmRestWrapper().withSearchAPI();
}
/**
* When no user is given the default is set to admin
*/
public SearchAPI getSearchAPI()
{
public SearchAPI getSearchAPI() {
return getSearchAPI(null);
}
public Node getNodeAPI(RepoTestModel model) throws RuntimeException
{
try
{
public Node getNodeAPI(RepoTestModel model) throws RuntimeException {
try {
return getCoreAPI(null).usingNode(model);
}
catch (Exception e)
{
} catch (Exception e) {
throw new RuntimeException("Failed to load nodeAPI.", e);
}
}
public Node getNodeAPI(UserModel userModel, RepoTestModel model) throws RuntimeException
{
try
{
public Node getNodeAPI(UserModel userModel, RepoTestModel model)
throws RuntimeException {
try {
return getCoreAPI(userModel).usingNode(model);
}
catch (Exception e)
{
} catch (Exception e) {
throw new RuntimeException("Failed to load nodeAPI.", e);
}
}
public RMSiteAPI getRMSiteAPI()
{
public RMSiteAPI getRMSiteAPI() {
return getGSCoreAPI(null).usingRMSite();
}
public RMSiteAPI getRMSiteAPI(UserModel userModel)
{
public RMSiteAPI getRMSiteAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingRMSite();
}
public FilePlanAPI getFilePlansAPI()
{
public FilePlanAPI getFilePlansAPI() {
return getGSCoreAPI(null).usingFilePlans();
}
public FilePlanAPI getFilePlansAPI(UserModel userModel)
{
public FilePlanAPI getFilePlansAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingFilePlans();
}
public RecordCategoryAPI getRecordCategoryAPI()
{
public RecordCategoryAPI getRecordCategoryAPI() {
return getGSCoreAPI(null).usingRecordCategory();
}
public RecordCategoryAPI getRecordCategoryAPI(UserModel userModel)
{
public RecordCategoryAPI getRecordCategoryAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingRecordCategory();
}
public RecordFolderAPI getRecordFolderAPI()
{
public RecordFolderAPI getRecordFolderAPI() {
return getGSCoreAPI(null).usingRecordFolder();
}
public RecordFolderAPI getRecordFolderAPI(UserModel userModel)
{
public RecordFolderAPI getRecordFolderAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingRecordFolder();
}
public RecordsAPI getRecordsAPI()
{
public RecordsAPI getRecordsAPI() {
return getGSCoreAPI(null).usingRecords();
}
public RecordsAPI getRecordsAPI(UserModel userModel)
{
public RecordsAPI getRecordsAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingRecords();
}
public FilesAPI getFilesAPI()
{
public FilesAPI getFilesAPI() {
return getGSCoreAPI(null).usingFiles();
}
public FilesAPI getFilesAPI(UserModel userModel)
{
public FilesAPI getFilesAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingFiles();
}
public TransferContainerAPI getTransferContainerAPI()
{
public TransferContainerAPI getTransferContainerAPI() {
return getGSCoreAPI(null).usingTransferContainer();
}
public TransferContainerAPI getTransferContainerAPI(UserModel userModel)
{
public TransferContainerAPI getTransferContainerAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingTransferContainer();
}
public TransferAPI getTransferAPI()
{
public TransferAPI getTransferAPI() {
return getGSCoreAPI(null).usingTransfer();
}
public TransferAPI getTransferAPI(UserModel userModel)
{
public TransferAPI getTransferAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingTransfer();
}
public RMUserAPI getRMUserAPI()
{
public RMUserAPI getRMUserAPI() {
return getGSCoreAPI(null).usingRMUser();
}
public RMUserAPI getRMUserAPI(UserModel userModel)
{
public RMUserAPI getRMUserAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingRMUser();
}
public UnfiledContainerAPI getUnfiledContainersAPI()
{
public UnfiledContainerAPI getUnfiledContainersAPI() {
return getGSCoreAPI(null).usingUnfiledContainers();
}
public UnfiledContainerAPI getUnfiledContainersAPI(UserModel userModel)
{
public UnfiledContainerAPI getUnfiledContainersAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingUnfiledContainers();
}
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI()
{
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI() {
return getGSCoreAPI(null).usingUnfiledRecordFolder();
}
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(UserModel userModel)
{
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(
UserModel userModel
) {
return getGSCoreAPI(userModel).usingUnfiledRecordFolder();
}
public ActionsExecutionAPI getActionsAPI(UserModel userModel)
{
public ActionsExecutionAPI getActionsAPI(UserModel userModel) {
return getGSCoreAPI(userModel).usingActionsExecutionsAPI();
}
public ActionsExecutionAPI getActionsAPI()
{
public ActionsExecutionAPI getActionsAPI() {
return getGSCoreAPI(null).usingActionsExecutionsAPI();
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,6 @@
package org.alfresco.rest.core.search;
import java.util.List;
import org.alfresco.rest.search.Pagination;
import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.SearchRequest;
@@ -35,23 +34,22 @@ import org.alfresco.rest.search.SearchRequest;
/**
* Builder class for creating a search api request
*/
public class SearchRequestBuilder extends SearchRequest
{
public class SearchRequestBuilder extends SearchRequest {
/**
* Constructor for Search API Request
*/
public SearchRequestBuilder()
{
public SearchRequestBuilder() {
new SearchRequest();
}
/**
* Set the sql statement for the SearchRequest
*
* @param query sql statement
* @return search request
*/
public SearchRequestBuilder setQueryBuilder(RestRequestQueryModel query)
{
public SearchRequestBuilder setQueryBuilder(RestRequestQueryModel query) {
super.setQuery(query);
return this;
}
@@ -62,8 +60,7 @@ public class SearchRequestBuilder extends SearchRequest
* @param paging pagination requested
* @return search request
*/
public SearchRequestBuilder setPagingBuilder(Pagination paging)
{
public SearchRequestBuilder setPagingBuilder(Pagination paging) {
super.setPaging(paging);
return this;
}
@@ -71,8 +68,7 @@ public class SearchRequestBuilder extends SearchRequest
/**
* Set the pagination properties
*/
public Pagination setPagination(Integer maxItems, Integer skipCount)
{
public Pagination setPagination(Integer maxItems, Integer skipCount) {
Pagination pagination = new Pagination();
pagination.setMaxItems(maxItems);
pagination.setSkipCount(skipCount);
@@ -85,10 +81,8 @@ public class SearchRequestBuilder extends SearchRequest
* @param fields requested fields
* @return search request
*/
public SearchRequestBuilder setFieldsBuilder(List<String> fields)
{
public SearchRequestBuilder setFieldsBuilder(List<String> fields) {
super.setFields(fields);
return this;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,13 +26,12 @@
*/
package org.alfresco.rest.core.v0;
import javax.json.Json;
import javax.json.JsonReader;
import java.io.IOException;
import java.io.InputStream;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import javax.json.Json;
import javax.json.JsonReader;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
@@ -48,19 +47,20 @@ import org.slf4j.LoggerFactory;
* @author Tom Page
* @since 2.6
*/
public class APIUtils
{
public class APIUtils {
/** Logger for this class. */
private static final Logger LOGGER = LoggerFactory.getLogger(APIUtils.class);
private static final Logger LOGGER = LoggerFactory.getLogger(
APIUtils.class
);
/** The ISO instant formatter that formats or parses an instant in UTC, such as '2011-12-03T10:15:305Z'
* similar with {@link DateTimeFormatter#ISO_INSTANT}, but with only 3 nanoseconds*/
public static final DateTimeFormatter ISO_INSTANT_FORMATTER =
new DateTimeFormatterBuilder().appendInstant(3).toFormatter();
public static final DateTimeFormatter ISO_INSTANT_FORMATTER = new DateTimeFormatterBuilder()
.appendInstant(3)
.toFormatter();
/** Private constructor for helper class. */
private APIUtils()
{
}
private APIUtils() {}
/**
* Extract the body of a HTTP response as a JSON object.
@@ -68,16 +68,21 @@ public class APIUtils
* @param httpResponse The HTTP response.
* @return A JSON representation of the object.
*/
public static JSONObject convertHTTPResponseToJSON(HttpResponse httpResponse)
{
public static JSONObject convertHTTPResponseToJSON(
HttpResponse httpResponse
) {
String source = null;
try
{
source = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8");
}
catch (IOException e)
{
throw new IllegalArgumentException("Could not extract JSON from HTTP response.", e);
try {
source =
IOUtils.toString(
httpResponse.getEntity().getContent(),
"UTF-8"
);
} catch (IOException e) {
throw new IllegalArgumentException(
"Could not extract JSON from HTTP response.",
e
);
}
LOGGER.info("Response body:\n{}", source);
return new JSONObject(source);
@@ -89,30 +94,25 @@ public class APIUtils
* @param httpResponse http response
* @return error message from the http response
*/
public static String extractErrorMessageFromHttpResponse(HttpResponse httpResponse)
{
public static String extractErrorMessageFromHttpResponse(
HttpResponse httpResponse
) {
final HttpEntity entity = httpResponse.getEntity();
JsonReader reader = null;
try
{
try {
final InputStream responseStream = entity.getContent();
reader = Json.createReader(responseStream);
return reader.readObject().getString("message");
}
catch (JSONException error)
{
LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error);
}
catch (ParseException | IOException error)
{
} catch (JSONException error) {
LOGGER.error(
"Converting message body to JSON failed. Body: {}",
httpResponse,
error
);
} catch (ParseException | IOException error) {
LOGGER.error("Parsing message body failed.", error);
}
finally
{
if (reader != null)
{
} finally {
if (reader != null) {
reader.close();
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -38,7 +38,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.dataprep.AlfrescoHttpClient;
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
import org.alfresco.dataprep.ContentService;
@@ -70,20 +69,25 @@ import org.springframework.beans.factory.annotation.Autowired;
* @author Kristijan Conkas
* @since 2.5
*/
public abstract class BaseAPI
{
public abstract class BaseAPI {
// logger
protected static final Logger LOGGER = LoggerFactory.getLogger(BaseAPI.class);
protected static final Logger LOGGER = LoggerFactory.getLogger(
BaseAPI.class
);
/** exception key in JSON response body */
private static final String EXCEPTION_KEY = "exception";
private static final String MESSAGE_KEY = "message";
public static final String NODE_PREFIX = "workspace/SpacesStore/";
protected static final String UPDATE_METADATA_API = "{0}node/{1}/formprocessor";
protected static final String UPDATE_METADATA_API =
"{0}node/{1}/formprocessor";
protected static final String ACTIONS_API = "{0}actionQueue";
protected static final String RM_ACTIONS_API = "{0}rma/actions/ExecutionQueue";
protected static final String RM_ACTIONS_API =
"{0}rma/actions/ExecutionQueue";
public static final String RM_SITE_ID = "rm";
protected static final String SHARE_ACTION_API = "{0}internal/shared/share/workspace/SpacesStore/{1}";
protected static final String SHARE_ACTION_API =
"{0}internal/shared/share/workspace/SpacesStore/{1}";
private static final String SLINGSHOT_PREFIX = "alfresco/s/slingshot/";
@Autowired
@@ -92,7 +96,8 @@ public abstract class BaseAPI
@Autowired
protected ContentService contentService;
public static final String NODE_REF_WORKSPACE_SPACES_STORE = "workspace://SpacesStore/";
public static final String NODE_REF_WORKSPACE_SPACES_STORE =
"workspace://SpacesStore/";
private static final String FILE_PLAN_PATH = "/Sites/rm/documentLibrary";
/**
@@ -102,20 +107,18 @@ public abstract class BaseAPI
* @return list of specified property values in result
* @throws RuntimeException for malformed response
*/
protected List<String> getPropertyValues(JSONObject result, String propertyName)
{
protected List<String> getPropertyValues(
JSONObject result,
String propertyName
) {
ArrayList<String> results = new ArrayList<>();
try
{
try {
JSONArray items = result.getJSONArray("items");
for (int i = 0; i < items.length(); i++)
{
for (int i = 0; i < items.length(); i++) {
results.add(items.getJSONObject(i).getString(propertyName));
}
}
catch (JSONException error)
{
} catch (JSONException error) {
throw new RuntimeException("Unable to parse result", error);
}
@@ -124,35 +127,36 @@ public abstract class BaseAPI
/**
* Helper method to extract the property value for the given nodeRef and property name
*
*
* @param result
* @param nodeRef
* @param propertyName
* @return
*/
protected String getPropertyValue(JSONObject result, String nodeRef, String propertyName)
{
protected String getPropertyValue(
JSONObject result,
String nodeRef,
String propertyName
) {
String propertyValue = "";
try
{
try {
JSONArray items = result.getJSONArray("items");
for (int i = 0; i < items.length(); i++)
{
for (int i = 0; i < items.length(); i++) {
JSONObject item = items.getJSONObject(i);
if(nodeRef.equals(item.getString("nodeRef")))
{
propertyValue = item.getJSONObject("properties").getString(propertyName);
if (nodeRef.equals(item.getString("nodeRef"))) {
propertyValue =
item
.getJSONObject("properties")
.getString(propertyName);
}
}
}
catch (JSONException error)
{
} catch (JSONException error) {
throw new RuntimeException("Unable to parse result", error);
}
return propertyValue;
}
/**
* Helper method to extract property values from request result and put them in map as a list that corresponds to a unique property value.
*
@@ -160,26 +164,32 @@ public abstract class BaseAPI
* @return a map containing information about multiple properties values that correspond to a unique one
* @throws RuntimeException for malformed response
*/
protected Map<String, List<String>> getPropertyValuesByUniquePropertyValue(JSONObject requestResult, String uniqueProperty, List<String> otherProperties)
{
protected Map<String, List<String>> getPropertyValuesByUniquePropertyValue(
JSONObject requestResult,
String uniqueProperty,
List<String> otherProperties
) {
Map<String, List<String>> valuesByUniqueProperty = new HashMap<>();
try
{
try {
JSONArray items = requestResult.getJSONArray("items");
for (int i = 0; i < items.length(); i++)
{
for (int i = 0; i < items.length(); i++) {
List<String> otherPropertiesValues = new ArrayList<>();
for (int j = 0; j < otherProperties.size(); j++)
{
otherPropertiesValues.add(items.getJSONObject(i).get(otherProperties.get(j)).toString());
for (int j = 0; j < otherProperties.size(); j++) {
otherPropertiesValues.add(
items
.getJSONObject(i)
.get(otherProperties.get(j))
.toString()
);
}
valuesByUniqueProperty.put(items.getJSONObject(i).getString(uniqueProperty), otherPropertiesValues);
valuesByUniqueProperty.put(
items.getJSONObject(i).getString(uniqueProperty),
otherPropertiesValues
);
}
}
catch (JSONException error)
{
} catch (JSONException error) {
throw new RuntimeException("Unable to parse result", error);
}
@@ -196,9 +206,16 @@ public abstract class BaseAPI
* when trying to get File Plan, the path would be ""
* @return the container nodeRef
*/
public String getItemNodeRef(String username, String password, String path)
{
return contentService.getNodeRefByPath(username, password, FILE_PLAN_PATH + path);
public String getItemNodeRef(
String username,
String password,
String path
) {
return contentService.getNodeRefByPath(
username,
password,
FILE_PLAN_PATH + path
);
}
/**
@@ -209,14 +226,18 @@ public abstract class BaseAPI
* @param path the object path
* @return the object in case it exists, null if its does not exist
*/
protected CmisObject getObjectByPath(String username, String password, String path)
{
protected CmisObject getObjectByPath(
String username,
String password,
String path
) {
CmisObject object;
try
{
object = contentService.getCMISSession(username, password).getObjectByPath(path);
} catch (CmisObjectNotFoundException notFoundError)
{
try {
object =
contentService
.getCMISSession(username, password)
.getObjectByPath(path);
} catch (CmisObjectNotFoundException notFoundError) {
return null;
}
return object;
@@ -230,23 +251,25 @@ public abstract class BaseAPI
* @param parameters if the request has parameters
* @return result object (see API reference for more details), null for any errors
*/
protected JSONObject facetedRequest(String username, String password, List<NameValuePair> parameters, String requestURI)
{
protected JSONObject facetedRequest(
String username,
String password,
List<NameValuePair> parameters,
String requestURI
) {
String requestURL;
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
if (parameters == null || parameters.isEmpty())
{
requestURL = MessageFormat.format(
requestURI,
client.getAlfrescoUrl());
}
else
{
requestURL = MessageFormat.format(
if (parameters == null || parameters.isEmpty()) {
requestURL =
MessageFormat.format(requestURI, client.getAlfrescoUrl());
} else {
requestURL =
MessageFormat.format(
requestURI,
client.getAlfrescoUrl(),
URLEncodedUtils.format(parameters, "UTF-8"));
URLEncodedUtils.format(parameters, "UTF-8")
);
}
LOGGER.info("On GET {}, received following response: ", requestURL);
client.close();
@@ -260,24 +283,29 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected JSONObject doGetRequest(String adminUser,
protected JSONObject doGetRequest(
String adminUser,
String adminPassword,
String urlTemplate,
String ... urlTemplateParams)
{
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
String requestUrl = MessageFormat.format(
urlTemplate,
client.getApiUrl(),
urlTemplateParams);
urlTemplateParams
);
client.close();
try
{
return doRequest(HttpGet.class, requestUrl, adminUser, adminPassword, null);
}
catch (InstantiationException | IllegalAccessException error)
{
try {
return doRequest(
HttpGet.class,
requestUrl,
adminUser,
adminPassword,
null
);
} catch (InstantiationException | IllegalAccessException error) {
throw new IllegalArgumentException("doGetRequest failed", error);
}
}
@@ -289,24 +317,29 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected JSONObject doDeleteRequest(String adminUser,
protected JSONObject doDeleteRequest(
String adminUser,
String adminPassword,
String urlTemplate,
String ... urlTemplateParams)
{
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
String requestUrl = MessageFormat.format(
urlTemplate,
client.getApiUrl(),
urlTemplateParams);
urlTemplateParams
);
client.close();
try
{
return doRequest(HttpDelete.class, requestUrl, adminUser, adminPassword, null);
}
catch (InstantiationException | IllegalAccessException error)
{
try {
return doRequest(
HttpDelete.class,
requestUrl,
adminUser,
adminPassword,
null
);
} catch (InstantiationException | IllegalAccessException error) {
throw new IllegalArgumentException("doDeleteRequest failed", error);
}
}
@@ -319,25 +352,30 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected JSONObject doPutRequest(String adminUser,
protected JSONObject doPutRequest(
String adminUser,
String adminPassword,
JSONObject requestParams,
String urlTemplate,
String ... urlTemplateParams)
{
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
String requestUrl = MessageFormat.format(
urlTemplate,
client.getApiUrl(),
urlTemplateParams);
urlTemplateParams
);
client.close();
try
{
return doRequest(HttpPut.class, requestUrl, adminUser, adminPassword, requestParams);
}
catch (InstantiationException | IllegalAccessException error)
{
try {
return doRequest(
HttpPut.class,
requestUrl,
adminUser,
adminPassword,
requestParams
);
} catch (InstantiationException | IllegalAccessException error) {
throw new IllegalArgumentException("doPutRequest failed", error);
}
}
@@ -352,15 +390,24 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected HttpResponse doPutJsonRequest(String adminUser,
String adminPassword,
int expectedStatusCode,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams)
{
protected HttpResponse doPutJsonRequest(
String adminUser,
String adminPassword,
int expectedStatusCode,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
return doPutJsonRequest(adminUser, adminPassword, expectedStatusCode, client.getApiUrl(), requestParams, urlTemplate, urlTemplateParams);
return doPutJsonRequest(
adminUser,
adminPassword,
expectedStatusCode,
client.getApiUrl(),
requestParams,
urlTemplate,
urlTemplateParams
);
}
/**
@@ -375,23 +422,35 @@ public abstract class BaseAPI
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
* @throws AssertionError if the returned status code is not as expected.
*/
private HttpResponse doPutJsonRequest(String adminUser,
String adminPassword,
int expectedStatusCode,
String urlStart,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams)
{
String requestUrl = formatRequestUrl(urlStart, urlTemplate, urlTemplateParams);
try
{
HttpResponse httpResponse = doRequestJson(HttpPut.class, requestUrl, adminUser, adminPassword, requestParams);
assertEquals("PUT request to " + requestUrl + " was not successful.", expectedStatusCode, httpResponse.getStatusLine().getStatusCode());
private HttpResponse doPutJsonRequest(
String adminUser,
String adminPassword,
int expectedStatusCode,
String urlStart,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams
) {
String requestUrl = formatRequestUrl(
urlStart,
urlTemplate,
urlTemplateParams
);
try {
HttpResponse httpResponse = doRequestJson(
HttpPut.class,
requestUrl,
adminUser,
adminPassword,
requestParams
);
assertEquals(
"PUT request to " + requestUrl + " was not successful.",
expectedStatusCode,
httpResponse.getStatusLine().getStatusCode()
);
return httpResponse;
}
catch (InstantiationException | IllegalAccessException error)
{
} catch (InstantiationException | IllegalAccessException error) {
throw new IllegalArgumentException("doPutRequest failed", error);
}
}
@@ -404,12 +463,18 @@ public abstract class BaseAPI
* @param urlTemplateParams Any parameters that need to be filled into the URL template.
* @return The resultant URL.
*/
private String formatRequestUrl(String urlStart, String urlTemplate, String[] urlTemplateParams)
{
if (urlTemplateParams.length == 1)
{
private String formatRequestUrl(
String urlStart,
String urlTemplate,
String[] urlTemplateParams
) {
if (urlTemplateParams.length == 1) {
// The format method needs some help to know not to use the whole array object.
return MessageFormat.format(urlTemplate, urlStart, urlTemplateParams[0]);
return MessageFormat.format(
urlTemplate,
urlStart,
urlTemplateParams[0]
);
}
return MessageFormat.format(urlTemplate, urlStart, urlTemplateParams);
}
@@ -422,25 +487,30 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected JSONObject doPostRequest(String adminUser,
protected JSONObject doPostRequest(
String adminUser,
String adminPassword,
JSONObject requestParams,
String urlTemplate,
String ... urlTemplateParams)
{
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
String requestUrl = MessageFormat.format(
urlTemplate,
client.getApiUrl(),
urlTemplateParams);
urlTemplateParams
);
client.close();
try
{
return doRequest(HttpPost.class, requestUrl, adminUser, adminPassword, requestParams);
}
catch (InstantiationException | IllegalAccessException error)
{
try {
return doRequest(
HttpPost.class,
requestUrl,
adminUser,
adminPassword,
requestParams
);
} catch (InstantiationException | IllegalAccessException error) {
throw new IllegalArgumentException("doPostRequest failed", error);
}
}
@@ -455,15 +525,24 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected HttpResponse doPostJsonRequest(String adminUser,
String adminPassword,
int expectedStatusCode,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams)
{
protected HttpResponse doPostJsonRequest(
String adminUser,
String adminPassword,
int expectedStatusCode,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
return doPostJsonRequest(adminUser, adminPassword, expectedStatusCode, client.getApiUrl(), requestParams, urlTemplate, urlTemplateParams);
return doPostJsonRequest(
adminUser,
adminPassword,
expectedStatusCode,
client.getApiUrl(),
requestParams,
urlTemplate,
urlTemplateParams
);
}
/**
@@ -476,15 +555,24 @@ public abstract class BaseAPI
* @param urlTemplate request URL template
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
*/
protected HttpResponse doSlingshotPostJsonRequest(String adminUser,
String adminPassword,
int expectedStatusCode,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams)
{
protected HttpResponse doSlingshotPostJsonRequest(
String adminUser,
String adminPassword,
int expectedStatusCode,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams
) {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
return doPostJsonRequest(adminUser, adminPassword, expectedStatusCode, client.getAlfrescoUrl() + SLINGSHOT_PREFIX, requestParams, urlTemplate, urlTemplateParams);
return doPostJsonRequest(
adminUser,
adminPassword,
expectedStatusCode,
client.getAlfrescoUrl() + SLINGSHOT_PREFIX,
requestParams,
urlTemplate,
urlTemplateParams
);
}
/**
@@ -499,24 +587,32 @@ public abstract class BaseAPI
* @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i>
* @throws AssertionError if the returned status code is not as expected.
*/
private HttpResponse doPostJsonRequest(String adminUser,
String adminPassword,
int expectedStatusCode,
String urlStart,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams)
{
private HttpResponse doPostJsonRequest(
String adminUser,
String adminPassword,
int expectedStatusCode,
String urlStart,
JSONObject requestParams,
String urlTemplate,
String... urlTemplateParams
) {
String requestUrl;
requestUrl = formatRequestUrl(urlStart, urlTemplate, urlTemplateParams);
try
{
HttpResponse httpResponse = doRequestJson(HttpPost.class, requestUrl, adminUser, adminPassword, requestParams);
assertEquals("POST request to " + requestUrl + " was not successful.", expectedStatusCode, httpResponse.getStatusLine().getStatusCode());
try {
HttpResponse httpResponse = doRequestJson(
HttpPost.class,
requestUrl,
adminUser,
adminPassword,
requestParams
);
assertEquals(
"POST request to " + requestUrl + " was not successful.",
expectedStatusCode,
httpResponse.getStatusLine().getStatusCode()
);
return httpResponse;
}
catch (InstantiationException | IllegalAccessException error)
{
} catch (InstantiationException | IllegalAccessException error) {
throw new IllegalArgumentException("doPostRequest failed", error);
}
}
@@ -537,84 +633,95 @@ public abstract class BaseAPI
String requestUrl,
String adminUser,
String adminPassword,
JSONObject requestParams) throws InstantiationException, IllegalAccessException
{
JSONObject requestParams
) throws InstantiationException, IllegalAccessException {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
T request = requestType.newInstance();
JSONObject responseBody = null;
JSONObject returnValues = null;
try
{
try {
request.setURI(new URI(requestUrl));
if (requestParams != null && request instanceof HttpEntityEnclosingRequestBase)
{
((HttpEntityEnclosingRequestBase) request).setEntity(new StringEntity(requestParams.toString()));
if (
requestParams != null &&
request instanceof HttpEntityEnclosingRequestBase
) {
((HttpEntityEnclosingRequestBase) request).setEntity(
new StringEntity(requestParams.toString())
);
}
LOGGER.info("Sending {} request to {}", requestType.getSimpleName(), requestUrl);
LOGGER.info(
"Sending {} request to {}",
requestType.getSimpleName(),
requestUrl
);
LOGGER.info("Request body: {}", requestParams);
HttpResponse response = client.execute(adminUser, adminPassword, request);
HttpResponse response = client.execute(
adminUser,
adminPassword,
request
);
LOGGER.info("Response: {}", response.getStatusLine());
try
{
responseBody = new JSONObject(EntityUtils.toString(response.getEntity()));
}
catch (JSONException error)
{
LOGGER.error("Converting message body to JSON failed. Body: {}", responseBody, error);
}
catch (ParseException | IOException error)
{
try {
responseBody =
new JSONObject(EntityUtils.toString(response.getEntity()));
} catch (JSONException error) {
LOGGER.error(
"Converting message body to JSON failed. Body: {}",
responseBody,
error
);
} catch (ParseException | IOException error) {
LOGGER.error("Parsing message body failed.", error);
}
switch (response.getStatusLine().getStatusCode())
{
switch (response.getStatusLine().getStatusCode()) {
case HttpStatus.SC_OK:
case HttpStatus.SC_CREATED:
// request successful
if (responseBody != null)
{
if (responseBody != null) {
returnValues = responseBody;
}
break;
case HttpStatus.SC_INTERNAL_SERVER_ERROR:
if (responseBody != null && responseBody.has(EXCEPTION_KEY))
{
LOGGER.error("Request failed with error message: {}", responseBody.getString(MESSAGE_KEY));
if (
responseBody != null && responseBody.has(EXCEPTION_KEY)
) {
LOGGER.error(
"Request failed with error message: {}",
responseBody.getString(MESSAGE_KEY)
);
returnValues = responseBody;
}
break;
case HttpStatus.SC_BAD_REQUEST:
case HttpStatus.SC_UNPROCESSABLE_ENTITY:
if (responseBody != null && responseBody.has(EXCEPTION_KEY))
{
LOGGER.error("Request failed: {}", responseBody.getString(EXCEPTION_KEY));
if (
responseBody != null && responseBody.has(EXCEPTION_KEY)
) {
LOGGER.error(
"Request failed: {}",
responseBody.getString(EXCEPTION_KEY)
);
returnValues = responseBody;
}
break;
default:
LOGGER.error("Request returned unexpected HTTP status {}", response.getStatusLine().getStatusCode());
LOGGER.error(
"Request returned unexpected HTTP status {}",
response.getStatusLine().getStatusCode()
);
break;
}
}
catch (JSONException error)
{
} catch (JSONException error) {
LOGGER.error("Unable to extract response parameter", error);
}
catch (UnsupportedEncodingException | URISyntaxException error1)
{
} catch (UnsupportedEncodingException | URISyntaxException error1) {
LOGGER.error("Unable to construct request", error1);
}
finally
{
if (request != null)
{
} finally {
if (request != null) {
request.releaseConnection();
}
client.close();
@@ -624,39 +731,45 @@ public abstract class BaseAPI
}
private <T extends HttpRequestBase> HttpResponse doRequestJson(
Class<T> requestType,
String requestUrl,
String adminUser,
String adminPassword,
JSONObject requestParams) throws InstantiationException, IllegalAccessException
{
Class<T> requestType,
String requestUrl,
String adminUser,
String adminPassword,
JSONObject requestParams
) throws InstantiationException, IllegalAccessException {
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
T request = requestType.newInstance();
try
{
try {
request.setURI(new URI(requestUrl));
request.setHeader("Content-Type", "application/json");
if (requestParams != null && request instanceof HttpEntityEnclosingRequestBase)
{
((HttpEntityEnclosingRequestBase) request).setEntity(new StringEntity(requestParams.toString()));
if (
requestParams != null &&
request instanceof HttpEntityEnclosingRequestBase
) {
((HttpEntityEnclosingRequestBase) request).setEntity(
new StringEntity(requestParams.toString())
);
}
LOGGER.info("Sending {} request to {}", requestType.getSimpleName(), requestUrl);
LOGGER.info(
"Sending {} request to {}",
requestType.getSimpleName(),
requestUrl
);
LOGGER.info("Request body: {}", requestParams);
HttpResponse httpResponse = client.execute(adminUser, adminPassword, request);
HttpResponse httpResponse = client.execute(
adminUser,
adminPassword,
request
);
LOGGER.info("Response: {}", httpResponse.getStatusLine());
return httpResponse;
}
catch (UnsupportedEncodingException | URISyntaxException error1)
{
} catch (UnsupportedEncodingException | URISyntaxException error1) {
LOGGER.error("Unable to construct request", error1);
}
finally
{
if (request != null)
{
} finally {
if (request != null) {
request.releaseConnection();
}
client.close();
@@ -669,8 +782,7 @@ public abstract class BaseAPI
* Used to set RM items properties
* including records, categories and folders
*/
public enum RMProperty
{
public enum RMProperty {
NAME,
TITLE,
CONTENT,
@@ -684,11 +796,10 @@ public abstract class BaseAPI
FILE,
ORIGINATOR,
ORIGINATING_ORGANIZATION,
PUBLICATION_DATE
PUBLICATION_DATE,
}
public enum RETENTION_SCHEDULE
{
public enum RETENTION_SCHEDULE {
NAME,
DESCRIPTION,
RETENTION_AUTHORITY,
@@ -699,14 +810,13 @@ public abstract class BaseAPI
RETENTION_GHOST,
RETENTION_ELIGIBLE_FIRST_EVENT,
RETENTION_EVENTS,
COMBINE_DISPOSITION_STEP_CONDITIONS
COMBINE_DISPOSITION_STEP_CONDITIONS,
}
/**
* Used to execute rm actions on a node
*/
public enum RM_ACTIONS
{
public enum RM_ACTIONS {
EDIT_DISPOSITION_DATE("editDispositionActionAsOfDate"),
END_RETENTION("retain"),
CUT_OFF("cutoff"),
@@ -715,21 +825,19 @@ public abstract class BaseAPI
COMPLETE_EVENT("completeEvent"),
UNDO_EVENT("undoEvent"),
DESTROY("destroy");
String action;
private RM_ACTIONS(String action)
{
private RM_ACTIONS(String action) {
this.action = action;
}
public String getAction()
{
public String getAction() {
return action;
}
}
public enum PermissionType
{
public enum PermissionType {
SET_READ,
REMOVE_READ,
SET_READ_AND_FILE,
@@ -743,11 +851,12 @@ public abstract class BaseAPI
* @param property to get value for
* @return the property value
*/
public <K extends Enum<?>> String getPropertyValue(Map<K, String> properties, Enum<?> property)
{
public <K extends Enum<?>> String getPropertyValue(
Map<K, String> properties,
Enum<?> property
) {
String value = properties.get(property);
if (value == null)
{
if (value == null) {
return "";
}
return value;
@@ -762,12 +871,15 @@ public abstract class BaseAPI
* @param property the property in the property map to check value for
* @return the json object used in request with the property with its value added if that is not null or empty
*/
protected <K extends Enum<?>> JSONObject addPropertyToRequest(JSONObject requestParams, String propertyRequestValue, Map<K, String> itemProperties, Enum<?> property) throws JSONException
{
protected <K extends Enum<?>> JSONObject addPropertyToRequest(
JSONObject requestParams,
String propertyRequestValue,
Map<K, String> itemProperties,
Enum<?> property
) throws JSONException {
String propertyValue = getPropertyValue(itemProperties, property);
if (!propertyValue.equals(""))
{
if (!propertyValue.equals("")) {
requestParams.put(propertyRequestValue, propertyValue);
}
return requestParams;
@@ -783,14 +895,23 @@ public abstract class BaseAPI
* in case of a record /categoryName/folderName/recordName
* @throws AssertionError if the delete was not successful.
*/
protected void deleteItem(String username, String password, String itemPath)
{
CmisObject container = getObjectByPath(username, password, FILE_PLAN_PATH + itemPath);
if (container != null)
{
protected void deleteItem(
String username,
String password,
String itemPath
) {
CmisObject container = getObjectByPath(
username,
password,
FILE_PLAN_PATH + itemPath
);
if (container != null) {
container.delete();
}
assertNull("Could not delete " + itemPath, getObjectByPath(username, password, itemPath));
assertNull(
"Could not delete " + itemPath,
getObjectByPath(username, password, itemPath)
);
}
/**
@@ -798,8 +919,7 @@ public abstract class BaseAPI
*
* @return node ref spaces store
*/
public static String getNodeRefSpacesStore()
{
public static String getNodeRefSpacesStore() {
return NODE_REF_WORKSPACE_SPACES_STORE;
}
@@ -808,8 +928,7 @@ public abstract class BaseAPI
*
* @return the File Plan path
*/
public static String getFilePlanPath()
{
public static String getFilePlanPath() {
return FILE_PLAN_PATH;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,24 +26,24 @@
*/
package org.alfresco.rest.core.v0;
public enum RMEvents
{
public enum RMEvents {
ABOLISHED("abolished"),
ALL_ALLOWANCES_GRANTED_ARE_TERMINATED("all_allowances_granted_are_terminated"),
ALL_ALLOWANCES_GRANTED_ARE_TERMINATED(
"all_allowances_granted_are_terminated"
),
CASE_CLOSED("case_closed"),
DECLASSIFICATION_REVIEW("declassification_review"),
OBSOLETE("obsolete"),
NO_LONGER_NEEDED("no_longer_needed"),
STUDY_COMPLETE("study_complete");
private String eventName;
RMEvents(String eventName)
{
RMEvents(String eventName) {
this.eventName = eventName;
}
public String getEventName()
{
public String getEventName() {
return eventName;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,11 +26,9 @@
*/
package org.alfresco.rest.rm.community.model.audit;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -47,43 +45,42 @@ import org.alfresco.utility.model.TestModel;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class AuditEntry extends TestModel
{
@JsonProperty (required = true)
@JsonIgnoreProperties(ignoreUnknown = true)
public class AuditEntry extends TestModel {
@JsonProperty(required = true)
private String nodeName;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<Object> changedValues;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String identifier;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String path;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeRef;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String fullName;
@JsonProperty
private String createPerson;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String userName;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String userRole;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String event;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String timestamp;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -33,8 +33,7 @@ package org.alfresco.rest.rm.community.model.audit;
* @since 2.7
*
*/
public enum AuditEvents
{
public enum AuditEvents {
CREATE_PERSON("Create Person", "Create User"),
DELETE_PERSON("Delete Person", "Delete User"),
CREATE_USER_GROUP("Create User Group", "Create User Group"),
@@ -54,8 +53,7 @@ public enum AuditEvents
/** display name for the event audited */
public final String eventDisplayName;
AuditEvents(String event, String displayName)
{
AuditEvents(String event, String displayName) {
this.event = event;
this.eventDisplayName = displayName;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,10 +26,8 @@
*/
package org.alfresco.rest.rm.community.model.common;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -45,17 +43,17 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdNamePair
{
@JsonProperty (required = true)
public class IdNamePair {
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,6 @@
package org.alfresco.rest.rm.community.model.common;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -44,8 +43,5 @@ import org.alfresco.utility.model.TestModel;
@EqualsAndHashCode(callSuper = true)
//@NoArgsConstructor
//@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class Owner extends TestModel
{
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Owner extends TestModel {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,17 +26,14 @@
*/
package org.alfresco.rest.rm.community.model.common;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.utility.model.TestModel;
/**
* POJO for path parameter
@@ -49,14 +46,14 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class Path extends TestModel
{
@JsonProperty (required = true)
public class Path extends TestModel {
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private Boolean isComplete;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<IdNamePair> elements;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,6 @@
package org.alfresco.rest.rm.community.model.common;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -43,11 +42,11 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ReviewPeriod
{
@JsonProperty (required = true)
public class ReviewPeriod {
@JsonProperty(required = true)
private String periodType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String expression;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,12 +32,12 @@ package org.alfresco.rest.rm.community.model.custom;
* @author Rodica Sutu
* @since 2.6
*/
public enum CustomDefinitions
{
public enum CustomDefinitions {
ATTACHMENT("Attachment"),
MESSAGE("Message"),
NEXT_VERSION("Next Version"),
RENDITION("Rendition");
/**
* The name of custom reference.
*/
@@ -46,8 +46,7 @@ public enum CustomDefinitions
/**
* Private constructor.
*/
CustomDefinitions(String definition)
{
CustomDefinitions(String definition) {
this.definition = definition;
}
@@ -56,8 +55,7 @@ public enum CustomDefinitions
*
* @return The value of custom reference.
*/
public String getDefinition()
{
public String getDefinition() {
return definition;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,19 +26,16 @@
*/
package org.alfresco.rest.rm.community.model.fileplan;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
/**
* POJO for file plan
@@ -52,40 +49,40 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class FilePlan extends TestModel
{
public class FilePlan extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private FilePlanProperties properties;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -34,14 +34,12 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.utility.model.TestModel;
/**
* POJO for file plan properties
@@ -54,29 +52,29 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class FilePlanProperties extends TestModel
{
public class FilePlanProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_COMPONENT_ID)
@JsonProperty(required = true, value = PROPERTIES_COMPONENT_ID)
private String componentd;
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
@JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
/************************/
/** Optional parameters */
/************************/
@JsonProperty (PROPERTIES_COUNT)
@JsonProperty(PROPERTIES_COUNT)
private Integer count;
@JsonProperty (PROPERTIES_TITLE)
@JsonProperty(PROPERTIES_TITLE)
private String title;
@JsonProperty (PROPERTIES_DESCRIPTION)
@JsonProperty(PROPERTIES_DESCRIPTION)
private String description;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,8 +32,8 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
* @author Tuna Aksoy
* @since 2.6
*/
public class FilePlanComponentAlias
{
public class FilePlanComponentAlias {
public static final String FILE_PLAN_ALIAS = "-filePlan-";
public static final String TRANSFERS_ALIAS = "-transfers-";
public static final String UNFILED_RECORDS_CONTAINER_ALIAS = "-unfiled-";

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,20 +32,19 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
* @author Kristijan Conkas
* @since 2.6
*/
public class FilePlanComponentAspects
{
public class FilePlanComponentAspects {
/** Private constructor to prevent instantiation. */
private FilePlanComponentAspects()
{
}
private FilePlanComponentAspects() {}
// aspect present on completed records
public static final String ASPECTS_COMPLETED_RECORD = "rma:declaredRecord";
// aspect present on record folders/categories with vital records
public static final String ASPECTS_VITAL_RECORD_DEFINITION= "rma:vitalRecordDefinition";
// aspect present on record folders/categories with vital records
public static final String ASPECTS_VITAL_RECORD_DEFINITION =
"rma:vitalRecordDefinition";
// aspect present on vital records
// aspect present on vital records
public static final String ASPECTS_VITAL_RECORD = "rma:vitalRecord";
// Frozen aspect

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,8 +32,8 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
* @author Tuna Aksoy
* @since 2.6
*/
public class FilePlanComponentFields
{
public class FilePlanComponentFields {
/** Common properties for file plans, record categories, record folders and records */
public static final String PROPERTIES_ROOT_NODE_REF = "rma:rootNodeRef";
public static final String PROPERTIES_IDENTIFIER = "rma:identifier";
@@ -44,24 +44,35 @@ public class FilePlanComponentFields
public static final String PROPERTIES_DESCRIPTION = "cm:description";
/** Common properties for record categories and record folders **/
public static final String PROPERTIES_VITAL_RECORD_INDICATOR = "rma:vitalRecordIndicator";
public static final String PROPERTIES_VITAL_RECORD_INDICATOR =
"rma:vitalRecordIndicator";
public static final String PROPERTIES_REVIEW_PERIOD = "rma:reviewPeriod";
public static final String PROPERTIES_OWNER = "cm:owner";
public static final String PROPERTIES_AUTHOR="cm:author";
public static final String PROPERTIES_AUTHOR = "cm:author";
/** Common properties for record folders and records */
public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE = "rma:recordSearchHasDispositionSchedule";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION = "rma:recordSearchDispositionPeriodExpression";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY = "rma:recordSearchDispositionAuthority";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF = "rma:recordSearchDispositionActionAsOf";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD = "rma:recordSearchDispositionPeriod";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME = "rma:recordSearchDispositionActionName";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE = "rma:recordSearchDispositionEventsEligible";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS = "rma:recordSearchDispositionInstructions";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS = "rma:recordSearchDispositionEvents";
public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_BY = "rma:declassificationReviewCompletedBy";
public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_AT = "rma:declassificationReviewCompletedAt";
public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE =
"rma:recordSearchHasDispositionSchedule";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION =
"rma:recordSearchDispositionPeriodExpression";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY =
"rma:recordSearchDispositionAuthority";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF =
"rma:recordSearchDispositionActionAsOf";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD =
"rma:recordSearchDispositionPeriod";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME =
"rma:recordSearchDispositionActionName";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE =
"rma:recordSearchDispositionEventsEligible";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS =
"rma:recordSearchDispositionInstructions";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS =
"rma:recordSearchDispositionEvents";
public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_BY =
"rma:declassificationReviewCompletedBy";
public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_AT =
"rma:declassificationReviewCompletedAt";
/** File plan properties */
public static final String PROPERTIES_COMPONENT_ID = "st:componentId";
@@ -72,10 +83,13 @@ public class FilePlanComponentFields
/** Record folder properties */
public static final String PROPERTIES_IS_CLOSED = "rma:isClosed"; // not to be confused with IS_CLOSED!
public static final String PROPERTIES_HELD_CHILDREN_COUNT = "rma:heldChildrenCount";
public static final String PROPERTIES_HELD_CHILDREN_COUNT =
"rma:heldChildrenCount";
public static final String PROPERTIES_LOCATION = "rma:location";
public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD = "rma:recordSearchVitalRecordReviewPeriod";
public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION = "rma:recordSearchVitalRecordReviewPeriodExpression";
public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD =
"rma:recordSearchVitalRecordReviewPeriod";
public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION =
"rma:recordSearchVitalRecordReviewPeriodExpression";
/**
* Record properties
@@ -88,39 +102,53 @@ public class FilePlanComponentFields
/** Electronic record properties */
public static final String PROPERTIES_VERSION_TYPE = "cm:versionType";
public static final String PROPERTIES_VERSION_LABEL = "cm:versionLabel";
public static final String PROPERTIES_VERSIONED_NODEREF = "rmv:versionedNodeRef";
public static final String PROPERTIES_VERSIONED_NODEREF =
"rmv:versionedNodeRef";
public static final String PROPERTIES_RMV_VERSIONED = "rmv:versionLabel";
public static final String PROPERTIES_DATE_TIME_ORIGINAL = "exif:dateTimeOriginal";
public static final String PROPERTIES_DATE_TIME_ORIGINAL =
"exif:dateTimeOriginal";
public static final String PROPERTIES_EXPOSURE_TIME = "exif:exposureTime";
public static final String PROPERTIES_FLASH = "exif:flash";
public static final String PROPERTIES_F_NUMBER = "exif:fNumber";
public static final String PROPERTIES_FOCAL_LENGTH = "exif:focalLength";
public static final String PROPERTIES_ISO_SPEED_RATINGS = "exif:isoSpeedRatings";
public static final String PROPERTIES_ISO_SPEED_RATINGS =
"exif:isoSpeedRatings";
public static final String PROPERTIES_MANUFACTURER = "exif:manufacturer";
public static final String PROPERTIES_MODEL = "exif:model";
public static final String PROPERTIES_ORIENTATION = "exif:orientation";
public static final String PROPERTIES_PIXEL_X_DIMENSION = "exif:pixelXDimension";
public static final String PROPERTIES_PIXEL_Y_DIMENSION = "exif:pixelYDimension";
public static final String PROPERTIES_RESOLUTION_UNIT = "exif:resolutionUnit";
public static final String PROPERTIES_PIXEL_X_DIMENSION =
"exif:pixelXDimension";
public static final String PROPERTIES_PIXEL_Y_DIMENSION =
"exif:pixelYDimension";
public static final String PROPERTIES_RESOLUTION_UNIT =
"exif:resolutionUnit";
public static final String PROPERTIES_SOFTWARE = "exif:software";
public static final String PROPERTIES_X_RESOLUTION = "exif:xResolution";
public static final String PROPERTIES_Y_RESOLUTION = "exif:yResolution";
public static final String PROPERTIES_RECORD_ORIGINATING_LOCATION = "rma:recordOriginatingLocation";
public static final String PROPERTIES_RECORD_ORIGINATING_USER_ID = "rma:recordOriginatingUserId";
public static final String PROPERTIES_RECORD_ORIGINATING_CREATION_DATE = "rma:recordOriginatingCreationDate";
public static final String PROPERTIES_RECORD_ORIGINATING_LOCATION =
"rma:recordOriginatingLocation";
public static final String PROPERTIES_RECORD_ORIGINATING_USER_ID =
"rma:recordOriginatingUserId";
public static final String PROPERTIES_RECORD_ORIGINATING_CREATION_DATE =
"rma:recordOriginatingCreationDate";
/** Non-electronic record properties */
public static final String PROPERTIES_SHELF = "rma:shelf";
public static final String PROPERTIES_STORAGE_LOCATION = "rma:storageLocation";
public static final String PROPERTIES_STORAGE_LOCATION =
"rma:storageLocation";
public static final String PROPERTIES_FILE = "rma:file";
public static final String PROPERTIES_BOX = "rma:box";
public static final String PROPERTIES_NUMBER_OF_COPIES = "rma:numberOfCopies";
public static final String PROPERTIES_NUMBER_OF_COPIES =
"rma:numberOfCopies";
public static final String PROPERTIES_PHYSICAL_SIZE = "rma:physicalSize";
/** Transfer properties */
public static final String PROPERTIES_PDF_INDICATOR = "rma:transferPDFIndicator";
public static final String PROPERTIES_TRANSFER_LOCATION = "rma:transferLocation";
public static final String PROPERTIES_ACCESSION_INDICATOR = "rma:transferAccessionIndicator";
public static final String PROPERTIES_PDF_INDICATOR =
"rma:transferPDFIndicator";
public static final String PROPERTIES_TRANSFER_LOCATION =
"rma:transferLocation";
public static final String PROPERTIES_ACCESSION_INDICATOR =
"rma:transferAccessionIndicator";
/** Parameters */
public static final String RELATIVE_PATH = "relativePath";
@@ -135,5 +163,6 @@ public class FilePlanComponentFields
/** CONTENT STORE property */
public static final String PROPERTIES_STORE = "cm:storeName";
/** WORM Unlock Date */
public static final String PROPERTIES_WORM_UNLOCK_DATE = "rme:wormUnlockDate";
public static final String PROPERTIES_WORM_UNLOCK_DATE =
"rme:wormUnlockDate";
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,17 +32,21 @@ package org.alfresco.rest.rm.community.model.fileplancomponents;
* @author Tuna Aksoy
* @since 2.6
*/
public class FilePlanComponentType
{
public class FilePlanComponentType {
public static final String FILE_PLAN_TYPE = "rma:filePlan";
public static final String RECORD_CATEGORY_TYPE = "rma:recordCategory";
public static final String RECORD_FOLDER_TYPE = "rma:recordFolder";
public static final String RECORD_TYPE = "rma:record"; // generic record type
public static final String UNFILED_RECORD_FOLDER_TYPE = "rma:unfiledRecordFolder";
public static final String UNFILED_RECORD_FOLDER_TYPE =
"rma:unfiledRecordFolder";
public static final String TRANSFER_TYPE = "rma:transfer";
public static final String TRANSFER_CONTAINER_TYPE = "rma:transferContainer";
public static final String UNFILED_CONTAINER_TYPE = "rma:unfiledRecordContainer";
public static final String TRANSFER_CONTAINER_TYPE =
"rma:transferContainer";
public static final String UNFILED_CONTAINER_TYPE =
"rma:unfiledRecordContainer";
public static final String FOLDER_TYPE = "cm:folder";
public static final String CONTENT_TYPE = "cm:content";
public static final String NON_ELECTRONIC_RECORD_TYPE = "rma:nonElectronicDocument";
public static final String NON_ELECTRONIC_RECORD_TYPE =
"rma:nonElectronicDocument";
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -28,7 +28,6 @@ package org.alfresco.rest.rm.community.model.hold;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -45,12 +44,12 @@ import org.alfresco.utility.model.TestModel;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class HoldEntry extends TestModel
{
@JsonProperty (required = true)
@JsonIgnoreProperties(ignoreUnknown = true)
public class HoldEntry extends TestModel {
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeRef;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,10 +26,13 @@
*/
package org.alfresco.rest.rm.community.model.record;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.core.IRestModel;
import org.alfresco.rest.core.assertion.ModelAssertion;
import org.alfresco.rest.model.RestByUserModel;
@@ -37,12 +40,6 @@ import org.alfresco.rest.model.RestNodeModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* POJO for record
*
@@ -54,35 +51,35 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class Record extends TestModel implements IRestModel<RestNodeModel>
{
public final static String CONTENT_NODE_TYPE = "cm:content";
public class Record extends TestModel implements IRestModel<RestNodeModel> {
public static final String CONTENT_NODE_TYPE = "cm:content";
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
/************************/
@@ -107,23 +104,20 @@ public class Record extends TestModel implements IRestModel<RestNodeModel>
private Path path;
@Override
public ModelAssertion<RestNodeModel> assertThat()
{
public ModelAssertion<RestNodeModel> assertThat() {
return new ModelAssertion<>(this);
}
@Override
public ModelAssertion<RestNodeModel> and()
{
public ModelAssertion<RestNodeModel> and() {
return assertThat();
}
@JsonProperty (value = "entry")
@JsonProperty(value = "entry")
RestNodeModel model;
@Override
public RestNodeModel onModel()
{
public RestNodeModel onModel() {
return model;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,14 +27,12 @@
package org.alfresco.rest.rm.community.model.record;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.utility.model.TestModel;
/**
* POJO for File records
@@ -47,8 +45,8 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordBodyFile extends TestModel
{
public class RecordBodyFile extends TestModel {
@JsonProperty
private String targetParentId;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,14 +27,12 @@
package org.alfresco.rest.rm.community.model.record;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record content field
@@ -48,17 +46,17 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordContent extends TestModel
{
@JsonProperty (required = true)
public class RecordContent extends TestModel {
@JsonProperty(required = true)
private String mimeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String mimeTypeName;
@JsonProperty (required = true)
@JsonProperty(required = true)
private Integer sizeInBytes;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String encoding;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -64,7 +64,6 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RESOLUTION_UNIT;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_REVIEW_AS_OF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RMV_VERSIONED;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
@@ -80,12 +79,10 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_X_RESOLUTION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_Y_RESOLUTION;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -106,165 +103,170 @@ import org.alfresco.utility.model.TestModel;
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class RecordProperties extends TestModel
{
public class RecordProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
@JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (required = true, value = PROPERTIES_DATE_FILED)
@JsonProperty(required = true, value = PROPERTIES_DATE_FILED)
private String dateField;
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
@JsonProperty(
required = true,
value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE
)
private Boolean recordSearchHasDispositionSchedule;
@JsonProperty (required = true, value = PROPERTIES_ORIGINAL_NAME)
@JsonProperty(required = true, value = PROPERTIES_ORIGINAL_NAME)
private String originalName;
@JsonProperty (PROPERTIES_CLASSIFICATION)
@JsonProperty(PROPERTIES_CLASSIFICATION)
private List<String> classification;
/*********************************/
/** Electronic record parameters */
/*********************************/
@JsonProperty (PROPERTIES_VERSION_TYPE)
@JsonProperty(PROPERTIES_VERSION_TYPE)
private String versionType;
@JsonProperty (PROPERTIES_VERSION_LABEL)
@JsonProperty(PROPERTIES_VERSION_LABEL)
private String versionLabel;
@JsonProperty(PROPERTIES_VERSIONED_NODEREF)
private String versionedNodeRef;
@JsonProperty (PROPERTIES_RMV_VERSIONED)
@JsonProperty(PROPERTIES_RMV_VERSIONED)
private String recordVersionLabel;
@JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL)
@JsonProperty(PROPERTIES_DATE_TIME_ORIGINAL)
private String dateTimeOriginal;
@JsonProperty (PROPERTIES_EXPOSURE_TIME)
@JsonProperty(PROPERTIES_EXPOSURE_TIME)
private Double exposureTime;
@JsonProperty (PROPERTIES_FLASH)
@JsonProperty(PROPERTIES_FLASH)
private Boolean flash;
@JsonProperty (PROPERTIES_F_NUMBER)
@JsonProperty(PROPERTIES_F_NUMBER)
private Double fNumber;
@JsonProperty (PROPERTIES_FOCAL_LENGTH)
@JsonProperty(PROPERTIES_FOCAL_LENGTH)
private Double focalLength;
@JsonProperty (PROPERTIES_ISO_SPEED_RATINGS)
@JsonProperty(PROPERTIES_ISO_SPEED_RATINGS)
private Integer isoSpeedRatings;
@JsonProperty (PROPERTIES_MANUFACTURER)
@JsonProperty(PROPERTIES_MANUFACTURER)
private String manufacturer;
@JsonProperty (PROPERTIES_MODEL)
@JsonProperty(PROPERTIES_MODEL)
private String model;
@JsonProperty (PROPERTIES_ORIENTATION)
@JsonProperty(PROPERTIES_ORIENTATION)
private Integer orientation;
@JsonProperty (PROPERTIES_PIXEL_X_DIMENSION)
@JsonProperty(PROPERTIES_PIXEL_X_DIMENSION)
private Integer pixelXDimension;
@JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION)
@JsonProperty(PROPERTIES_PIXEL_Y_DIMENSION)
private Integer pixelYDimension;
@JsonProperty (PROPERTIES_RESOLUTION_UNIT)
@JsonProperty(PROPERTIES_RESOLUTION_UNIT)
private String resolutionUnit;
@JsonProperty (PROPERTIES_SOFTWARE)
@JsonProperty(PROPERTIES_SOFTWARE)
private String software;
@JsonProperty (PROPERTIES_X_RESOLUTION)
@JsonProperty(PROPERTIES_X_RESOLUTION)
private Double xResolution;
@JsonProperty (PROPERTIES_Y_RESOLUTION)
@JsonProperty(PROPERTIES_Y_RESOLUTION)
private Double yResolution;
@JsonProperty (PROPERTIES_RECORD_ORIGINATING_LOCATION)
@JsonProperty(PROPERTIES_RECORD_ORIGINATING_LOCATION)
private String originatingLocation;
@JsonProperty (PROPERTIES_RECORD_ORIGINATING_USER_ID)
@JsonProperty(PROPERTIES_RECORD_ORIGINATING_USER_ID)
private String originatingUserId;
@JsonProperty (PROPERTIES_RECORD_ORIGINATING_CREATION_DATE)
@JsonProperty(PROPERTIES_RECORD_ORIGINATING_CREATION_DATE)
private String originatingCreationDate;
/*************************************/
/** Non-electronic record parameters */
/*************************************/
@JsonProperty (PROPERTIES_TITLE)
@JsonProperty(PROPERTIES_TITLE)
private String title;
@JsonProperty (PROPERTIES_SHELF)
@JsonProperty(PROPERTIES_SHELF)
private String shelf;
@JsonProperty (PROPERTIES_STORAGE_LOCATION)
@JsonProperty(PROPERTIES_STORAGE_LOCATION)
private String storageLocation;
@JsonProperty (PROPERTIES_FILE)
@JsonProperty(PROPERTIES_FILE)
private String file;
@JsonProperty (PROPERTIES_BOX)
@JsonProperty(PROPERTIES_BOX)
private String box;
@JsonProperty (PROPERTIES_DESCRIPTION)
@JsonProperty(PROPERTIES_DESCRIPTION)
private String description;
@JsonProperty (PROPERTIES_NUMBER_OF_COPIES)
@JsonProperty(PROPERTIES_NUMBER_OF_COPIES)
private Integer numberOfCopies;
@JsonProperty (PROPERTIES_PHYSICAL_SIZE)
@JsonProperty(PROPERTIES_PHYSICAL_SIZE)
private Integer physicalSize;
@JsonProperty (PROPERTIES_OWNER)
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
@JsonProperty(PROPERTIES_AUTHOR)
private String author;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
private String recordSearchDispositionPeriodExpression;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
private String recordSearchDispositionAuthority;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
private Date recordSearchDispositionActionAsOf;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
private String recordSearchDispositionPeriod;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
private String recordSearchDispositionActionName;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
private Boolean recordSearchDispositionEventsEligible;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS)
private List<String> recordSearchDispositionEvents;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
private String recordSearchDispositionInstructions;
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD)
@JsonProperty(PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD)
private String recordSearchVitalRecordReviewPeriod;
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION)
@JsonProperty(
PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION
)
private String recordSearchVitalRecordReviewPeriodExpression;
@JsonProperty(PROPERTIES_REVIEW_AS_OF)
private Date reviewAsOf;
@JsonProperty (PROPERTIES_STORE)
@JsonProperty(PROPERTIES_STORE)
private String store;
@JsonProperty(PROPERTIES_WORM_UNLOCK_DATE)

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,19 +26,16 @@
*/
package org.alfresco.rest.rm.community.model.recordcategory;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record category
@@ -51,42 +48,42 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordCategory extends TestModel
{
public class RecordCategory extends TestModel {
public static final String DEFAULT_FILE_PLAN_ALIAS = "-filePlan-";
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RecordCategoryProperties properties;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,19 +26,16 @@
*/
package org.alfresco.rest.rm.community.model.recordcategory;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record category child
@@ -51,35 +48,35 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordCategoryChild extends TestModel
{
public class RecordCategoryChild extends TestModel {
public static final String RECORD_FOLDER_NODE_TYPE = "rma:recordFolder";
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels;
* @author Tuna Aksoy
* @since 2.6
*/
public class RecordCategoryChildCollection extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection>
{
}
public class RecordCategoryChildCollection
extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection> {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,11 +27,9 @@
package org.alfresco.rest.rm.community.model.recordcategory;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.core.RestModels;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.alfresco.rest.core.RestModels;
/**
* POJO for record category child entry
@@ -41,8 +39,9 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class RecordCategoryChildEntry extends RestModels<RecordCategory, RecordCategoryChildEntry>
{
public class RecordCategoryChildEntry
extends RestModels<RecordCategory, RecordCategoryChildEntry> {
@JsonProperty
private RecordCategoryChild entry;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,36 +32,33 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IS_CLOSED;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_LOCATION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_REVIEW_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record category child properties
@@ -74,70 +71,69 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordCategoryChildProperties extends TestModel
{
public class RecordCategoryChildProperties extends TestModel {
/**************************************************************************/
/** Mandatory parameters - Shared by record categories and record folders */
/**************************************************************************/
@JsonProperty (required = true, value = PROPERTIES_TITLE)
@JsonProperty(required = true, value = PROPERTIES_TITLE)
private String title;
@JsonProperty (required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR)
@JsonProperty(required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR)
private Boolean vitalRecordIndicator;
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
@JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_REVIEW_PERIOD)
@JsonSerialize (using = ReviewPeriodSerializer.class)
@JsonProperty(required = true, value = PROPERTIES_REVIEW_PERIOD)
@JsonSerialize(using = ReviewPeriodSerializer.class)
private ReviewPeriod reviewPeriod;
@JsonProperty (required = true, value = PROPERTIES_DESCRIPTION)
@JsonProperty(required = true, value = PROPERTIES_DESCRIPTION)
private String description;
/*********************************************************/
/** Optional parameters - Applies only to record folders */
/*********************************************************/
@JsonProperty (PROPERTIES_HELD_CHILDREN_COUNT)
@JsonProperty(PROPERTIES_HELD_CHILDREN_COUNT)
private Integer heldChildrenCount;
@JsonProperty (PROPERTIES_LOCATION)
@JsonProperty(PROPERTIES_LOCATION)
private String location;
@JsonProperty (PROPERTIES_IS_CLOSED)
@JsonProperty(PROPERTIES_IS_CLOSED)
private Boolean isClosed;
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
@JsonProperty(PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
private Boolean recordSearchHasDispositionSchedule;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
private String recordSearchDispositionPeriodExpression;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
private String recordSearchDispositionAuthority;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
private Date recordSearchDispositionActionAsOf;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
private String recordSearchDispositionPeriod;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
private String recordSearchDispositionActionName;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
private Boolean recordSearchDispositionEventsEligible;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
private String recordSearchDispositionInstructions;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS)
private List<String> recordSearchDispositionEvents;
@JsonProperty (PROPERTIES_OWNER)
private Owner owner;
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels;
* @author Tuna Aksoy
* @since 2.6
*/
public class RecordCategoryCollection extends RestModels<RecordCategoryEntry, RecordCategoryCollection>
{
}
public class RecordCategoryCollection
extends RestModels<RecordCategoryEntry, RecordCategoryCollection> {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,12 +27,10 @@
package org.alfresco.rest.rm.community.model.recordcategory;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.core.RestModels;
import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.alfresco.rest.core.RestModels;
import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
/**
* POJO for file plan entry
@@ -43,8 +41,9 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class RecordCategoryEntry extends RestModels<FilePlan, RecordCategoryEntry>
{
public class RecordCategoryEntry
extends RestModels<FilePlan, RecordCategoryEntry> {
@JsonProperty
private RecordCategory entry;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -35,23 +35,19 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record category properties
@@ -64,37 +60,37 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class RecordCategoryProperties extends TestModel
{
@JsonIgnoreProperties(ignoreUnknown = true)
public class RecordCategoryProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_REVIEW_PERIOD)
@JsonSerialize (using = ReviewPeriodSerializer.class)
@JsonProperty(required = true, value = PROPERTIES_REVIEW_PERIOD)
@JsonSerialize(using = ReviewPeriodSerializer.class)
private ReviewPeriod reviewPeriod;
@JsonProperty (required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR)
@JsonProperty(required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR)
private Boolean vitalRecordIndicator;
/************************/
/** Optional parameters */
/************************/
@JsonProperty (PROPERTIES_TITLE)
@JsonProperty(PROPERTIES_TITLE)
private String title;
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
@JsonProperty(PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (PROPERTIES_DESCRIPTION)
@JsonProperty(PROPERTIES_DESCRIPTION)
private String description;
@JsonProperty (PROPERTIES_OWNER)
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
@JsonProperty (PROPERTIES_CLASSIFICATION)
@JsonProperty(PROPERTIES_CLASSIFICATION)
private List<String> classification;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,8 +29,7 @@ package org.alfresco.rest.rm.community.model.recordcategory;
/**
* The property of the dispositioned item that is used to calculate the "as of" period.
*/
public enum RetentionPeriodProperty
{
public enum RetentionPeriodProperty {
/** Item created date. */
CREATED_DATE("cm:created"),
/** Record filed date. */
@@ -40,13 +39,11 @@ public enum RetentionPeriodProperty
String periodProperty;
RetentionPeriodProperty(String periodProperty)
{
RetentionPeriodProperty(String periodProperty) {
this.periodProperty = periodProperty;
}
public String getPeriodProperty()
{
public String getPeriodProperty() {
return periodProperty;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,19 +26,16 @@
*/
package org.alfresco.rest.rm.community.model.recordfolder;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record folder
@@ -51,39 +48,39 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordFolder extends TestModel
{
public class RecordFolder extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RecordFolderProperties properties;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels;
* @author Tuna Aksoy
* @since 2.6
*/
public class RecordFolderCollection extends RestModels<RecordFolderEntry, RecordFolderCollection>
{
}
public class RecordFolderCollection
extends RestModels<RecordFolderEntry, RecordFolderCollection> {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,15 +27,13 @@
package org.alfresco.rest.rm.community.model.recordfolder;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.core.RestModels;
import org.alfresco.rest.rm.community.model.record.Record;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.core.RestModels;
import org.alfresco.rest.rm.community.model.record.Record;
/**
* POJO for record folder entry
@@ -48,8 +46,9 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RecordFolderEntry extends RestModels<RecordFolder, RecordFolderEntry>
{
public class RecordFolderEntry
extends RestModels<RecordFolder, RecordFolderEntry> {
@JsonProperty
private Record entry;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -33,10 +33,8 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IS_CLOSED;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_LOCATION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields
.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields
.PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION;
@@ -45,22 +43,19 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record folder properties
@@ -73,62 +68,63 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class RecordFolderProperties extends TestModel
{
@JsonIgnoreProperties(ignoreUnknown = true)
public class RecordFolderProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_IS_CLOSED)
@JsonProperty(required = true, value = PROPERTIES_IS_CLOSED)
private Boolean isClosed;
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_HELD_CHILDREN_COUNT)
@JsonProperty(required = true, value = PROPERTIES_HELD_CHILDREN_COUNT)
private Integer heldChildrenCount;
/************************/
/** Optional parameters */
/************************/
@JsonProperty (PROPERTIES_TITLE)
@JsonProperty(PROPERTIES_TITLE)
private String title;
@JsonProperty (PROPERTIES_VITAL_RECORD_INDICATOR)
@JsonProperty(PROPERTIES_VITAL_RECORD_INDICATOR)
private Boolean vitalRecordIndicator;
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
@JsonProperty(PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (PROPERTIES_LOCATION)
@JsonProperty(PROPERTIES_LOCATION)
private String location;
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
@JsonProperty(PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
private Boolean recordSearchHasDispositionSchedule;
@JsonProperty (PROPERTIES_REVIEW_PERIOD)
@JsonSerialize (using = ReviewPeriodSerializer.class)
@JsonProperty(PROPERTIES_REVIEW_PERIOD)
@JsonSerialize(using = ReviewPeriodSerializer.class)
private ReviewPeriod reviewPeriod;
@JsonProperty (PROPERTIES_CLASSIFICATION)
@JsonProperty(PROPERTIES_CLASSIFICATION)
private List<String> classification;
@JsonProperty (PROPERTIES_DESCRIPTION)
@JsonProperty(PROPERTIES_DESCRIPTION)
private String description;
@JsonProperty (PROPERTIES_OWNER)
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD)
@JsonProperty(PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD)
private String recordSearchVitalRecordReviewPeriod;
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION)
@JsonProperty(
PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION
)
private String recordSearchVitalRecordReviewPeriodExpression;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
private String recordSearchDispositionAuthority;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
@JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
private String recordSearchDispositionInstructions;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,8 +29,7 @@ package org.alfresco.rest.rm.community.model.rules;
/**
* Action values.
*/
public enum ActionsOnRule
{
public enum ActionsOnRule {
COMPLETE_RECORD("declareRecord"),
REOPEN_RECORD("undeclareRecord"),
OPEN_RECORD_FOLDER("openRecordFolder"),
@@ -54,13 +53,11 @@ public enum ActionsOnRule
private String actionValue;
ActionsOnRule(String value)
{
ActionsOnRule(String value) {
this.actionValue = value;
}
public String getActionValue()
{
public String getActionValue() {
return actionValue;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,20 +29,18 @@ package org.alfresco.rest.rm.community.model.rules;
/**
* enum used to find the when condition names options by their value
*/
public enum ConditionsOnRule
{
public enum ConditionsOnRule {
UPDATE("update"),
ADDED("inbound"),
REMOVED("outbound");
private String whenConditionValue;
ConditionsOnRule(String value)
{
this.whenConditionValue = value;
ConditionsOnRule(String value) {
this.whenConditionValue = value;
}
public String getWhenConditionValue()
{
return whenConditionValue;
public String getWhenConditionValue() {
return whenConditionValue;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -31,8 +31,8 @@ import java.util.List;
/**
* A class describing the rule
*/
public class RuleDefinition
{
public class RuleDefinition {
private String id = "";
private String title;
private String description = "";
@@ -52,152 +52,124 @@ public class RuleDefinition
*
* @return the object
*/
public static RuleDefinition createNewRule()
{
public static RuleDefinition createNewRule() {
return new RuleDefinition();
}
public String getId()
{
public String getId() {
return id;
}
public RuleDefinition id(String id)
{
public RuleDefinition id(String id) {
this.id = id;
return this;
}
public String getTitle()
{
public String getTitle() {
return title;
}
public RuleDefinition title(String title)
{
public RuleDefinition title(String title) {
this.title = title;
return this;
}
public String getDescription()
{
public String getDescription() {
return description;
}
public RuleDefinition description(String description)
{
public RuleDefinition description(String description) {
this.description = description;
return this;
}
public boolean isDisabled()
{
public boolean isDisabled() {
return disabled;
}
public RuleDefinition disabled(boolean disabled)
{
public RuleDefinition disabled(boolean disabled) {
this.disabled = disabled;
return this;
}
public boolean isApplyToChildren()
{
public boolean isApplyToChildren() {
return applyToChildren;
}
public RuleDefinition applyToChildren(boolean applyToChildren)
{
public RuleDefinition applyToChildren(boolean applyToChildren) {
this.applyToChildren = applyToChildren;
return this;
}
public boolean getRunInBackground()
{
public boolean getRunInBackground() {
return runInBackground;
}
public RuleDefinition runInBackground(boolean runInBackground)
{
public RuleDefinition runInBackground(boolean runInBackground) {
this.runInBackground = runInBackground;
return this;
}
public String getRuleType()
{
public String getRuleType() {
return ruleType;
}
public RuleDefinition ruleType(String ruleType)
{
public RuleDefinition ruleType(String ruleType) {
this.ruleType = ruleType;
return this;
}
public String getPath()
{
public String getPath() {
return path;
}
public RuleDefinition path(String path)
{
public RuleDefinition path(String path) {
this.path = path;
return this;
}
public Boolean getCreateRecordPath()
{
public Boolean getCreateRecordPath() {
return createRecordPath;
}
public RuleDefinition createRecordPath(boolean createRecordPath)
{
public RuleDefinition createRecordPath(boolean createRecordPath) {
this.createRecordPath = createRecordPath;
return this;
}
public String getContentTitle()
{
public String getContentTitle() {
return contentTitle;
}
public RuleDefinition contentTitle(String contentTitle)
{
public RuleDefinition contentTitle(String contentTitle) {
this.contentTitle = contentTitle;
return this;
}
public String getContentDescription()
{
public String getContentDescription() {
return contentDescription;
}
public RuleDefinition contentDescription(String contentDescription)
{
public RuleDefinition contentDescription(String contentDescription) {
this.contentDescription = contentDescription;
return this;
}
public String getRejectReason()
{
public String getRejectReason() {
return rejectReason;
}
public RuleDefinition rejectReason(String rejectReason)
{
public RuleDefinition rejectReason(String rejectReason) {
this.rejectReason = rejectReason;
return this;
}
public List<String> getActions()
{
public List<String> getActions() {
return actions;
}
public RuleDefinition actions(List<String> actions)
{
public RuleDefinition actions(List<String> actions) {
this.actions = actions;
return this;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,14 +27,12 @@
package org.alfresco.rest.rm.community.model.site;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestSiteModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestSiteModel;
/**
* POJO for RM Site component
@@ -46,15 +44,18 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class RMSite extends RestSiteModel
{
@JsonProperty (required = true)
public class RMSite extends RestSiteModel {
@JsonProperty(required = true)
private RMSiteCompliance compliance;
/** Private constructor allowing Lombok to include superclass fields in the builder. */
@Builder
private RMSite(String title, String description, RMSiteCompliance compliance)
{
private RMSite(
String title,
String description,
RMSiteCompliance compliance
) {
this.setTitle(title);
this.setDescription(description);
this.compliance = compliance;

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,8 +32,7 @@ package org.alfresco.rest.rm.community.model.site;
* @author Tuna Aksoy
* @since 2.6
*/
public enum RMSiteCompliance
{
public enum RMSiteCompliance {
STANDARD,
DOD5015
DOD5015,
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -41,12 +41,12 @@ package org.alfresco.rest.rm.community.model.site;
* @author Rodica Sutu
* @since 2.6
*/
public class RMSiteFields
{
public class RMSiteFields {
public static final String ID = "id";
public static final String COMPLIANCE = "compliance";
public static final String TITLE = "title";
public static final String DESCRIPTION = "description";
public static final String VISIBILITY ="visibility";
public static final String VISIBILITY = "visibility";
public static final String ROLE = "role";
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,18 +27,15 @@
package org.alfresco.rest.rm.community.model.transfer;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.utility.model.TestModel;
/**
* POJO for Transfer
@@ -51,33 +48,33 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class Transfer extends TestModel
{
public class Transfer extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private TransferProperties properties;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,19 +27,16 @@
package org.alfresco.rest.rm.community.model.transfer;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
/**
* POJO for transfer child
@@ -52,33 +49,33 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferChild extends TestModel
{
public class TransferChild extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -34,7 +34,5 @@ import org.alfresco.rest.core.RestModels;
* @author Silviu Dinuta
* @since 2.6
*/
public class TransferChildCollection extends RestModels<TransferChildEntry, TransferChildCollection>
{
}
public class TransferChildCollection
extends RestModels<TransferChildEntry, TransferChildCollection> {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,15 +27,13 @@
package org.alfresco.rest.rm.community.model.transfer;
import org.alfresco.rest.core.RestModels;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.core.RestModels;
/**
* POJO for transfer child entry
@@ -48,8 +46,9 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferChildEntry extends RestModels<Transfer, TransferChildEntry>
{
public class TransferChildEntry
extends RestModels<Transfer, TransferChildEntry> {
@JsonProperty
private TransferChild entry;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -64,19 +64,17 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_X_RESOLUTION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_Y_RESOLUTION;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
/**
* POJO for transfer child properties
@@ -89,131 +87,130 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferChildProperties extends TestModel
{
public class TransferChildProperties extends TestModel {
/**************************************************************************/
/** Mandatory parameters - Shared by record folders and records*/
/**************************************************************************/
@JsonProperty (PROPERTIES_TITLE)
@JsonProperty(PROPERTIES_TITLE)
private String title;
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
@JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (PROPERTIES_DESCRIPTION)
@JsonProperty(PROPERTIES_DESCRIPTION)
private String description;
/*********************************************************/
/** Optional parameters - Applies only to record folders */
/*********************************************************/
@JsonProperty (PROPERTIES_VITAL_RECORD_INDICATOR)
@JsonProperty(PROPERTIES_VITAL_RECORD_INDICATOR)
private Boolean vitalRecordIndicator;
@JsonProperty (PROPERTIES_REVIEW_PERIOD)
@JsonSerialize (using = ReviewPeriodSerializer.class)
@JsonProperty(PROPERTIES_REVIEW_PERIOD)
@JsonSerialize(using = ReviewPeriodSerializer.class)
private ReviewPeriod reviewPeriod;
@JsonProperty (PROPERTIES_HELD_CHILDREN_COUNT)
@JsonProperty(PROPERTIES_HELD_CHILDREN_COUNT)
private Integer heldChildrenCount;
@JsonProperty (PROPERTIES_LOCATION)
@JsonProperty(PROPERTIES_LOCATION)
private String location;
@JsonProperty (PROPERTIES_IS_CLOSED)
@JsonProperty(PROPERTIES_IS_CLOSED)
private Boolean isClosed;
/*********************************************************/
/** Optional parameters - Applies only to records */
/*********************************************************/
@JsonProperty (PROPERTIES_DATE_FILED)
@JsonProperty(PROPERTIES_DATE_FILED)
private String dateField;
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
@JsonProperty(PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
private Boolean recordSearchHasDispositionSchedule;
@JsonProperty (PROPERTIES_ORIGINAL_NAME)
@JsonProperty(PROPERTIES_ORIGINAL_NAME)
private String originalName;
/*********************************/
/** Electronic record parameters */
/*********************************/
@JsonProperty (PROPERTIES_VERSION_TYPE)
@JsonProperty(PROPERTIES_VERSION_TYPE)
private String versionType;
@JsonProperty (PROPERTIES_VERSION_LABEL)
@JsonProperty(PROPERTIES_VERSION_LABEL)
private String versionLabel;
@JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL)
@JsonProperty(PROPERTIES_DATE_TIME_ORIGINAL)
private String dateTimeOriginal;
@JsonProperty (PROPERTIES_EXPOSURE_TIME)
@JsonProperty(PROPERTIES_EXPOSURE_TIME)
private Double exposureTime;
@JsonProperty (PROPERTIES_FLASH)
@JsonProperty(PROPERTIES_FLASH)
private Boolean flash;
@JsonProperty (PROPERTIES_F_NUMBER)
@JsonProperty(PROPERTIES_F_NUMBER)
private Double fNumber;
@JsonProperty (PROPERTIES_FOCAL_LENGTH)
@JsonProperty(PROPERTIES_FOCAL_LENGTH)
private Double focalLength;
@JsonProperty (PROPERTIES_ISO_SPEED_RATINGS)
@JsonProperty(PROPERTIES_ISO_SPEED_RATINGS)
private Integer isoSpeedRatings;
@JsonProperty (PROPERTIES_MANUFACTURER)
@JsonProperty(PROPERTIES_MANUFACTURER)
private String manufacturer;
@JsonProperty (PROPERTIES_MODEL)
@JsonProperty(PROPERTIES_MODEL)
private String model;
@JsonProperty (PROPERTIES_ORIENTATION)
@JsonProperty(PROPERTIES_ORIENTATION)
private Integer orientation;
@JsonProperty (PROPERTIES_PIXEL_X_DIMENSION)
@JsonProperty(PROPERTIES_PIXEL_X_DIMENSION)
private Integer pixelXDimension;
@JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION)
@JsonProperty(PROPERTIES_PIXEL_Y_DIMENSION)
private Integer pixelYDimension;
@JsonProperty (PROPERTIES_RESOLUTION_UNIT)
@JsonProperty(PROPERTIES_RESOLUTION_UNIT)
private String resolutionUnit;
@JsonProperty (PROPERTIES_SOFTWARE)
@JsonProperty(PROPERTIES_SOFTWARE)
private String software;
@JsonProperty (PROPERTIES_X_RESOLUTION)
@JsonProperty(PROPERTIES_X_RESOLUTION)
private Double xResolution;
@JsonProperty (PROPERTIES_Y_RESOLUTION)
@JsonProperty(PROPERTIES_Y_RESOLUTION)
private Double yResolution;
/*************************************/
/** Non-electronic record parameters */
/*************************************/
@JsonProperty (PROPERTIES_SHELF)
@JsonProperty(PROPERTIES_SHELF)
private String shelf;
@JsonProperty (PROPERTIES_STORAGE_LOCATION)
@JsonProperty(PROPERTIES_STORAGE_LOCATION)
private String storageLocation;
@JsonProperty (PROPERTIES_FILE)
@JsonProperty(PROPERTIES_FILE)
private String file;
@JsonProperty (PROPERTIES_BOX)
@JsonProperty(PROPERTIES_BOX)
private String box;
@JsonProperty (PROPERTIES_NUMBER_OF_COPIES)
@JsonProperty(PROPERTIES_NUMBER_OF_COPIES)
private Integer numberOfCopies;
@JsonProperty (PROPERTIES_PHYSICAL_SIZE)
@JsonProperty(PROPERTIES_PHYSICAL_SIZE)
private Integer physicalSize;
@JsonProperty (PROPERTIES_OWNER)
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -34,7 +34,5 @@ import org.alfresco.rest.core.RestModels;
* @author Silviu Dinuta
* @since 2.6
*/
public class TransferCollection extends RestModels<TransferEntry, TransferCollection>
{
}
public class TransferCollection
extends RestModels<TransferEntry, TransferCollection> {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,16 +27,14 @@
package org.alfresco.rest.rm.community.model.transfer;
import org.alfresco.rest.core.RestModels;
import org.alfresco.rest.rm.community.model.transfercontainer.TransferContainer;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.core.RestModels;
import org.alfresco.rest.rm.community.model.transfercontainer.TransferContainer;
/**
* POJO for transfer entry
@@ -49,8 +47,9 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferEntry extends RestModels<TransferContainer, TransferEntry>
{
public class TransferEntry
extends RestModels<TransferContainer, TransferEntry> {
@JsonProperty
private Transfer entry;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,23 +27,21 @@
package org.alfresco.rest.rm.community.model.transfer;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ACCESSION_INDICATOR;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PDF_INDICATOR;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TRANSFER_LOCATION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ACCESSION_INDICATOR;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.utility.model.TestModel;
/**
* POJO for Transfer properties
@@ -56,29 +54,29 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferProperties extends TestModel
{
public class TransferProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
/************************/
/** Optional parameters */
/************************/
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
@JsonProperty(PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (PROPERTIES_OWNER)
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
@JsonProperty (PROPERTIES_PDF_INDICATOR)
@JsonProperty(PROPERTIES_PDF_INDICATOR)
private Boolean pdfIndicator;
@JsonProperty (PROPERTIES_TRANSFER_LOCATION)
@JsonProperty(PROPERTIES_TRANSFER_LOCATION)
private String transferLocation;
@JsonProperty (PROPERTIES_ACCESSION_INDICATOR)
@JsonProperty(PROPERTIES_ACCESSION_INDICATOR)
private Boolean accessionIndicator;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,18 +27,15 @@
package org.alfresco.rest.rm.community.model.transfercontainer;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.utility.model.TestModel;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.utility.model.TestModel;
/**
* POJO for Transfer Container
@@ -51,39 +48,39 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferContainer extends TestModel
{
public class TransferContainer extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private TransferContainerProperties properties;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -31,15 +31,13 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.utility.model.TestModel;
/**
* POJO for Transfer Container properties
@@ -52,21 +50,20 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class TransferContainerProperties extends TestModel
{
public class TransferContainerProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
/************************/
/** Optional parameters */
/************************/
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
@JsonProperty(PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (PROPERTIES_COUNT)
@JsonProperty(PROPERTIES_COUNT)
private Integer count;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,19 +26,16 @@
*/
package org.alfresco.rest.rm.community.model.unfiledcontainer;
import java.util.List;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
/**
* POJO for unfiled container
@@ -51,39 +48,39 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class UnfiledContainer extends TestModel
{
public class UnfiledContainer extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
@JsonProperty (required = true)
@JsonProperty(required = true)
private List<String> aspectNames;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private UnfiledContainerProperties properties;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,21 +26,18 @@
*/
package org.alfresco.rest.rm.community.model.unfiledcontainer;
import java.util.List;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.rest.rm.community.model.record.RecordContent;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.rest.rm.community.model.record.RecordContent;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record category child
@@ -53,40 +50,40 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class UnfiledContainerChild extends TestModel
{
@JsonIgnoreProperties(ignoreUnknown = true)
public class UnfiledContainerChild extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private Boolean isUnfiledRecordFolder;
@JsonProperty (required = true)
@JsonProperty(required = true)
private Boolean isRecord;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels;
* @author Tuna Aksoy
* @since 2.6
*/
public class UnfiledContainerChildCollection extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection>
{
}
public class UnfiledContainerChildCollection
extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection> {}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,11 +27,9 @@
package org.alfresco.rest.rm.community.model.unfiledcontainer;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.core.RestModels;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.alfresco.rest.core.RestModels;
/**
* POJO for record category child entry
@@ -41,8 +39,9 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class UnfiledContainerChildEntry extends RestModels<UnfiledContainer, UnfiledContainerChildEntry>
{
public class UnfiledContainerChildEntry
extends RestModels<UnfiledContainer, UnfiledContainerChildEntry> {
@JsonProperty
private UnfiledContainerChild entry;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -61,15 +61,13 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.utility.model.TestModel;
/**
* POJO for record category child properties
@@ -83,112 +81,112 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class UnfiledContainerChildProperties extends TestModel
{
@JsonIgnoreProperties(ignoreUnknown = true)
public class UnfiledContainerChildProperties extends TestModel {
/**************************************************************************/
/** Mandatory parameters - Shared by unfiled record folder and records */
/**************************************************************************/
@JsonProperty (required = true, value = PROPERTIES_TITLE)
@JsonProperty(required = true, value = PROPERTIES_TITLE)
private String title;
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
@JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_DESCRIPTION)
@JsonProperty(required = true, value = PROPERTIES_DESCRIPTION)
private String description;
@JsonProperty (value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
@JsonProperty(value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
private Boolean recordSearchHasDispositionSchedule;
/*********************************/
/** Electronic record parameters */
/*********************************/
@JsonProperty (PROPERTIES_VERSION_TYPE)
@JsonProperty(PROPERTIES_VERSION_TYPE)
private String versionType;
@JsonProperty (PROPERTIES_VERSION_LABEL)
@JsonProperty(PROPERTIES_VERSION_LABEL)
private String versionLabel;
@JsonProperty(PROPERTIES_VERSIONED_NODEREF)
private String versionedNodeRef;
@JsonProperty (PROPERTIES_RMV_VERSIONED)
@JsonProperty(PROPERTIES_RMV_VERSIONED)
private String recordVersionLabel;
@JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL)
@JsonProperty(PROPERTIES_DATE_TIME_ORIGINAL)
private String dateTimeOriginal;
@JsonProperty (PROPERTIES_EXPOSURE_TIME)
@JsonProperty(PROPERTIES_EXPOSURE_TIME)
private Double exposureTime;
@JsonProperty (PROPERTIES_FLASH)
@JsonProperty(PROPERTIES_FLASH)
private Boolean flash;
@JsonProperty (PROPERTIES_F_NUMBER)
@JsonProperty(PROPERTIES_F_NUMBER)
private Double fNumber;
@JsonProperty (PROPERTIES_FOCAL_LENGTH)
@JsonProperty(PROPERTIES_FOCAL_LENGTH)
private Double focalLength;
@JsonProperty (PROPERTIES_ISO_SPEED_RATINGS)
@JsonProperty(PROPERTIES_ISO_SPEED_RATINGS)
private Integer isoSpeedRatings;
@JsonProperty (PROPERTIES_MANUFACTURER)
@JsonProperty(PROPERTIES_MANUFACTURER)
private String manufacturer;
@JsonProperty (PROPERTIES_MODEL)
@JsonProperty(PROPERTIES_MODEL)
private String model;
@JsonProperty (PROPERTIES_ORIENTATION)
@JsonProperty(PROPERTIES_ORIENTATION)
private Integer orientation;
@JsonProperty (PROPERTIES_PIXEL_X_DIMENSION)
@JsonProperty(PROPERTIES_PIXEL_X_DIMENSION)
private Integer pixelXDimension;
@JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION)
@JsonProperty(PROPERTIES_PIXEL_Y_DIMENSION)
private Integer pixelYDimension;
@JsonProperty (PROPERTIES_RESOLUTION_UNIT)
@JsonProperty(PROPERTIES_RESOLUTION_UNIT)
private String resolutionUnit;
@JsonProperty (PROPERTIES_SOFTWARE)
@JsonProperty(PROPERTIES_SOFTWARE)
private String software;
@JsonProperty (PROPERTIES_X_RESOLUTION)
@JsonProperty(PROPERTIES_X_RESOLUTION)
private Double xResolution;
@JsonProperty (PROPERTIES_Y_RESOLUTION)
@JsonProperty(PROPERTIES_Y_RESOLUTION)
private Double yResolution;
@JsonProperty (PROPERTIES_ORIGINAL_NAME)
@JsonProperty(PROPERTIES_ORIGINAL_NAME)
private String originalName;
/*************************************/
/** Non-electronic record parameters */
/*************************************/
@JsonProperty (PROPERTIES_SHELF)
@JsonProperty(PROPERTIES_SHELF)
private String shelf;
@JsonProperty (PROPERTIES_STORAGE_LOCATION)
@JsonProperty(PROPERTIES_STORAGE_LOCATION)
private String storageLocation;
@JsonProperty (PROPERTIES_FILE)
@JsonProperty(PROPERTIES_FILE)
private String file;
@JsonProperty (PROPERTIES_BOX)
@JsonProperty(PROPERTIES_BOX)
private String box;
@JsonProperty (PROPERTIES_NUMBER_OF_COPIES)
@JsonProperty(PROPERTIES_NUMBER_OF_COPIES)
private Integer numberOfCopies;
@JsonProperty (PROPERTIES_PHYSICAL_SIZE)
@JsonProperty(PROPERTIES_PHYSICAL_SIZE)
private Integer physicalSize;
@JsonProperty (PROPERTIES_OWNER)
@JsonProperty(PROPERTIES_OWNER)
private Owner owner;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -31,14 +31,12 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.utility.model.TestModel;
/**
* POJO for file plan properties
@@ -51,15 +49,15 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties (ignoreUnknown = true)
public class UnfiledContainerProperties extends TestModel
{
@JsonIgnoreProperties(ignoreUnknown = true)
public class UnfiledContainerProperties extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
@JsonProperty(required = true, value = PROPERTIES_IDENTIFIER)
private String identifier;
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
@JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef;
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,20 +26,17 @@
*/
package org.alfresco.rest.rm.community.model.unfiledcontainer;
import java.util.List;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.rest.rm.community.model.record.RecordContent;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.rest.rm.community.model.record.RecordContent;
import org.alfresco.utility.model.TestModel;
/**
* POJO for unfiled container
@@ -52,33 +49,33 @@ import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class UnfiledRecordFolder extends TestModel
{
public class UnfiledRecordFolder extends TestModel {
/*************************/
/** Mandatory parameters */
/*************************/
@JsonProperty (required = true)
@JsonProperty(required = true)
private String createdAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel createdByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String modifiedAt;
@JsonProperty (required = true)
@JsonProperty(required = true)
private RestByUserModel modifiedByUser;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String name;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String id;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String nodeType;
@JsonProperty (required = true)
@JsonProperty(required = true)
private String parentId;
/************************/

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -32,8 +32,7 @@ package org.alfresco.rest.rm.community.model.user;
* @author Rodica Sutu
* @since 2.7
*/
public class UserCapabilities
{
public class UserCapabilities {
/** The id of the view records capability. */
public static final String VIEW_RECORDS_CAP = "ViewRecords";

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -28,20 +28,18 @@ package org.alfresco.rest.rm.community.model.user;
/**
* Constants for RM user capabilities
*
*
* @author Kristijan Conkas
* @since 2.6
*/
public enum UserPermissions
{
public enum UserPermissions {
PERMISSION_FILING("Filing"),
PERMISSION_READ_RECORDS("ReadRecords"),
PERMISSION_FILE_RECORDS("FileRecords");
public final String permissionId;
UserPermissions(String permissionId)
{
UserPermissions(String permissionId) {
this.permissionId = permissionId;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -33,23 +33,22 @@ package org.alfresco.rest.rm.community.model.user;
* @author Kristijan Conkas
* @since 2.6
*/
public enum UserRoles
{
public enum UserRoles {
IN_PLACE_WRITERS("ExtendedWriters", "In-Place Writers"),
ROLE_RM_ADMIN("Administrator", "Records Management Administrator"),
ROLE_RM_MANAGER("RecordsManager", "Records Management Manager"),
ROLE_RM_POWER_USER("PowerUser", "Records Management Power User"),
ROLE_RM_SECURITY_OFFICER("SecurityOfficer", "Records Management Security Officer"),
ROLE_RM_SECURITY_OFFICER(
"SecurityOfficer",
"Records Management Security Officer"
),
ROLE_RM_USER("User", "Records Management User");
public final String roleId;
public final String displayName;
UserRoles(String roleId, String displayName)
{
UserRoles(String roleId, String displayName) {
this.roleId = roleId;
this.displayName = displayName;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,11 +29,10 @@ package org.alfresco.rest.rm.community.requests;
import static lombok.AccessLevel.PRIVATE;
import static lombok.AccessLevel.PROTECTED;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.requests.ModelRequest;
import lombok.Getter;
import lombok.Setter;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.requests.ModelRequest;
/**
* Extends {@link ModelRequest} to set {@link RMRestWrapper}
@@ -41,17 +40,16 @@ import lombok.Setter;
* @author Tuna Aksoy
* @since 2.6
*/
public abstract class RMModelRequest<Request> extends ModelRequest<Request>
{
@Getter (value = PROTECTED)
@Setter (value = PRIVATE)
public abstract class RMModelRequest<Request> extends ModelRequest<Request> {
@Getter(value = PROTECTED)
@Setter(value = PRIVATE)
private RMRestWrapper rmRestWrapper;
/**
* @param rmRestWrapper
*/
public RMModelRequest(RMRestWrapper rmRestWrapper)
{
public RMModelRequest(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper.getRestWrapper());
setRmRestWrapper(rmRestWrapper);
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -30,11 +30,10 @@ import static java.lang.Integer.parseInt;
import static java.lang.String.format;
import io.restassured.RestAssured;
import org.alfresco.rest.core.RMRestProperties;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.requests.gscore.api.ActionsExecutionAPI;
import org.alfresco.rest.rm.community.requests.RMModelRequest;
import org.alfresco.rest.rm.community.requests.gscore.api.ActionsExecutionAPI;
import org.alfresco.rest.rm.community.requests.gscore.api.FilePlanAPI;
import org.alfresco.rest.rm.community.requests.gscore.api.FilesAPI;
import org.alfresco.rest.rm.community.requests.gscore.api.RMSiteAPI;
@@ -54,18 +53,25 @@ import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI
* @author Tuna Aksoy
* @since 2.6
*/
public class GSCoreAPI extends RMModelRequest
{
public class GSCoreAPI extends RMModelRequest {
/**
* Constructor
*
* @param rmRestWrapper RM REST Wrapper
* @param rmRestProperties RM REST Properties
*/
public GSCoreAPI(RMRestWrapper rmRestWrapper, RMRestProperties rmRestProperties)
{
public GSCoreAPI(
RMRestWrapper rmRestWrapper,
RMRestProperties rmRestProperties
) {
super(rmRestWrapper);
RestAssured.baseURI = format("%s://%s", rmRestProperties.getScheme(), rmRestProperties.getServer());
RestAssured.baseURI =
format(
"%s://%s",
rmRestProperties.getScheme(),
rmRestProperties.getServer()
);
RestAssured.port = parseInt(rmRestProperties.getPort());
RestAssured.basePath = rmRestProperties.getRestRmPath();
restWrapper.configureRequestSpec().setBasePath(RestAssured.basePath);
@@ -76,9 +82,8 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link RMSiteAPI}
*/
public RMSiteAPI usingRMSite()
{
return new RMSiteAPI(getRmRestWrapper());
public RMSiteAPI usingRMSite() {
return new RMSiteAPI(getRmRestWrapper());
}
/**
@@ -86,8 +91,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link FilePlanAPI}
*/
public FilePlanAPI usingFilePlans()
{
public FilePlanAPI usingFilePlans() {
return new FilePlanAPI(getRmRestWrapper());
}
@@ -96,8 +100,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link RecordCategoryAPI}
*/
public RecordCategoryAPI usingRecordCategory()
{
public RecordCategoryAPI usingRecordCategory() {
return new RecordCategoryAPI(getRmRestWrapper());
}
@@ -106,8 +109,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link RecordFolderAPI}
*/
public RecordFolderAPI usingRecordFolder()
{
public RecordFolderAPI usingRecordFolder() {
return new RecordFolderAPI(getRmRestWrapper());
}
@@ -116,8 +118,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link RecordsAPI}
*/
public RecordsAPI usingRecords()
{
public RecordsAPI usingRecords() {
return new RecordsAPI(getRmRestWrapper());
}
@@ -126,8 +127,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link FilesAPI}
*/
public FilesAPI usingFiles()
{
public FilesAPI usingFiles() {
return new FilesAPI(getRmRestWrapper());
}
@@ -136,8 +136,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link TransferContainerAPI}
*/
public TransferContainerAPI usingTransferContainer()
{
public TransferContainerAPI usingTransferContainer() {
return new TransferContainerAPI(getRmRestWrapper());
}
@@ -146,8 +145,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link TransferAPI}
*/
public TransferAPI usingTransfer()
{
public TransferAPI usingTransfer() {
return new TransferAPI(getRmRestWrapper());
}
@@ -156,8 +154,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link UnfiledContainerAPI}
*/
public UnfiledContainerAPI usingUnfiledContainers()
{
public UnfiledContainerAPI usingUnfiledContainers() {
return new UnfiledContainerAPI(getRmRestWrapper());
}
@@ -166,8 +163,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link UnfiledRecordFolderAPI}
*/
public UnfiledRecordFolderAPI usingUnfiledRecordFolder()
{
public UnfiledRecordFolderAPI usingUnfiledRecordFolder() {
return new UnfiledRecordFolderAPI(getRmRestWrapper());
}
@@ -176,8 +172,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link RMUserAPI}
*/
public RMUserAPI usingRMUser()
{
public RMUserAPI usingRMUser() {
return new RMUserAPI(getRmRestWrapper());
}
@@ -186,8 +181,7 @@ public class GSCoreAPI extends RMModelRequest
*
* @return {@link ActionsExecutionAPI}
*/
public ActionsExecutionAPI usingActionsExecutionsAPI()
{
public ActionsExecutionAPI usingActionsExecutionsAPI() {
return new ActionsExecutionAPI(getRmRestWrapper());
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,6 @@
package org.alfresco.rest.rm.community.requests.gscore.api;
import com.google.common.collect.ImmutableMap;
import lombok.SneakyThrows;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.rules.ActionsOnRule;
@@ -41,13 +40,12 @@ import org.json.JSONObject;
* @author Claudia Agache
* @since 3.1
*/
public class ActionsExecutionAPI extends RMModelRequest
{
public class ActionsExecutionAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public ActionsExecutionAPI(RMRestWrapper rmRestWrapper)
{
public ActionsExecutionAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -58,11 +56,18 @@ public class ActionsExecutionAPI extends RMModelRequest
* @param destinationPath the path to the record folder
* @throws Exception
*/
public JSONObject declareAndFile(RepoTestModel targetNode, String destinationPath) throws Exception
{
return getRmRestWrapper().withCoreAPI().usingActions()
.executeAction(ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), targetNode,
ImmutableMap.of("path", destinationPath));
public JSONObject declareAndFile(
RepoTestModel targetNode,
String destinationPath
) throws Exception {
return getRmRestWrapper()
.withCoreAPI()
.usingActions()
.executeAction(
ActionsOnRule.DECLARE_AS_RECORD.getActionValue(),
targetNode,
ImmutableMap.of("path", destinationPath)
);
}
/**
@@ -71,13 +76,17 @@ public class ActionsExecutionAPI extends RMModelRequest
* @param targetNode the node on which the action is executed
* @throws Exception
*/
public JSONObject declareAsRecord(RepoTestModel targetNode) throws Exception
{
return getRmRestWrapper().withCoreAPI().usingActions()
.executeAction(ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), targetNode);
public JSONObject declareAsRecord(RepoTestModel targetNode)
throws Exception {
return getRmRestWrapper()
.withCoreAPI()
.usingActions()
.executeAction(
ActionsOnRule.DECLARE_AS_RECORD.getActionValue(),
targetNode
);
}
/**
* Declares and file a document version as record to a record folder using v1 actions api
*
@@ -85,11 +94,18 @@ public class ActionsExecutionAPI extends RMModelRequest
* @param destinationPath the path to the record folder
* @throws Exception
*/
public JSONObject declareAndFileVersionAsRecord(RepoTestModel targetNode, String destinationPath) throws Exception
{
return getRmRestWrapper().withCoreAPI().usingActions()
.executeAction(ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), targetNode,
ImmutableMap.of("path", destinationPath));
public JSONObject declareAndFileVersionAsRecord(
RepoTestModel targetNode,
String destinationPath
) throws Exception {
return getRmRestWrapper()
.withCoreAPI()
.usingActions()
.executeAction(
ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(),
targetNode,
ImmutableMap.of("path", destinationPath)
);
}
/**
@@ -98,10 +114,15 @@ public class ActionsExecutionAPI extends RMModelRequest
* @param targetNode the node on which the action is executed
* @throws Exception
*/
public JSONObject declareVersionAsRecord(RepoTestModel targetNode) throws Exception
{
return getRmRestWrapper().withCoreAPI().usingActions()
.executeAction(ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), targetNode);
public JSONObject declareVersionAsRecord(RepoTestModel targetNode)
throws Exception {
return getRmRestWrapper()
.withCoreAPI()
.usingActions()
.executeAction(
ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(),
targetNode
);
}
/**
@@ -111,10 +132,14 @@ public class ActionsExecutionAPI extends RMModelRequest
* @throws Exception
*/
@SneakyThrows
public JSONObject addWORMLock(RepoTestModel targetNode)
{
return getRmRestWrapper().withCoreAPI().usingActions()
.executeAction(ActionsOnRule.WORM_LOCK.getActionValue(), targetNode);
public JSONObject addWORMLock(RepoTestModel targetNode) {
return getRmRestWrapper()
.withCoreAPI()
.usingActions()
.executeAction(
ActionsOnRule.WORM_LOCK.getActionValue(),
targetNode
);
}
/**
@@ -125,10 +150,20 @@ public class ActionsExecutionAPI extends RMModelRequest
* @throws Exception
*/
@SneakyThrows
public JSONObject addWORMLock(RepoTestModel targetNode, int retentionPeriod)
{
return getRmRestWrapper().withCoreAPI().usingActions()
.executeAction(ActionsOnRule.WORM_LOCK.getActionValue(), targetNode,
ImmutableMap.of("retentionPeriod", String.valueOf(retentionPeriod)));
public JSONObject addWORMLock(
RepoTestModel targetNode,
int retentionPeriod
) {
return getRmRestWrapper()
.withCoreAPI()
.usingActions()
.executeAction(
ActionsOnRule.WORM_LOCK.getActionValue(),
targetNode,
ImmutableMap.of(
"retentionPeriod",
String.valueOf(retentionPeriod)
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -49,23 +49,21 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
* @author Tuna Aksoy
* @since 2.6
*/
public class FilePlanAPI extends RMModelRequest
{
public class FilePlanAPI extends RMModelRequest {
/**
* Constructor.
*
* @param rmRestWrapper RM REST Wrapper
*/
public FilePlanAPI(RMRestWrapper rmRestWrapper)
{
public FilePlanAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
/**
* see {@link #getFilePlan(String, String)}
*/
public FilePlan getFilePlan(String filePlanId)
{
public FilePlan getFilePlan(String filePlanId) {
mandatoryString("filePlanId", filePlanId);
return getFilePlan(filePlanId, EMPTY);
@@ -85,23 +83,25 @@ public class FilePlanAPI extends RMModelRequest
* <li>{@code filePlanId} does not exist</li>
* </ul>
*/
public FilePlan getFilePlan(String filePlanId, String parameters)
{
public FilePlan getFilePlan(String filePlanId, String parameters) {
mandatoryString("filePlanId", filePlanId);
return getRmRestWrapper().processModel(FilePlan.class, simpleRequest(
GET,
"/file-plans/{filePlanId}?{parameters}",
filePlanId,
parameters
));
return getRmRestWrapper()
.processModel(
FilePlan.class,
simpleRequest(
GET,
"/file-plans/{filePlanId}?{parameters}",
filePlanId,
parameters
)
);
}
/**
* see {@link #getRootRecordCategories(String, String)}
*/
public RecordCategoryCollection getRootRecordCategories(String filePlanId)
{
public RecordCategoryCollection getRootRecordCategories(String filePlanId) {
mandatoryString("filePlanId", filePlanId);
return getRootRecordCategories(filePlanId, EMPTY);
@@ -120,23 +120,31 @@ public class FilePlanAPI extends RMModelRequest
* <li>{@code filePlanId} does not exist</li>
*</ul>
*/
public RecordCategoryCollection getRootRecordCategories(String filePlanId, String parameters)
{
public RecordCategoryCollection getRootRecordCategories(
String filePlanId,
String parameters
) {
mandatoryString("filePlanId", filePlanId);
return getRmRestWrapper().processModels(RecordCategoryCollection.class, simpleRequest(
GET,
"file-plans/{filePlanId}/categories?{parameters}",
filePlanId,
parameters
));
return getRmRestWrapper()
.processModels(
RecordCategoryCollection.class,
simpleRequest(
GET,
"file-plans/{filePlanId}/categories?{parameters}",
filePlanId,
parameters
)
);
}
/**
* see {@link #createRootRecordCategory(RecordCategory, String, String)}
*/
public RecordCategory createRootRecordCategory(RecordCategory recordCategoryModel, String filePlanId)
{
public RecordCategory createRootRecordCategory(
RecordCategory recordCategoryModel,
String filePlanId
) {
mandatoryObject("recordCategoryModel", recordCategoryModel);
mandatoryString("filePlanId", filePlanId);
@@ -160,25 +168,31 @@ public class FilePlanAPI extends RMModelRequest
* <li>model integrity exception, including node name with invalid characters</li>
* </ul>
*/
public RecordCategory createRootRecordCategory(RecordCategory recordCategoryModel, String filePlanId, String parameters)
{
public RecordCategory createRootRecordCategory(
RecordCategory recordCategoryModel,
String filePlanId,
String parameters
) {
mandatoryObject("recordCategoryModel", recordCategoryModel);
mandatoryString("filePlanId", filePlanId);
return getRmRestWrapper().processModel(RecordCategory.class, requestWithBody(
POST,
toJson(recordCategoryModel),
"file-plans/{filePlanId}/categories?{parameters}",
filePlanId,
parameters
));
return getRmRestWrapper()
.processModel(
RecordCategory.class,
requestWithBody(
POST,
toJson(recordCategoryModel),
"file-plans/{filePlanId}/categories?{parameters}",
filePlanId,
parameters
)
);
}
/**
* see {@link #updateFilePlan(FilePlan, String, String)
*/
public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId)
{
public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId) {
mandatoryObject("filePlanModel", filePlanModel);
mandatoryString("filePlanId", filePlanId);
@@ -200,17 +214,24 @@ public class FilePlanAPI extends RMModelRequest
* <li>model integrity exception, including file name with invalid characters</li>
* </ul>
*/
public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId, String parameters)
{
public FilePlan updateFilePlan(
FilePlan filePlanModel,
String filePlanId,
String parameters
) {
mandatoryObject("filePlanModel", filePlanModel);
mandatoryString("filePlanId", filePlanId);
return getRmRestWrapper().processModel(FilePlan.class, requestWithBody(
PUT,
toJson(filePlanModel),
"file-plans/{filePlanId}?{parameters}",
filePlanId,
parameters));
return getRmRestWrapper()
.processModel(
FilePlan.class,
requestWithBody(
PUT,
toJson(filePlanModel),
"file-plans/{filePlanId}?{parameters}",
filePlanId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -40,15 +40,14 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
* @author Kristijan Conkas
* @since 2.6
*/
public class FilesAPI extends RMModelRequest<FilesAPI>
{
public class FilesAPI extends RMModelRequest<FilesAPI> {
public static final String PARENT_ID_PARAM = "parentId";
/**
* @param rmRestWrapper RM REST Wrapper
*/
public FilesAPI(RMRestWrapper rmRestWrapper)
{
public FilesAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -59,16 +58,18 @@ public class FilesAPI extends RMModelRequest<FilesAPI>
* @return The {@link Record} for created record
* @throws RuntimeException for malformed JSON responses
*/
public Record declareAsRecord(String fileId)
{
public Record declareAsRecord(String fileId) {
mandatoryString("fileId", fileId);
return getRmRestWrapper().processModel(Record.class, simpleRequest(
POST,
"/files/{fileId}/declare?{parameters}",
fileId,
getRmRestWrapper().getParameters()
));
return getRmRestWrapper()
.processModel(
Record.class,
simpleRequest(
POST,
"/files/{fileId}/declare?{parameters}",
fileId,
getRmRestWrapper().getParameters()
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -46,15 +46,14 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
* @author Tuna Aksoy
* @since 2.6
*/
public class RMSiteAPI extends RMModelRequest
{
public class RMSiteAPI extends RMModelRequest {
/**
* Constructor
*
* @param rmRestWrapper RM REST Wrapper
*/
public RMSiteAPI(RMRestWrapper rmRestWrapper)
{
public RMSiteAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -70,12 +69,9 @@ public class RMSiteAPI extends RMModelRequest
* <li>Api Response code default Unexpected error</li>
* </ul>
*/
public RMSite getSite()
{
return getRmRestWrapper().processModel(RMSite.class, simpleRequest(
GET,
"gs-sites/rm"
));
public RMSite getSite() {
return getRmRestWrapper()
.processModel(RMSite.class, simpleRequest(GET, "gs-sites/rm"));
}
/**
@@ -91,15 +87,14 @@ public class RMSiteAPI extends RMModelRequest
* <li>Api Response code default Unexpected error</li>
* </ul>
*/
public RMSite createRMSite(RMSite rmSiteModel)
{
public RMSite createRMSite(RMSite rmSiteModel) {
mandatoryObject("rmSiteModel", rmSiteModel);
return getRmRestWrapper().processModel(RMSite.class, requestWithBody(
POST,
toJson(rmSiteModel),
"gs-sites"
));
return getRmRestWrapper()
.processModel(
RMSite.class,
requestWithBody(POST, toJson(rmSiteModel), "gs-sites")
);
}
/**
@@ -113,12 +108,9 @@ public class RMSiteAPI extends RMModelRequest
* <li>Api Response code default Unexpected error</li>
* </ul>
*/
public void deleteRMSite()
{
getRmRestWrapper().processEmptyModel(simpleRequest(
DELETE,
"gs-sites/rm"
));
public void deleteRMSite() {
getRmRestWrapper()
.processEmptyModel(simpleRequest(DELETE, "gs-sites/rm"));
}
/**
@@ -135,15 +127,14 @@ public class RMSiteAPI extends RMModelRequest
* <li>Api Response code default Unexpected error,model integrity exception</li>
* </ul>
*/
public RMSite updateRMSite(RMSite rmSiteModel)
{
public RMSite updateRMSite(RMSite rmSiteModel) {
mandatoryObject("rmSiteProperties", rmSiteModel);
return getRmRestWrapper().processModel(RMSite.class, requestWithBody(
PUT,
toJson(rmSiteModel),
"gs-sites/rm"
));
return getRmRestWrapper()
.processModel(
RMSite.class,
requestWithBody(PUT, toJson(rmSiteModel), "gs-sites/rm")
);
}
/**
@@ -158,9 +149,10 @@ public class RMSiteAPI extends RMModelRequest
* <li>Api Response code default Unexpected error</li>
* </ul>
*/
public boolean existsRMSite()
{
public boolean existsRMSite() {
getSite();
return getRmRestWrapper().getStatusCode().equals(String.valueOf(OK.value()));
return getRmRestWrapper()
.getStatusCode()
.equals(String.valueOf(OK.value()));
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,18 +26,16 @@
*/
package org.alfresco.rest.rm.community.requests.gscore.api;
import static io.restassured.RestAssured.basic;
import static io.restassured.RestAssured.given;
import static org.jglue.fluentjson.JsonBuilderFactory.buildObject;
import static org.springframework.http.HttpStatus.OK;
import com.google.gson.JsonObject;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import static io.restassured.RestAssured.basic;
import static io.restassured.RestAssured.given;
import org.alfresco.dataprep.AlfrescoHttpClient;
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
import org.alfresco.rest.core.RMRestProperties;
@@ -56,13 +54,12 @@ import org.alfresco.utility.model.UserModel;
// FIXME: As of December 2016 there is no v1-style API for managing RM users and users'
// roles/permissions. Until such APIs have become available, methods in this class are just proxies to
// "old-style" API calls.
public class RMUserAPI extends RMModelRequest
{
public class RMUserAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public RMUserAPI(RMRestWrapper rmRestWrapper)
{
public RMUserAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -70,8 +67,7 @@ public class RMUserAPI extends RMModelRequest
* Helper method to obtain {@link AlfrescoHttpClient}
* @return Initialized {@link AlfrescoHttpClient} instance
*/
private AlfrescoHttpClient getAlfrescoHttpClient()
{
private AlfrescoHttpClient getAlfrescoHttpClient() {
RMRestProperties properties = getRmRestWrapper().getRmRestProperties();
AlfrescoHttpClientFactory factory = new AlfrescoHttpClientFactory();
@@ -89,8 +85,7 @@ public class RMUserAPI extends RMModelRequest
* @param userRole User's RM role, one of {@link UserRoles} roles
* @throws RuntimeException for failed requests
*/
public void assignRoleToUser(String userName, String userRole)
{
public void assignRoleToUser(String userName, String userRole) {
UserModel adminUser = getRmRestWrapper().getTestUser();
// get an "old-style" REST API client
@@ -98,22 +93,29 @@ public class RMUserAPI extends RMModelRequest
// override v1 baseURI and basePath
RequestSpecification spec = new RequestSpecBuilder()
.setBaseUri(client.getApiUrl())
.setBasePath("/")
.build();
.setBaseUri(client.getApiUrl())
.setBasePath("/")
.build();
Response response = given()
.spec(spec)
.log().all()
.pathParam("role", userRole)
.pathParam("authority", userName)
.param("alf_ticket", client.getAlfTicket(adminUser.getUsername(),
adminUser.getPassword()))
.when()
.post("/rm/roles/{role}/authorities/{authority}")
.prettyPeek()
.andReturn();
getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
.spec(spec)
.log()
.all()
.pathParam("role", userRole)
.pathParam("authority", userName)
.param(
"alf_ticket",
client.getAlfTicket(
adminUser.getUsername(),
adminUser.getPassword()
)
)
.when()
.post("/rm/roles/{role}/authorities/{authority}")
.prettyPeek()
.andReturn();
getRmRestWrapper()
.setStatusCode(Integer.toString(response.getStatusCode()));
}
/**
@@ -122,40 +124,46 @@ public class RMUserAPI extends RMModelRequest
* @param user {@link UserModel} for a user to be granted permission
* @param permission {@link UserPermissions} to be granted
*/
public void addUserPermission(String filePlanComponentId, UserModel user, UserPermissions permission)
{
public void addUserPermission(
String filePlanComponentId,
UserModel user,
UserPermissions permission
) {
UserModel adminUser = getRmRestWrapper().getTestUser();
// get an "old-style" REST API client
AlfrescoHttpClient client = getAlfrescoHttpClient();
JsonObject bodyJson = buildObject()
.addArray("permissions")
.addObject()
.add("authority", user.getUsername())
.add("role", permission.permissionId)
.end()
.getJson();
.addArray("permissions")
.addObject()
.add("authority", user.getUsername())
.add("role", permission.permissionId)
.end()
.getJson();
// override v1 baseURI and basePath
RequestSpecification spec = new RequestSpecBuilder()
.setBaseUri(client.getApiUrl())
.setBasePath("/")
.build();
.setBaseUri(client.getApiUrl())
.setBasePath("/")
.build();
// execute an "old-style" API call
Response response = given()
.spec(spec)
.auth().basic(adminUser.getUsername(), adminUser.getPassword())
.contentType(ContentType.JSON)
.body(bodyJson.toString())
.pathParam("nodeId", filePlanComponentId)
.log().all()
.when()
.post("/node/workspace/SpacesStore/{nodeId}/rmpermissions")
.prettyPeek()
.andReturn();
getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
.spec(spec)
.auth()
.basic(adminUser.getUsername(), adminUser.getPassword())
.contentType(ContentType.JSON)
.body(bodyJson.toString())
.pathParam("nodeId", filePlanComponentId)
.log()
.all()
.when()
.post("/node/workspace/SpacesStore/{nodeId}/rmpermissions")
.prettyPeek()
.andReturn();
getRmRestWrapper()
.setStatusCode(Integer.toString(response.getStatusCode()));
}
/**
@@ -165,41 +173,45 @@ public class RMUserAPI extends RMModelRequest
* @param isInherited true if the permission is inherited
* false if the permission inheritance is disabled
*/
public void setUserPermissionInheritance(String filePlanComponentId, Boolean isInherited)
{
public void setUserPermissionInheritance(
String filePlanComponentId,
Boolean isInherited
) {
final UserModel adminUser = getRmRestWrapper().getTestUser();
// get an "old-style" REST API client
final AlfrescoHttpClient client = getAlfrescoHttpClient();
final JsonObject bodyJson = buildObject()
.addArray("permissions")
.end()
.add("isInherited", isInherited)
.getJson();
.addArray("permissions")
.end()
.add("isInherited", isInherited)
.getJson();
// override v1 baseURI and basePath
RequestSpecification spec = new RequestSpecBuilder()
.setBaseUri(client.getApiUrl())
.setBasePath("/")
.build();
.setBaseUri(client.getApiUrl())
.setBasePath("/")
.build();
// execute an "old-style" API call
final Response response = given()
.spec(spec)
.auth().basic(adminUser.getUsername(), adminUser.getPassword())
.contentType(ContentType.JSON)
.body(bodyJson.toString())
.pathParam("nodeId", filePlanComponentId)
.log().all()
.when()
.post("/node/workspace/SpacesStore/{nodeId}/rmpermissions")
.prettyPeek()
.andReturn();
getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
.spec(spec)
.auth()
.basic(adminUser.getUsername(), adminUser.getPassword())
.contentType(ContentType.JSON)
.body(bodyJson.toString())
.pathParam("nodeId", filePlanComponentId)
.log()
.all()
.when()
.post("/node/workspace/SpacesStore/{nodeId}/rmpermissions")
.prettyPeek()
.andReturn();
getRmRestWrapper()
.setStatusCode(Integer.toString(response.getStatusCode()));
}
/**
* Creates a user with the given name using the old APIs
*
@@ -208,8 +220,11 @@ public class RMUserAPI extends RMModelRequest
* @param userEmail The user's e-mail address
* @return <code>true</code> if the user was created successfully, <code>false</code> otherwise.
*/
public boolean createUser(String userName, String userPassword, String userEmail)
{
public boolean createUser(
String userName,
String userPassword,
String userEmail
) {
UserModel adminUser = getRmRestWrapper().getTestUser();
final AlfrescoHttpClient client = getAlfrescoHttpClient();
@@ -232,8 +247,9 @@ public class RMUserAPI extends RMModelRequest
// create POST request to "people" endpoint
Response response = given()
.spec(spec)
.log().all()
.when()
.log()
.all()
.when()
.post("people")
.prettyPeek()
.andReturn();

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -49,15 +49,14 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
* @author Tuna Aksoy
* @since 2.6
*/
public class RecordCategoryAPI extends RMModelRequest
{
public class RecordCategoryAPI extends RMModelRequest {
/**
* Constructor.
*
* @param rmRestWrapper RM REST Wrapper
*/
public RecordCategoryAPI(RMRestWrapper rmRestWrapper)
{
public RecordCategoryAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -74,22 +73,23 @@ public class RecordCategoryAPI extends RMModelRequest
* <li>{@code recordCategoryId} is locked and cannot be deleted</li>
* </ul>
*/
public void deleteRecordCategory(String recordCategoryId)
{
public void deleteRecordCategory(String recordCategoryId) {
mandatoryString("recordCategoryId", recordCategoryId);
getRmRestWrapper().processEmptyModel(simpleRequest(
DELETE,
"record-categories/{recordCategoryId}",
recordCategoryId
));
getRmRestWrapper()
.processEmptyModel(
simpleRequest(
DELETE,
"record-categories/{recordCategoryId}",
recordCategoryId
)
);
}
/**
* see {@link #getRecordCategory(String, String)}
*/
public RecordCategory getRecordCategory(String recordCategoryId)
{
public RecordCategory getRecordCategory(String recordCategoryId) {
mandatoryString("recordCategoryId", recordCategoryId);
return getRecordCategory(recordCategoryId, EMPTY);
@@ -109,27 +109,39 @@ public class RecordCategoryAPI extends RMModelRequest
* <li>{@code recordCategoryId} does not exist</li>
* </ul>
*/
public RecordCategory getRecordCategory(String recordCategoryId, String parameters)
{
public RecordCategory getRecordCategory(
String recordCategoryId,
String parameters
) {
mandatoryString("recordCategoryId", recordCategoryId);
return getRmRestWrapper().processModel(RecordCategory.class, simpleRequest(
GET,
"record-categories/{recordCategoryId}?{parameters}",
recordCategoryId,
parameters
));
return getRmRestWrapper()
.processModel(
RecordCategory.class,
simpleRequest(
GET,
"record-categories/{recordCategoryId}?{parameters}",
recordCategoryId,
parameters
)
);
}
/**
* see {@link #updateRecordCategory(RecordCategory, String, String)
*/
public RecordCategory updateRecordCategory(RecordCategory recordCategoryModel, String recordCategoryId)
{
public RecordCategory updateRecordCategory(
RecordCategory recordCategoryModel,
String recordCategoryId
) {
mandatoryObject("recordCategoryModel", recordCategoryModel);
mandatoryString("recordCategoryId", recordCategoryId);
return updateRecordCategory(recordCategoryModel, recordCategoryId, EMPTY);
return updateRecordCategory(
recordCategoryModel,
recordCategoryId,
EMPTY
);
}
/**
@@ -149,25 +161,33 @@ public class RecordCategoryAPI extends RMModelRequest
* <li>model integrity exception, including file name with invalid characters</li>
* </ul>
*/
public RecordCategory updateRecordCategory(RecordCategory recordCategoryModel, String recordCategoryId, String parameters)
{
public RecordCategory updateRecordCategory(
RecordCategory recordCategoryModel,
String recordCategoryId,
String parameters
) {
mandatoryObject("recordCategoryModel", recordCategoryModel);
mandatoryString("recordCategoryId", recordCategoryId);
return getRmRestWrapper().processModel(RecordCategory.class, requestWithBody(
PUT,
toJson(recordCategoryModel),
"record-categories/{recordCategoryId}?{parameters}",
recordCategoryId,
parameters
));
return getRmRestWrapper()
.processModel(
RecordCategory.class,
requestWithBody(
PUT,
toJson(recordCategoryModel),
"record-categories/{recordCategoryId}?{parameters}",
recordCategoryId,
parameters
)
);
}
/**
* see {@link #getRecordCategoryChildren(String, String)}
*/
public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId)
{
public RecordCategoryChildCollection getRecordCategoryChildren(
String recordCategoryId
) {
mandatoryString("recordCategoryId", recordCategoryId);
return getRecordCategoryChildren(recordCategoryId, EMPTY);
@@ -186,27 +206,39 @@ public class RecordCategoryAPI extends RMModelRequest
* <li>{@code recordCategoryId} does not exist</li>
*</ul>
*/
public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId, String parameters)
{
public RecordCategoryChildCollection getRecordCategoryChildren(
String recordCategoryId,
String parameters
) {
mandatoryString("recordCategoryId", recordCategoryId);
return getRmRestWrapper().processModels(RecordCategoryChildCollection.class, simpleRequest(
GET,
"record-categories/{recordCategoryId}/children?{parameters}",
recordCategoryId,
parameters
));
return getRmRestWrapper()
.processModels(
RecordCategoryChildCollection.class,
simpleRequest(
GET,
"record-categories/{recordCategoryId}/children?{parameters}",
recordCategoryId,
parameters
)
);
}
/**
* see {@link #createRecordCategoryChild(RecordCategoryChild, String, String)}
*/
public RecordCategoryChild createRecordCategoryChild(RecordCategoryChild recordCategoryChildModel, String recordCategoryId)
{
public RecordCategoryChild createRecordCategoryChild(
RecordCategoryChild recordCategoryChildModel,
String recordCategoryId
) {
mandatoryObject("recordCategoryChildModel", recordCategoryChildModel);
mandatoryString("recordCategoryId", recordCategoryId);
return createRecordCategoryChild(recordCategoryChildModel, recordCategoryId, EMPTY);
return createRecordCategoryChild(
recordCategoryChildModel,
recordCategoryId,
EMPTY
);
}
/**
@@ -226,17 +258,27 @@ public class RecordCategoryAPI extends RMModelRequest
* <li>model integrity exception, including node name with invalid characters</li>
* </ul>
*/
public RecordCategoryChild createRecordCategoryChild(RecordCategoryChild recordCategoryChildModel, String recordCategoryId, String parameters)
{
mandatoryObject("filePlanComponentProperties", recordCategoryChildModel);
public RecordCategoryChild createRecordCategoryChild(
RecordCategoryChild recordCategoryChildModel,
String recordCategoryId,
String parameters
) {
mandatoryObject(
"filePlanComponentProperties",
recordCategoryChildModel
);
mandatoryString("recordCategoryId", recordCategoryId);
return getRmRestWrapper().processModel(RecordCategoryChild.class, requestWithBody(
POST,
toJson(recordCategoryChildModel),
"record-categories/{recordCategoryId}/children?{parameters}",
recordCategoryId,
parameters
));
return getRmRestWrapper()
.processModel(
RecordCategoryChild.class,
requestWithBody(
POST,
toJson(recordCategoryChildModel),
"record-categories/{recordCategoryId}/children?{parameters}",
recordCategoryId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -39,15 +39,13 @@ import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.HttpMethod.PUT;
import static org.testng.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.recordfolder.RecordFolder;
@@ -61,15 +59,14 @@ import org.alfresco.rest.rm.community.util.FilePlanComponentMixIn;
* @author Tuna Aksoy
* @since 2.6
*/
public class RecordFolderAPI extends RMModelRequest
{
public class RecordFolderAPI extends RMModelRequest {
/**
* Constructor.
*
* @param rmRestWrapper RM REST Wrapper
*/
public RecordFolderAPI(RMRestWrapper rmRestWrapper)
{
public RecordFolderAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -86,22 +83,23 @@ public class RecordFolderAPI extends RMModelRequest
* <li>{@code recordFolderId} is locked and cannot be deleted</li>
* </ul>
*/
public void deleteRecordFolder(String recordFolderId)
{
public void deleteRecordFolder(String recordFolderId) {
mandatoryString("recordFolderId", recordFolderId);
getRmRestWrapper().processEmptyModel(simpleRequest(
DELETE,
"record-folders/{recordFolderId}",
recordFolderId
));
getRmRestWrapper()
.processEmptyModel(
simpleRequest(
DELETE,
"record-folders/{recordFolderId}",
recordFolderId
)
);
}
/**
* see {@link #getRecordFolder(String, String)}
*/
public RecordFolder getRecordFolder(String recordFolderId)
{
public RecordFolder getRecordFolder(String recordFolderId) {
mandatoryString("recordFolderId", recordFolderId);
return getRecordFolder(recordFolderId, EMPTY);
@@ -121,23 +119,31 @@ public class RecordFolderAPI extends RMModelRequest
* <li>{@code recordFolderId} does not exist</li>
* </ul>
*/
public RecordFolder getRecordFolder(String recordFolderId, String parameters)
{
public RecordFolder getRecordFolder(
String recordFolderId,
String parameters
) {
mandatoryString("recordFolderId", recordFolderId);
return getRmRestWrapper().processModel(RecordFolder.class, simpleRequest(
GET,
"record-folders/{recordFolderId}?{parameters}",
recordFolderId,
parameters
));
return getRmRestWrapper()
.processModel(
RecordFolder.class,
simpleRequest(
GET,
"record-folders/{recordFolderId}?{parameters}",
recordFolderId,
parameters
)
);
}
/**
* see {@link #updateRecordFolder(RecordFolder, String, String)
*/
public RecordFolder updateRecordFolder(RecordFolder recordFolderModel, String recordFolderId)
{
public RecordFolder updateRecordFolder(
RecordFolder recordFolderModel,
String recordFolderId
) {
mandatoryObject("recordFolderModel", recordFolderModel);
mandatoryString("recordFolderId", recordFolderId);
@@ -161,25 +167,33 @@ public class RecordFolderAPI extends RMModelRequest
* <li>model integrity exception, including file name with invalid characters</li>
* </ul>
*/
public RecordFolder updateRecordFolder(RecordFolder recordFolderModel, String recordFolderId, String parameters)
{
public RecordFolder updateRecordFolder(
RecordFolder recordFolderModel,
String recordFolderId,
String parameters
) {
mandatoryObject("recordFolderModel", recordFolderModel);
mandatoryString("recordFolderId", recordFolderId);
return getRmRestWrapper().processModel(RecordFolder.class, requestWithBody(
PUT,
toJson(recordFolderModel),
"record-folders/{recordFolderId}?{parameters}",
recordFolderId,
parameters
));
return getRmRestWrapper()
.processModel(
RecordFolder.class,
requestWithBody(
PUT,
toJson(recordFolderModel),
"record-folders/{recordFolderId}?{parameters}",
recordFolderId,
parameters
)
);
}
/**
* see {@link #getRecordFolderChildren(String, String)}
*/
public RecordFolderCollection getRecordFolderChildren(String recordFolderId)
{
public RecordFolderCollection getRecordFolderChildren(
String recordFolderId
) {
mandatoryString("recordFolderId", recordFolderId);
return getRecordFolderChildren(recordFolderId, EMPTY);
@@ -198,23 +212,28 @@ public class RecordFolderAPI extends RMModelRequest
* <li>{@code recordFolderId} does not exist</li>
*</ul>
*/
public RecordFolderCollection getRecordFolderChildren(String recordFolderId, String parameters)
{
public RecordFolderCollection getRecordFolderChildren(
String recordFolderId,
String parameters
) {
mandatoryString("recordFolderId", recordFolderId);
return getRmRestWrapper().processModels(RecordFolderCollection.class, simpleRequest(
GET,
"record-folders/{recordFolderId}/records?{parameters}",
recordFolderId,
parameters
));
return getRmRestWrapper()
.processModels(
RecordFolderCollection.class,
simpleRequest(
GET,
"record-folders/{recordFolderId}/records?{parameters}",
recordFolderId,
parameters
)
);
}
/**
* see {@link #createRecord(Record, String, String)}
*/
public Record createRecord(Record recordModel, String recordFolderId)
{
public Record createRecord(Record recordModel, String recordFolderId) {
mandatoryObject("recordModel", recordModel);
mandatoryString("recordFolderId", recordFolderId);
@@ -230,14 +249,16 @@ public class RecordFolderAPI extends RMModelRequest
* @return newly created {@link Record}
* @throws RuntimeException for invalid recordModel JSON strings
*/
public Record createRecord(Record recordModel, String recordFolderId, File recordContent) throws RuntimeException
{
public Record createRecord(
Record recordModel,
String recordFolderId,
File recordContent
) throws RuntimeException {
mandatoryString("recordFolderId", recordFolderId);
mandatoryObject("recordContent", recordContent);
mandatoryObject("recordModel", recordModel);
if (!recordModel.getNodeType().equals(CONTENT_TYPE))
{
if (!recordModel.getNodeType().equals(CONTENT_TYPE)) {
fail("Only electronic records are supported");
}
@@ -247,22 +268,34 @@ public class RecordFolderAPI extends RMModelRequest
*/
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
JsonNode root;
try
{
root = new ObjectMapper().readTree(toJson(recordModel, Record.class, FilePlanComponentMixIn.class));
}
catch (IOException e)
{
try {
root =
new ObjectMapper()
.readTree(
toJson(
recordModel,
Record.class,
FilePlanComponentMixIn.class
)
);
} catch (IOException e) {
throw new RuntimeException("Failed to convert model to JSON.", e);
}
// add request fields
Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext())
{
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
builder.addMultiPart(
fieldName,
root.get(fieldName).asText(),
ContentType.JSON.name()
);
}
builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name());
builder.addMultiPart(
"filedata",
recordContent,
ContentType.BINARY.name()
);
// create node with given content
return createRecord(recordModel, recordFolderId);
@@ -284,17 +317,24 @@ public class RecordFolderAPI extends RMModelRequest
* <li>model integrity exception, including node name with invalid characters</li>
* </ul>
*/
public Record createRecord(Record recordModel, String recordFolderId, String parameters)
{
public Record createRecord(
Record recordModel,
String recordFolderId,
String parameters
) {
mandatoryObject("recordModel", recordModel);
mandatoryString("recordFolderId", recordFolderId);
return getRmRestWrapper().processModel(Record.class, requestWithBody(
POST,
toJson(recordModel),
"record-folders/{recordFolderId}/records?{parameters}",
recordFolderId,
parameters
));
return getRmRestWrapper()
.processModel(
Record.class,
requestWithBody(
POST,
toJson(recordModel),
"record-folders/{recordFolderId}/records?{parameters}",
recordFolderId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -37,27 +37,24 @@ import static org.springframework.http.HttpMethod.GET;
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.HttpMethod.PUT;
import io.restassured.response.ResponseBody;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.record.RecordBodyFile;
import org.alfresco.rest.rm.community.requests.RMModelRequest;
import io.restassured.response.ResponseBody;
/**
* Records REST API Wrapper
*
* @author Rodica Sutu
* @since 2.6
*/
public class RecordsAPI extends RMModelRequest
{
public class RecordsAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public RecordsAPI(RMRestWrapper rmRestWrapper)
{
public RecordsAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
@@ -74,14 +71,14 @@ public class RecordsAPI extends RMModelRequest
* <li>{@code recordId} does not exist</li>
* </ul>
*/
public ResponseBody<?> getRecordContent(String recordId)
{
public ResponseBody<?> getRecordContent(String recordId) {
mandatoryString("recordId", recordId);
return getRmRestWrapper()
.processHtmlResponse(simpleRequest(GET,"records/{recordId}/content", recordId))
.processHtmlResponse(
simpleRequest(GET, "records/{recordId}/content", recordId)
)
.getBody();
}
/**
@@ -101,8 +98,7 @@ public class RecordsAPI extends RMModelRequest
* </ul>
*
*/
public Record fileRecord(RecordBodyFile recordBodyFile, String recordId)
{
public Record fileRecord(RecordBodyFile recordBodyFile, String recordId) {
mandatoryObject("recordBodyFile", recordBodyFile);
mandatoryString("recordId", recordId);
@@ -126,25 +122,31 @@ public class RecordsAPI extends RMModelRequest
* </ul>
*
*/
public Record fileRecord(RecordBodyFile recordBodyFile, String recordId, String parameters)
{
public Record fileRecord(
RecordBodyFile recordBodyFile,
String recordId,
String parameters
) {
mandatoryObject("requestBodyFile", recordBodyFile);
mandatoryString("recordId", recordId);
return getRmRestWrapper().processModel(Record.class, requestWithBody(
POST,
toJson(recordBodyFile),
"/records/{recordId}/file?{parameters}",
recordId,
parameters
));
return getRmRestWrapper()
.processModel(
Record.class,
requestWithBody(
POST,
toJson(recordBodyFile),
"/records/{recordId}/file?{parameters}",
recordId,
parameters
)
);
}
/**
* see {@link #completeRecord(String, String)
*/
public Record completeRecord(String recordId)
{
public Record completeRecord(String recordId) {
mandatoryString("recordId", recordId);
return completeRecord(recordId, EMPTY);
@@ -165,17 +167,21 @@ public class RecordsAPI extends RMModelRequest
* <li>model integrity exception: the record has missing meta-data</li>
* </ul>
*/
public Record completeRecord(String recordId, String parameters)
{
public Record completeRecord(String recordId, String parameters) {
mandatoryString("recordId", recordId);
return getRmRestWrapper().processModel(Record.class, simpleRequest(
POST,
"/records/{recordId}/complete?{parameters}",
recordId,
parameters
));
return getRmRestWrapper()
.processModel(
Record.class,
simpleRequest(
POST,
"/records/{recordId}/complete?{parameters}",
recordId,
parameters
)
);
}
/**
* Deletes a record.
*
@@ -189,22 +195,19 @@ public class RecordsAPI extends RMModelRequest
* <li>{@code recordId} is locked and cannot be deleted</li>
* </ul>
*/
public void deleteRecord(String recordId)
{
public void deleteRecord(String recordId) {
mandatoryString("recordId", recordId);
getRmRestWrapper().processEmptyModel(simpleRequest(
DELETE,
"records/{recordId}",
recordId
));
getRmRestWrapper()
.processEmptyModel(
simpleRequest(DELETE, "records/{recordId}", recordId)
);
}
/**
* see {@link #getRecord(String, String)}
*/
public Record getRecord(String recordId)
{
public Record getRecord(String recordId) {
mandatoryString("recordId", recordId);
return getRecord(recordId, EMPTY);
@@ -224,23 +227,25 @@ public class RecordsAPI extends RMModelRequest
* <li>{@code recordId} does not exist</li>
* </ul>
*/
public Record getRecord(String recordId, String parameters)
{
public Record getRecord(String recordId, String parameters) {
mandatoryString("recordId", recordId);
return getRmRestWrapper().processModel(Record.class, simpleRequest(
GET,
"records/{recordId}?{parameters}",
recordId,
parameters
));
return getRmRestWrapper()
.processModel(
Record.class,
simpleRequest(
GET,
"records/{recordId}?{parameters}",
recordId,
parameters
)
);
}
/**
* see {@link #updateRecord(Record, String, String)
*/
public Record updateRecord(Record recordModel, String recordId)
{
public Record updateRecord(Record recordModel, String recordId) {
mandatoryObject("recordModel", recordModel);
mandatoryString("recordId", recordId);
@@ -264,17 +269,24 @@ public class RecordsAPI extends RMModelRequest
* <li>model integrity exception, including file name with invalid characters</li>
* </ul>
*/
public Record updateRecord(Record recordModel, String recordId, String parameters)
{
public Record updateRecord(
Record recordModel,
String recordId,
String parameters
) {
mandatoryObject("recordModel", recordModel);
mandatoryString("recordId", recordId);
return getRmRestWrapper().processModel(Record.class, requestWithBody(
PUT,
toJson(recordModel),
"records/{recordId}?{parameters}",
recordId,
parameters
));
return getRmRestWrapper()
.processModel(
Record.class,
requestWithBody(
PUT,
toJson(recordModel),
"records/{recordId}?{parameters}",
recordId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -43,21 +43,19 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
* @author Silviu Dinuta
* @since 2.6
*/
public class TransferAPI extends RMModelRequest
{
public class TransferAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public TransferAPI(RMRestWrapper rmRestWrapper)
{
public TransferAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
/**
* see {@link #getTransfer(String, String)}
*/
public Transfer getTransfer(String transferId)
{
public Transfer getTransfer(String transferId) {
mandatoryString("transferId", transferId);
return getTransfer(transferId, EMPTY);
@@ -77,22 +75,25 @@ public class TransferAPI extends RMModelRequest
* <li>{@code transferId} does not exist</li>
* </ul>
*/
public Transfer getTransfer(String transferId, String parameters)
{
public Transfer getTransfer(String transferId, String parameters) {
mandatoryString("transferId", transferId);
return getRmRestWrapper().processModel(Transfer.class, simpleRequest(
GET,
"/transfers/{transferId}?{parameters}",
transferId,
parameters
));
return getRmRestWrapper()
.processModel(
Transfer.class,
simpleRequest(
GET,
"/transfers/{transferId}?{parameters}",
transferId,
parameters
)
);
}
/**
* see {@link #getTransfersChildren(String, String)}
*/
public TransferChildCollection getTransfersChildren(String transferId)
{
public TransferChildCollection getTransfersChildren(String transferId) {
mandatoryString("transferId", transferId);
return getTransfersChildren(transferId, EMPTY);
@@ -111,15 +112,21 @@ public class TransferAPI extends RMModelRequest
* <li>{@code filePlanId} does not exist</li>
*</ul>
*/
public TransferChildCollection getTransfersChildren(String transferId, String parameters)
{
public TransferChildCollection getTransfersChildren(
String transferId,
String parameters
) {
mandatoryString("transferId", transferId);
return getRmRestWrapper().processModels(TransferChildCollection.class, simpleRequest(
GET,
"transfers/{filePlanId}/children?{parameters}",
transferId,
parameters
));
return getRmRestWrapper()
.processModels(
TransferChildCollection.class,
simpleRequest(
GET,
"transfers/{filePlanId}/children?{parameters}",
transferId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -47,21 +47,19 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest;
* @author Silviu Dinuta
* @since 2.6
*/
public class TransferContainerAPI extends RMModelRequest
{
public class TransferContainerAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public TransferContainerAPI(RMRestWrapper rmRestWrapper)
{
public TransferContainerAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
/**
* see {@link #getTransferContainer(String, String)}
*/
public TransferContainer getTransferContainer(String transferContainerId)
{
public TransferContainer getTransferContainer(String transferContainerId) {
mandatoryString("transferContainerId", transferContainerId);
return getTransferContainer(transferContainerId, EMPTY);
@@ -81,27 +79,39 @@ public class TransferContainerAPI extends RMModelRequest
* <li>{@code transferContainerId} does not exist</li>
* </ul>
*/
public TransferContainer getTransferContainer(String transferContainerId, String parameters)
{
public TransferContainer getTransferContainer(
String transferContainerId,
String parameters
) {
mandatoryString("transferContainerId", transferContainerId);
return getRmRestWrapper().processModel(TransferContainer.class, simpleRequest(
GET,
"/transfer-containers/{transferContainerId}?{parameters}",
transferContainerId,
parameters
));
return getRmRestWrapper()
.processModel(
TransferContainer.class,
simpleRequest(
GET,
"/transfer-containers/{transferContainerId}?{parameters}",
transferContainerId,
parameters
)
);
}
/**
* see {@link #updateTransferContainer(TransferContainer, String, String)
*/
public TransferContainer updateTransferContainer(TransferContainer transferContainerModel, String transferContainerId)
{
public TransferContainer updateTransferContainer(
TransferContainer transferContainerModel,
String transferContainerId
) {
mandatoryObject("transferContainerModel", transferContainerModel);
mandatoryString("transferContainerId", transferContainerId);
return updateTransferContainer(transferContainerModel, transferContainerId, EMPTY);
return updateTransferContainer(
transferContainerModel,
transferContainerId,
EMPTY
);
}
/**
@@ -121,25 +131,31 @@ public class TransferContainerAPI extends RMModelRequest
* <li>model integrity exception, including transfer container name with invalid characters</li>
* </ul>
*/
public TransferContainer updateTransferContainer(TransferContainer transferContainerModel, String transferContainerId, String parameters)
{
public TransferContainer updateTransferContainer(
TransferContainer transferContainerModel,
String transferContainerId,
String parameters
) {
mandatoryObject("transferContainerModel", transferContainerModel);
mandatoryString("transferContainerId", transferContainerId);
return getRmRestWrapper().processModel(TransferContainer.class, requestWithBody(
PUT,
toJson(transferContainerModel),
"transfer-containers/{transferContainerId}?{parameters}",
transferContainerId,
parameters
));
return getRmRestWrapper()
.processModel(
TransferContainer.class,
requestWithBody(
PUT,
toJson(transferContainerModel),
"transfer-containers/{transferContainerId}?{parameters}",
transferContainerId,
parameters
)
);
}
/**
* see {@link #getTransfers(String, String)}
*/
public TransferCollection getTransfers(String transferContainerId)
{
public TransferCollection getTransfers(String transferContainerId) {
mandatoryString("transferContainerId", transferContainerId);
return getTransfers(transferContainerId, EMPTY);
@@ -158,15 +174,21 @@ public class TransferContainerAPI extends RMModelRequest
* <li>{@code filePlanId} does not exist</li>
*</ul>
*/
public TransferCollection getTransfers(String transferContainerId, String parameters)
{
public TransferCollection getTransfers(
String transferContainerId,
String parameters
) {
mandatoryString("transferContainerId", transferContainerId);
return getRmRestWrapper().processModels(TransferCollection.class, simpleRequest(
GET,
"transfer-containers/{filePlanId}/transfers?{parameters}",
transferContainerId,
parameters
));
return getRmRestWrapper()
.processModels(
TransferCollection.class,
simpleRequest(
GET,
"transfer-containers/{filePlanId}/transfers?{parameters}",
transferContainerId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -38,16 +38,13 @@ import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.HttpMethod.PUT;
import static org.testng.Assert.fail;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
@@ -62,21 +59,19 @@ import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
* @author Ana Bozianu
* @since 2.6
*/
public class UnfiledContainerAPI extends RMModelRequest
{
public class UnfiledContainerAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public UnfiledContainerAPI(RMRestWrapper rmRestWrapper)
{
public UnfiledContainerAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
/**
* see {@link #getUnfiledContainer(String, String)}
*/
public UnfiledContainer getUnfiledContainer(String unfiledContainerId)
{
public UnfiledContainer getUnfiledContainer(String unfiledContainerId) {
mandatoryString("unfiledContainerId", unfiledContainerId);
return getUnfiledContainer(unfiledContainerId, EMPTY);
@@ -96,23 +91,30 @@ public class UnfiledContainerAPI extends RMModelRequest
* <li>{@code unfiledContainerId} does not exist</li>
* </ul>
*/
public UnfiledContainer getUnfiledContainer(String unfiledContainerId, String parameters)
{
public UnfiledContainer getUnfiledContainer(
String unfiledContainerId,
String parameters
) {
mandatoryString("unfiledContainerId", unfiledContainerId);
return getRmRestWrapper().processModel(UnfiledContainer.class, simpleRequest(
GET,
"unfiled-containers/{unfiledContainerId}?{parameters}",
unfiledContainerId,
parameters
));
return getRmRestWrapper()
.processModel(
UnfiledContainer.class,
simpleRequest(
GET,
"unfiled-containers/{unfiledContainerId}?{parameters}",
unfiledContainerId,
parameters
)
);
}
/**
* see {@link #getUnfiledContainerChildren(String)} (String, String)}
*/
public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId)
{
public UnfiledContainerChildCollection getUnfiledContainerChildren(
String unfiledContainerId
) {
mandatoryString("unfiledContainerId", unfiledContainerId);
return getUnfiledContainerChildren(unfiledContainerId, EMPTY);
@@ -131,27 +133,42 @@ public class UnfiledContainerAPI extends RMModelRequest
* <li>{@code unfiledContainerId} does not exist</li>
*</ul>
*/
public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId, String parameters)
{
public UnfiledContainerChildCollection getUnfiledContainerChildren(
String unfiledContainerId,
String parameters
) {
mandatoryString("unfiledContainerId", unfiledContainerId);
return getRmRestWrapper().processModels(UnfiledContainerChildCollection.class, simpleRequest(
GET,
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
unfiledContainerId,
parameters
));
return getRmRestWrapper()
.processModels(
UnfiledContainerChildCollection.class,
simpleRequest(
GET,
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
unfiledContainerId,
parameters
)
);
}
/**
* see {@link #createUnfiledContainerChild(UnfiledContainerChild, String, String)}
*/
public UnfiledContainerChild createUnfiledContainerChild(UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId)
{
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
public UnfiledContainerChild createUnfiledContainerChild(
UnfiledContainerChild unfiledContainerChildModel,
String unfiledContainerId
) {
mandatoryObject(
"unfiledContainerChildModel",
unfiledContainerChildModel
);
mandatoryString("unfiledContainerId", unfiledContainerId);
return createUnfiledContainerChild(unfiledContainerChildModel, unfiledContainerId, EMPTY);
return createUnfiledContainerChild(
unfiledContainerChildModel,
unfiledContainerId,
EMPTY
);
}
/**
@@ -171,18 +188,28 @@ public class UnfiledContainerAPI extends RMModelRequest
* <li>model integrity exception, including node name with invalid characters</li>
* </ul>
*/
public UnfiledContainerChild createUnfiledContainerChild(UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId, String parameters)
{
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
public UnfiledContainerChild createUnfiledContainerChild(
UnfiledContainerChild unfiledContainerChildModel,
String unfiledContainerId,
String parameters
) {
mandatoryObject(
"unfiledContainerChildModel",
unfiledContainerChildModel
);
mandatoryString("unfiledContainerId", unfiledContainerId);
return getRmRestWrapper().processModel(UnfiledContainerChild.class, requestWithBody(
POST,
toJson(unfiledContainerChildModel),
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
unfiledContainerId,
parameters
));
return getRmRestWrapper()
.processModel(
UnfiledContainerChild.class,
requestWithBody(
POST,
toJson(unfiledContainerChildModel),
"unfiled-containers/{unfiledContainerId}/children?{parameters}",
unfiledContainerId,
parameters
)
);
}
/**
@@ -194,14 +221,22 @@ public class UnfiledContainerAPI extends RMModelRequest
* @return newly created {@link UnfiledContainerChild}
* @throws RuntimeException for invalid recordModel JSON strings
*/
public UnfiledContainerChild uploadRecord(UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId, File unfiledContainerChildContent)
{
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
mandatoryObject("unfiledContainerChildContent", unfiledContainerChildContent);
public UnfiledContainerChild uploadRecord(
UnfiledContainerChild unfiledContainerChildModel,
String unfiledContainerId,
File unfiledContainerChildContent
) {
mandatoryObject(
"unfiledContainerChildModel",
unfiledContainerChildModel
);
mandatoryObject(
"unfiledContainerChildContent",
unfiledContainerChildContent
);
mandatoryString("unfiledContainerId", unfiledContainerId);
if (!unfiledContainerChildModel.getNodeType().equals(CONTENT_TYPE))
{
if (!unfiledContainerChildModel.getNodeType().equals(CONTENT_TYPE)) {
fail("Only electronic records are supported");
}
@@ -211,36 +246,57 @@ public class UnfiledContainerAPI extends RMModelRequest
*/
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
JsonNode root;
try
{
root = new ObjectMapper().readTree(toJson(unfiledContainerChildModel, UnfiledContainerChild.class, UnfiledContainerChildMixin.class));
}
catch (IOException e)
{
try {
root =
new ObjectMapper()
.readTree(
toJson(
unfiledContainerChildModel,
UnfiledContainerChild.class,
UnfiledContainerChildMixin.class
)
);
} catch (IOException e) {
throw new RuntimeException("Failed to convert model to JSON.", e);
}
// add request fields
Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext())
{
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
builder.addMultiPart(
fieldName,
root.get(fieldName).asText(),
ContentType.JSON.name()
);
}
builder.addMultiPart("filedata", unfiledContainerChildContent, ContentType.BINARY.name());
builder.addMultiPart(
"filedata",
unfiledContainerChildContent,
ContentType.BINARY.name()
);
// create node with given content
return createUnfiledContainerChild(unfiledContainerChildModel, unfiledContainerId);
return createUnfiledContainerChild(
unfiledContainerChildModel,
unfiledContainerId
);
}
/**
* see {@link #updateUnfiledContainer(UnfiledContainer, String, String)
*/
public UnfiledContainer updateUnfiledContainer(UnfiledContainer unfiledContainerModel, String unfiledContainerId)
{
public UnfiledContainer updateUnfiledContainer(
UnfiledContainer unfiledContainerModel,
String unfiledContainerId
) {
mandatoryObject("unfiledContainerModel", unfiledContainerModel);
mandatoryString("unfiledContainerId", unfiledContainerId);
return updateUnfiledContainer(unfiledContainerModel, unfiledContainerId, EMPTY);
return updateUnfiledContainer(
unfiledContainerModel,
unfiledContainerId,
EMPTY
);
}
/**
@@ -260,18 +316,24 @@ public class UnfiledContainerAPI extends RMModelRequest
* <li>model integrity exception, including file name with invalid characters</li>
* </ul>
*/
public UnfiledContainer updateUnfiledContainer(UnfiledContainer unfiledContainerModel, String unfiledContainerId, String parameters)
{
public UnfiledContainer updateUnfiledContainer(
UnfiledContainer unfiledContainerModel,
String unfiledContainerId,
String parameters
) {
mandatoryObject("unfiledContainerModel", unfiledContainerModel);
mandatoryString("unfiledContainerId", unfiledContainerId);
return getRmRestWrapper().processModel(UnfiledContainer.class, requestWithBody(
PUT,
toJson(unfiledContainerModel),
"unfiled-containers/{unfiledContainerId}?{parameters}",
unfiledContainerId,
parameters
));
return getRmRestWrapper()
.processModel(
UnfiledContainer.class,
requestWithBody(
PUT,
toJson(unfiledContainerModel),
"unfiled-containers/{unfiledContainerId}?{parameters}",
unfiledContainerId,
parameters
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -39,15 +39,13 @@ import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.HttpMethod.PUT;
import static org.testng.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
@@ -61,21 +59,21 @@ import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
* @author Ramona Popa
* @since 2.6
*/
public class UnfiledRecordFolderAPI extends RMModelRequest
{
public class UnfiledRecordFolderAPI extends RMModelRequest {
/**
* @param rmRestWrapper RM REST Wrapper
*/
public UnfiledRecordFolderAPI(RMRestWrapper rmRestWrapper)
{
public UnfiledRecordFolderAPI(RMRestWrapper rmRestWrapper) {
super(rmRestWrapper);
}
/**
* see {@link #getUnfiledRecordFolder(String, String)}
*/
public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId)
{
public UnfiledRecordFolder getUnfiledRecordFolder(
String unfiledRecordFolderId
) {
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return getUnfiledRecordFolder(unfiledRecordFolderId, EMPTY);
@@ -95,23 +93,30 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* <li>{@code unfiledRecordFolderId} does not exist</li>
* </ul>
*/
public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId, String parameters)
{
public UnfiledRecordFolder getUnfiledRecordFolder(
String unfiledRecordFolderId,
String parameters
) {
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return getRmRestWrapper().processModel(UnfiledRecordFolder.class, simpleRequest(
GET,
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
unfiledRecordFolderId,
parameters
));
return getRmRestWrapper()
.processModel(
UnfiledRecordFolder.class,
simpleRequest(
GET,
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
unfiledRecordFolderId,
parameters
)
);
}
/**
* see {@link #getUnfiledRecordFolderChildren(String, String)}
*/
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(String unfiledRecordFolderId)
{
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(
String unfiledRecordFolderId
) {
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return getUnfiledRecordFolderChildren(unfiledRecordFolderId, EMPTY);
@@ -130,27 +135,42 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* <li>{@code unfiledRecordFolderId} does not exist</li>
*</ul>
*/
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(String unfiledRecordFolderId, String parameters)
{
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(
String unfiledRecordFolderId,
String parameters
) {
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return getRmRestWrapper().processModels(UnfiledContainerChildCollection.class, simpleRequest(
GET,
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
unfiledRecordFolderId,
parameters
));
return getRmRestWrapper()
.processModels(
UnfiledContainerChildCollection.class,
simpleRequest(
GET,
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
unfiledRecordFolderId,
parameters
)
);
}
/**
* see {@link #createUnfiledRecordFolderChild(UnfiledContainerChild, String, String)}
*/
public UnfiledContainerChild createUnfiledRecordFolderChild(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId)
{
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
public UnfiledContainerChild createUnfiledRecordFolderChild(
UnfiledContainerChild unfiledRecordFolderChildModel,
String unfiledRecordFolderId
) {
mandatoryObject(
"unfiledRecordFolderChildModel",
unfiledRecordFolderChildModel
);
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return createUnfiledRecordFolderChild(unfiledRecordFolderChildModel, unfiledRecordFolderId, EMPTY);
return createUnfiledRecordFolderChild(
unfiledRecordFolderChildModel,
unfiledRecordFolderId,
EMPTY
);
}
/**
@@ -170,18 +190,28 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* <li>model integrity exception, including node name with invalid characters</li>
* </ul>
*/
public UnfiledContainerChild createUnfiledRecordFolderChild(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId, String parameters)
{
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
public UnfiledContainerChild createUnfiledRecordFolderChild(
UnfiledContainerChild unfiledRecordFolderChildModel,
String unfiledRecordFolderId,
String parameters
) {
mandatoryObject(
"unfiledRecordFolderChildModel",
unfiledRecordFolderChildModel
);
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return getRmRestWrapper().processModel(UnfiledContainerChild.class, requestWithBody(
POST,
toJson(unfiledRecordFolderChildModel),
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
unfiledRecordFolderId,
parameters
));
return getRmRestWrapper()
.processModel(
UnfiledContainerChild.class,
requestWithBody(
POST,
toJson(unfiledRecordFolderChildModel),
"unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}",
unfiledRecordFolderId,
parameters
)
);
}
/**
@@ -193,14 +223,22 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* @return newly created {@link UnfiledContainerChild}
* @throws RuntimeException for invalid recordModel JSON strings
*/
public UnfiledContainerChild uploadRecord(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId, File unfiledRecordFolderChildContent)
{
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
mandatoryObject("unfiledRecordFolderChildContent", unfiledRecordFolderChildContent);
public UnfiledContainerChild uploadRecord(
UnfiledContainerChild unfiledRecordFolderChildModel,
String unfiledRecordFolderId,
File unfiledRecordFolderChildContent
) {
mandatoryObject(
"unfiledRecordFolderChildModel",
unfiledRecordFolderChildModel
);
mandatoryObject(
"unfiledRecordFolderChildContent",
unfiledRecordFolderChildContent
);
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
if (!unfiledRecordFolderChildModel.getNodeType().equals(CONTENT_TYPE))
{
if (!unfiledRecordFolderChildModel.getNodeType().equals(CONTENT_TYPE)) {
fail("Only electronic records are supported");
}
@@ -210,36 +248,57 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
*/
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
JsonNode root;
try
{
root = new ObjectMapper().readTree(toJson(unfiledRecordFolderChildModel, UnfiledContainerChild.class, UnfiledContainerChildMixin.class));
}
catch (IOException e)
{
try {
root =
new ObjectMapper()
.readTree(
toJson(
unfiledRecordFolderChildModel,
UnfiledContainerChild.class,
UnfiledContainerChildMixin.class
)
);
} catch (IOException e) {
throw new RuntimeException("Failed to convert model to JSON.", e);
}
// add request fields
Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext())
{
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
builder.addMultiPart(
fieldName,
root.get(fieldName).asText(),
ContentType.JSON.name()
);
}
builder.addMultiPart("filedata", unfiledRecordFolderChildContent, ContentType.BINARY.name());
builder.addMultiPart(
"filedata",
unfiledRecordFolderChildContent,
ContentType.BINARY.name()
);
// create node with given content
return createUnfiledRecordFolderChild(unfiledRecordFolderChildModel, unfiledRecordFolderId);
return createUnfiledRecordFolderChild(
unfiledRecordFolderChildModel,
unfiledRecordFolderId
);
}
/**
* see {@link #updateUnfiledRecordFolder(UnfiledRecordFolder, String, String)
*/
public UnfiledRecordFolder updateUnfiledRecordFolder(UnfiledRecordFolder unfiledRecordFolderModel, String unfiledRecordFolderId)
{
public UnfiledRecordFolder updateUnfiledRecordFolder(
UnfiledRecordFolder unfiledRecordFolderModel,
String unfiledRecordFolderId
) {
mandatoryObject("unfiledRecordFolderModel", unfiledRecordFolderModel);
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return updateUnfiledRecordFolder(unfiledRecordFolderModel, unfiledRecordFolderId, EMPTY);
return updateUnfiledRecordFolder(
unfiledRecordFolderModel,
unfiledRecordFolderId,
EMPTY
);
}
/**
@@ -259,18 +318,25 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* <li>model integrity exception, including file name with invalid characters</li>
* </ul>
*/
public UnfiledRecordFolder updateUnfiledRecordFolder(UnfiledRecordFolder unfiledRecordFolderModel, String unfiledRecordFolderId, String parameters)
{
public UnfiledRecordFolder updateUnfiledRecordFolder(
UnfiledRecordFolder unfiledRecordFolderModel,
String unfiledRecordFolderId,
String parameters
) {
mandatoryObject("unfiledRecordFolderModel", unfiledRecordFolderModel);
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
return getRmRestWrapper().processModel(UnfiledRecordFolder.class, requestWithBody(
PUT,
toJson(unfiledRecordFolderModel),
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
unfiledRecordFolderId,
parameters
));
return getRmRestWrapper()
.processModel(
UnfiledRecordFolder.class,
requestWithBody(
PUT,
toJson(unfiledRecordFolderModel),
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
unfiledRecordFolderId,
parameters
)
);
}
/**
@@ -286,15 +352,16 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* <li>{@code unfiledRecordFolderId} is locked and cannot be deleted</li>
* </ul>
*/
public void deleteUnfiledRecordFolder(String unfiledRecordFolderId)
{
public void deleteUnfiledRecordFolder(String unfiledRecordFolderId) {
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
getRmRestWrapper().processEmptyModel(simpleRequest(
DELETE,
"unfiled-record-folders/{recordFolderId}",
unfiledRecordFolderId
));
getRmRestWrapper()
.processEmptyModel(
simpleRequest(
DELETE,
"unfiled-record-folders/{recordFolderId}",
unfiledRecordFolderId
)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -35,24 +35,24 @@ import java.util.UUID;
* @author Tom Page
* @since 2.6
*/
public class CommonTestUtils
{
public class CommonTestUtils {
/**
* The default pattern used for the user full name when users are created with tas utility
*/
public static final String USER_FULLNAME_PATTERN = "FN-%1$s LN-%1$s";
/** Private constructor to prevent instantiation. */
private CommonTestUtils()
{
}
private CommonTestUtils() {}
/**
* Generate a prefix to namespace the objects in a test class. Note that four random hex digits should be good enough to avoid
* collisions when running locally and should also be short enough to maintain readability.
*/
public static String generateTestPrefix(Class<?> clazz)
{
return clazz.getSimpleName().substring(0, 7) + UUID.randomUUID().toString().substring(0, 4).toUpperCase();
public static String generateTestPrefix(Class<?> clazz) {
return (
clazz.getSimpleName().substring(0, 7) +
UUID.randomUUID().toString().substring(0, 4).toUpperCase()
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,11 +29,6 @@ package org.alfresco.rest.rm.community.util;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.LogContainerCmd;
import com.github.dockerjava.api.model.Container;
@@ -41,7 +36,10 @@ import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.command.LogContainerResultCallback;
import com.github.dockerjava.netty.NettyDockerCmdExecFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import lombok.Getter;
import lombok.Setter;
import org.alfresco.utility.Utility;
@@ -59,30 +57,31 @@ import org.springframework.stereotype.Service;
* @since 3.1
*/
@Service
public class DockerHelper
{
private static final Logger LOGGER = LoggerFactory.getLogger(DockerHelper.class);
public class DockerHelper {
private static final Logger LOGGER = LoggerFactory.getLogger(
DockerHelper.class
);
private static final String REPO_IMAGE_NAME = "repository";
@Getter
@Setter
private DockerClient dockerClient;
@Autowired
public DockerHelper(@Value ("${docker.host}") String dockerHost)
{
if (SystemUtils.IS_OS_WINDOWS)
{
this.dockerClient = DockerClientBuilder
.getInstance(dockerHost)
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
.build();
}
else
{
this.dockerClient = DockerClientBuilder
.getInstance()
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
.build();
public DockerHelper(@Value("${docker.host}") String dockerHost) {
if (SystemUtils.IS_OS_WINDOWS) {
this.dockerClient =
DockerClientBuilder
.getInstance(dockerHost)
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
.build();
} else {
this.dockerClient =
DockerClientBuilder
.getInstance()
.withDockerCmdExecFactory(new NettyDockerCmdExecFactory())
.build();
}
}
@@ -93,31 +92,34 @@ public class DockerHelper
* @param timeStamp - get the logs since a specific timestamp
* @return list of strings, where every string is log line
*/
private List<String> getDockerLogs(String containerId, int timeStamp)
{
private List<String> getDockerLogs(String containerId, int timeStamp) {
final List<String> logs = new ArrayList<>();
final LogContainerCmd logContainerCmd = getDockerClient().logContainerCmd(containerId);
logContainerCmd.withStdOut(true)
.withStdErr(true)
.withSince(timeStamp) // UNIX timestamp to filter logs. Output log-entries since that timestamp.
.withTimestamps(true); //print timestamps for every log line
final LogContainerCmd logContainerCmd = getDockerClient()
.logContainerCmd(containerId);
logContainerCmd
.withStdOut(true)
.withStdErr(true)
.withSince(timeStamp) // UNIX timestamp to filter logs. Output log-entries since that timestamp.
.withTimestamps(true); //print timestamps for every log line
try
{
logContainerCmd.exec(new LogContainerResultCallback()
{
@Override
public void onNext(Frame item)
{
logs.add(item.toString());
}
}).awaitCompletion();
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt(); // set interrupt flag
LOGGER.error("Failed to retrieve logs of container " + containerId, e);
try {
logContainerCmd
.exec(
new LogContainerResultCallback() {
@Override
public void onNext(Frame item) {
logs.add(item.toString());
}
}
)
.awaitCompletion();
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // set interrupt flag
LOGGER.error(
"Failed to retrieve logs of container " + containerId,
e
);
}
return logs;
@@ -128,19 +130,22 @@ public class DockerHelper
*
* @return list of strings, where every string is log line
*/
public List<String> getAlfrescoLogs()
{
final List<Container> alfrescoContainers = findContainersByImageName(REPO_IMAGE_NAME);
if (alfrescoContainers.isEmpty())
{
public List<String> getAlfrescoLogs() {
final List<Container> alfrescoContainers = findContainersByImageName(
REPO_IMAGE_NAME
);
if (alfrescoContainers.isEmpty()) {
return Collections.emptyList();
}
else
{
} else {
List<String> alfrescoLogs = new ArrayList<>();
// get the logs since current time - 10 seconds
final int timeStamp = (int) (System.currentTimeMillis() / 1000) - 10;
alfrescoContainers.forEach(alfrescoContainer -> alfrescoLogs.addAll(getDockerLogs(alfrescoContainer.getId(), timeStamp)));
final int timeStamp = (int) (System.currentTimeMillis() / 1000) -
10;
alfrescoContainers.forEach(alfrescoContainer ->
alfrescoLogs.addAll(
getDockerLogs(alfrescoContainer.getId(), timeStamp)
)
);
return alfrescoLogs;
}
}
@@ -151,14 +156,22 @@ public class DockerHelper
* @param expectedException the expected exception to be thrown
* @throws Exception
*/
public void checkExceptionIsInAlfrescoLogs(String expectedException) throws Exception
{
public void checkExceptionIsInAlfrescoLogs(String expectedException)
throws Exception {
//Retry the operation because sometimes it takes few seconds to throw the exception
Utility.sleep(6000, 30000, () ->
{
List<String> alfrescoLogs = getAlfrescoLogs();
assertTrue(alfrescoLogs.stream().anyMatch(logLine -> logLine.contains(expectedException)));
});
Utility.sleep(
6000,
30000,
() -> {
List<String> alfrescoLogs = getAlfrescoLogs();
assertTrue(
alfrescoLogs
.stream()
.anyMatch(logLine -> logLine.contains(expectedException)
)
);
}
);
}
/**
@@ -167,12 +180,15 @@ public class DockerHelper
* @param imageName - the name of the image used by container
* @return the containers
*/
private List<Container> findContainersByImageName(String imageName)
{
final List<Container> containers = getDockerClient().listContainersCmd().withShowAll(true).exec();
private List<Container> findContainersByImageName(String imageName) {
final List<Container> containers = getDockerClient()
.listContainersCmd()
.withShowAll(true)
.exec();
return containers.stream()
.filter(container -> container.getImage().contains(imageName))
.collect(Collectors.toList());
return containers
.stream()
.filter(container -> container.getImage().contains(imageName))
.collect(Collectors.toList());
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,6 @@
package org.alfresco.rest.rm.community.util;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import org.alfresco.rest.rm.community.model.record.RecordProperties;
/**
@@ -38,8 +37,8 @@ import org.alfresco.rest.rm.community.model.record.RecordProperties;
* @author Rodica Sutu
* @since 2.6
*/
public abstract class FilePlanComponentMixIn
{
public abstract class FilePlanComponentMixIn {
/**
* Annotation used to indicate that a property should be serialized "unwrapped"
* Its properties are instead included as properties of its containing Object

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -34,10 +34,9 @@ import static org.apache.commons.lang3.StringUtils.isBlank;
* @author Tuna Aksoy
* @since 2.6
*/
public class ParameterCheck
{
private ParameterCheck()
{
public class ParameterCheck {
private ParameterCheck() {
// Intentionally blank
}
@@ -48,11 +47,14 @@ public class ParameterCheck
* @param paramValue The value of the parameter to check
* @throws IllegalArgumentException Throws an exception if the given value is blank
*/
public static void mandatoryString(final String paramName, final String paramValue) throws IllegalArgumentException
{
if (isBlank(paramValue))
{
throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter.");
public static void mandatoryString(
final String paramName,
final String paramValue
) throws IllegalArgumentException {
if (isBlank(paramValue)) {
throw new IllegalArgumentException(
"'" + paramName + "' is a mandatory parameter."
);
}
}
@@ -63,11 +65,14 @@ public class ParameterCheck
* @param object The value of the parameter to check
* @throws IllegalArgumentException Throws an exception if the given value is null
*/
public static void mandatoryObject(final String paramName, final Object object) throws IllegalArgumentException
{
if (object == null)
{
throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter.");
public static void mandatoryObject(
final String paramName,
final Object object
) throws IllegalArgumentException {
if (object == null) {
throw new IllegalArgumentException(
"'" + paramName + "' is a mandatory parameter."
);
}
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -28,14 +28,12 @@ package org.alfresco.rest.rm.community.util;
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import java.io.IOException;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -47,22 +45,22 @@ import org.slf4j.LoggerFactory;
* @author Rodica Sutu
* @since 2.6
*/
public class PojoUtility
{
public class PojoUtility {
/**
* Logger for the class.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(PojoUtility.class);
private static final Logger LOGGER = LoggerFactory.getLogger(
PojoUtility.class
);
/** Private constructor to prevent instantiation. */
private PojoUtility()
{}
private PojoUtility() {}
/**
* see {@link #toJson(Object, Class, Class)}
*/
public static String toJson(Object model)
{
public static String toJson(Object model) {
mandatoryObject("model", model);
return toJson(model, null, null);
@@ -77,14 +75,16 @@ public class PojoUtility
* @return The converted java object as JSON string
* @throws JsonProcessingException Throws exceptions if the given object doesn't match to the POJO class model
*/
public static String toJson(Object model, Class<?> target, Class<?> mixinSource)
{
public static String toJson(
Object model,
Class<?> target,
Class<?> mixinSource
) {
mandatoryObject("model", model);
ObjectMapper mapper = new ObjectMapper();
if (target != null && mixinSource != null)
{
if (target != null && mixinSource != null) {
//inject the "mix-in" annotations from FilePlanComponentMix to
// FilePlanComponent POJO class when converting to json
mapper.addMixIn(target, mixinSource);
@@ -94,12 +94,11 @@ public class PojoUtility
mapper.setSerializationInclusion(Include.NON_NULL);
//return the json object
try
{
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(model);
}
catch (JsonProcessingException error)
{
try {
return mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(model);
} catch (JsonProcessingException error) {
return error.toString();
}
}
@@ -112,20 +111,16 @@ public class PojoUtility
* @return The converted java object
* @throws JsonProcessingException Throws exceptions if the given object doesn't match to the POJO class model
*/
public static <T> T jsonToObject(JSONObject json, Class<T> classz)
{
public static <T> T jsonToObject(JSONObject json, Class<T> classz) {
mandatoryObject("model", classz);
mandatoryObject("jsonObject", json);
ObjectMapper mapper = new ObjectMapper();
T obj = null;
try
{
try {
obj = mapper.readValue(json.toString(), classz);
}
catch (IOException e)
{
} catch (IOException e) {
LOGGER.error("Unable to convert the json into a java object.", e);
}
@@ -140,27 +135,25 @@ public class PojoUtility
* @return The list of converted java objects
* @throws JsonProcessingException Throws exceptions if the given object doesn't match to the POJO class model
*/
public static <T> List<T> jsonToObject(JSONArray json, Class<T> classz)
{
public static <T> List<T> jsonToObject(JSONArray json, Class<T> classz) {
mandatoryObject("model", classz);
mandatoryObject("jsonObject", json);
ObjectMapper mapper = new ObjectMapper();
CollectionType collectionType = mapper.getTypeFactory().constructCollectionType(List.class, classz);
CollectionType collectionType = mapper
.getTypeFactory()
.constructCollectionType(List.class, classz);
List<T> asList = null;
try
{
try {
asList = mapper.readValue(json.toString(), collectionType);
} catch (IOException e) {
LOGGER.error(
"Unable to convert the json array into a java collection.",
e
);
}
catch (IOException e)
{
LOGGER.error("Unable to convert the json array into a java collection.", e);
}
return asList;
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,13 +26,11 @@
*/
package org.alfresco.rest.rm.community.util;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
/**
@@ -41,8 +39,8 @@ import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
* @author Rodica Sutu
* @since 2.6
*/
public class ReviewPeriodSerializer extends JsonSerializer<ReviewPeriod>
{
public class ReviewPeriodSerializer extends JsonSerializer<ReviewPeriod> {
/**
* @param value The Review Period value that is being serialized.
* @param gen Jackson utility is responsible for writing JSON
@@ -51,9 +49,18 @@ public class ReviewPeriodSerializer extends JsonSerializer<ReviewPeriod>
* @throws JsonProcessingException
*/
@Override
public void serialize(ReviewPeriod value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException
{
public void serialize(
ReviewPeriod value,
JsonGenerator gen,
SerializerProvider serializers
) throws IOException, JsonProcessingException {
//create the custom string value for the Review Period type
gen.writeString(new StringBuilder().append(value.getPeriodType()).append("|").append(value.getExpression()).toString());
gen.writeString(
new StringBuilder()
.append(value.getPeriodType())
.append("|")
.append(value.getExpression())
.toString()
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -27,7 +27,6 @@
package org.alfresco.rest.rm.community.util;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildProperties;
/**
@@ -38,8 +37,8 @@ import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChi
* @author Tuna Aksoy
* @since 2.6
*/
public abstract class UnfiledContainerChildMixin
{
public abstract class UnfiledContainerChildMixin {
/**
* Annotation used to indicate that a property should be serialized "unwrapped"
* Its properties are instead included as properties of its containing Object

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -28,7 +28,6 @@ package org.alfresco.rest.v0;
import java.text.MessageFormat;
import java.util.List;
import org.alfresco.rest.core.v0.BaseAPI;
import org.apache.http.HttpResponse;
import org.json.JSONArray;
@@ -44,12 +43,15 @@ import org.springframework.stereotype.Component;
* @since 2.6
*/
@Component
public class CopyToAPI extends BaseAPI
{
public class CopyToAPI extends BaseAPI {
/** Logger for the class. */
private static final Logger LOGGER = LoggerFactory.getLogger(CopyToAPI.class);
private static final Logger LOGGER = LoggerFactory.getLogger(
CopyToAPI.class
);
/** The URI for the copy-to API. */
private static final String COPY_TO_API = "{0}doclib/action/copy-to/node/{1}";
private static final String COPY_TO_API =
"{0}doclib/action/copy-to/node/{1}";
/**
* Copy a list of nodes to the target container.
@@ -63,8 +65,12 @@ public class CopyToAPI extends BaseAPI
* @return The HTTP Response.
* @throws AssertionError If the API call didn't return a 200 response.
*/
public HttpResponse copyTo(String user, String password, String targetContainerPath, List<String> nodeRefs)
{
public HttpResponse copyTo(
String user,
String password,
String targetContainerPath,
List<String> nodeRefs
) {
return copyTo(user, password, 200, targetContainerPath, nodeRefs);
}
@@ -81,12 +87,22 @@ public class CopyToAPI extends BaseAPI
* @return The HTTP Response.
* @throws AssertionError If the API didn't return the expected status code.
*/
public HttpResponse copyTo(String user, String password, int expectedStatusCode, String targetContainerPath, List<String> nodeRefs)
{
public HttpResponse copyTo(
String user,
String password,
int expectedStatusCode,
String targetContainerPath,
List<String> nodeRefs
) {
JSONObject requestParams = new JSONObject();
requestParams.put("nodeRefs", new JSONArray(nodeRefs));
return doSlingshotPostJsonRequest(user, password, expectedStatusCode, requestParams,
MessageFormat.format(COPY_TO_API, "{0}", targetContainerPath));
return doSlingshotPostJsonRequest(
user,
password,
expectedStatusCode,
requestParams,
MessageFormat.format(COPY_TO_API, "{0}", targetContainerPath)
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -26,8 +26,9 @@
*/
package org.alfresco.rest.v0;
import java.text.MessageFormat;
import static org.testng.AssertJUnit.assertTrue;
import java.text.MessageFormat;
import org.alfresco.rest.core.v0.BaseAPI;
import org.alfresco.rest.rm.community.model.custom.CustomDefinitions;
import org.json.JSONArray;
@@ -36,9 +37,7 @@ import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import static org.testng.AssertJUnit.assertTrue;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
/**
* Methods to make API requests using v0 API on Records Management Custom Model Reference Definitions
*
@@ -46,24 +45,26 @@ import static org.testng.AssertJUnit.assertNotNull;
* @since 2.6
*/
@Component
public class CustomDefinitionsAPI extends BaseAPI
{
public class CustomDefinitionsAPI extends BaseAPI {
/**
* custom references endpoint
*/
private static final String CUSTOM_REFERENCE_API_ENDPOINT = "{0}rma/admin/customreferencedefinitions";
private static final String CUSTOM_REFERENCE_API_ENDPOINT =
"{0}rma/admin/customreferencedefinitions";
/**
* create reference endpoint
*/
private static final String CREATE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/customreferences";
private static final String GET_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/relationships";
private static final String DELETE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/targetnode/{2}/uniqueName/{3}";
private static final String CREATE_RELATIONSHIP_API_ENDPOINT =
"{0}node/{1}/customreferences";
/**
* logger
*/
private static final Logger LOGGER = LoggerFactory.getLogger(CustomDefinitionsAPI.class);
private static final Logger LOGGER = LoggerFactory.getLogger(
CustomDefinitionsAPI.class
);
/**
* Helper method to get the reference id for a custom reference
@@ -75,39 +76,43 @@ public class CustomDefinitionsAPI extends BaseAPI
* <code> null </code> otherwise
*
*/
public String getCustomReferenceId(String adminUser, String adminPassword, String customDefinition)
{
JSONObject getResponse = doGetRequest(adminUser, adminPassword, CUSTOM_REFERENCE_API_ENDPOINT);
if (getResponse != null)
{
try
{
JSONArray customDefinitions = getResponse.getJSONObject("data").getJSONArray("customReferences");
for (int i = 0; i < customDefinitions.length(); i++)
{
public String getCustomReferenceId(
String adminUser,
String adminPassword,
String customDefinition
) {
JSONObject getResponse = doGetRequest(
adminUser,
adminPassword,
CUSTOM_REFERENCE_API_ENDPOINT
);
if (getResponse != null) {
try {
JSONArray customDefinitions = getResponse
.getJSONObject("data")
.getJSONArray("customReferences");
for (int i = 0; i < customDefinitions.length(); i++) {
JSONObject item = customDefinitions.getJSONObject(i);
boolean hasSource = customDefinition.equalsIgnoreCase(
item.has("source") ? item.getString("source") : null
);
item.has("source") ? item.getString("source") : null
);
boolean hasTarget = customDefinition.equalsIgnoreCase(
item.has("target") ? item.getString("target") : null
);
item.has("target") ? item.getString("target") : null
);
boolean hasLabel = customDefinition.equalsIgnoreCase(
item.has("label") ? item.getString("label") : null
);
if ( hasSource || hasTarget || hasLabel)
{
item.has("label") ? item.getString("label") : null
);
if (hasSource || hasTarget || hasLabel) {
return item.getString("refId");
}
}
}
catch (JSONException error)
{
LOGGER.error("Unable to get the refId for the custom reference definition {}", customDefinition);
} catch (JSONException error) {
LOGGER.error(
"Unable to get the refId for the custom reference definition {}",
customDefinition
);
}
}
return null;
@@ -123,68 +128,49 @@ public class CustomDefinitionsAPI extends BaseAPI
* @param relationshipType relation type to be created
* @throws AssertionError if the creation fails.
*/
public void createRelationship(
String adminUser,
String adminPassword,
String recordNodeIdFrom,
String recordNodeIdTo,
CustomDefinitions relationshipType)
{
//create the request body
JSONObject requestParams = new JSONObject();
requestParams.put("toNode", NODE_REF_WORKSPACE_SPACES_STORE + recordNodeIdTo);
requestParams.put("refId", getCustomReferenceId(adminUser, adminPassword, relationshipType
.getDefinition()));
//send the API request to create the relationship
JSONObject setRelationshipStatus = doPostRequest(adminUser, adminPassword, requestParams,
MessageFormat.format(CREATE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom));
//check the response
boolean success = (setRelationshipStatus != null) && setRelationshipStatus.getBoolean("success");
assertTrue("Creating relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success);
}
public void createRelationship(
String adminUser,
String adminPassword,
int expectedStatus,
String recordNodeIdFrom,
String recordNodeIdTo,
CustomDefinitions relationshipType) {
CustomDefinitions relationshipType
) {
//create the request body
JSONObject requestParams = new JSONObject();
requestParams.put("toNode", NODE_REF_WORKSPACE_SPACES_STORE + recordNodeIdTo);
requestParams.put("refId", getCustomReferenceId(adminUser, adminPassword, relationshipType
.getDefinition()));
requestParams.put(
"toNode",
NODE_REF_WORKSPACE_SPACES_STORE + recordNodeIdTo
);
requestParams.put(
"refId",
getCustomReferenceId(
adminUser,
adminPassword,
relationshipType.getDefinition()
)
);
//send the API request to create the relationship
JSONObject setRelationshipStatus = doPostRequest(adminUser, adminPassword, requestParams,
MessageFormat.format(CREATE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom));
JSONObject setRelationshipStatus = doPostRequest(
adminUser,
adminPassword,
requestParams,
MessageFormat.format(
CREATE_RELATIONSHIP_API_ENDPOINT,
"{0}",
NODE_PREFIX + recordNodeIdFrom
)
);
//check the response
assertEquals("POST request for createRelationship was not successful.", expectedStatus, setRelationshipStatus.getJSONObject("status").get("code"));
}
public JSONObject getRelationshipDetails(
String adminUser,
String adminPassword,
String nodeRef) {
//send the API request to create the relationship
JSONObject relationshipDetails = doGetRequest(adminUser, adminPassword,
MessageFormat.format(GET_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + nodeRef));
//check the response
assertNotNull("The Relationship detail is not found for the Noderef " + nodeRef, relationshipDetails);
return relationshipDetails;
}
public void deleteRelationship(
String adminUser,
String adminPassword,
String recordNodeIdFrom,
String recordNodeIdTo,
String relationshipUniqueName) {
//send the API request to create the relationship
JSONObject setRelationshipStatus = doDeleteRequest(adminUser, adminPassword,
MessageFormat.format(DELETE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom,NODE_PREFIX + recordNodeIdTo,relationshipUniqueName));
//check the response
boolean success = (setRelationshipStatus != null) && setRelationshipStatus.getBoolean("success");
assertTrue("Deleting relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success);
boolean success =
(setRelationshipStatus != null) &&
setRelationshipStatus.getBoolean("success");
assertTrue(
"Creating relationship from " +
recordNodeIdFrom +
" to " +
recordNodeIdTo +
" failed.",
success
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -29,7 +29,6 @@ package org.alfresco.rest.v0;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.alfresco.rest.core.v0.BaseAPI;
import org.apache.http.HttpResponse;
import org.json.JSONArray;
@@ -44,8 +43,8 @@ import org.springframework.stereotype.Component;
*/
@Component
public class ExportAPI extends BaseAPI
{
public class ExportAPI extends BaseAPI {
/**
* The URI to export an item
*/
@@ -60,9 +59,18 @@ public class ExportAPI extends BaseAPI
* @param nodeID ID of the Node(Record/RecordFolder) to be exported
* @return HTTP Response
*/
public HttpResponse exportRMNode(String user, String password, int expectedStatusCode, String nodeID)
{
return export(user, password, expectedStatusCode, Collections.singletonList(getNodeRefSpacesStore() + nodeID));
public HttpResponse exportRMNode(
String user,
String password,
int expectedStatusCode,
String nodeID
) {
return export(
user,
password,
expectedStatusCode,
Collections.singletonList(getNodeRefSpacesStore() + nodeID)
);
}
/**
@@ -74,11 +82,16 @@ public class ExportAPI extends BaseAPI
* @param nodeIDList List of the nodes to be exported
* @return HTTP Response
*/
public HttpResponse exportRMNodes(String user, String password, int expectedStatusCode, List<String> nodeIDList)
{
List<String> nodeRefs =
nodeIDList.stream().map(nodeID -> getNodeRefSpacesStore() + nodeID).collect(Collectors.toList());
public HttpResponse exportRMNodes(
String user,
String password,
int expectedStatusCode,
List<String> nodeIDList
) {
List<String> nodeRefs = nodeIDList
.stream()
.map(nodeID -> getNodeRefSpacesStore() + nodeID)
.collect(Collectors.toList());
return export(user, password, expectedStatusCode, nodeRefs);
}
@@ -92,12 +105,22 @@ public class ExportAPI extends BaseAPI
* @param nodeRefs list of the noderefs for the items to be exported
* @return Rest API Post Request
*/
public HttpResponse export(String user, String password, int expectedStatusCode, List<String> nodeRefs)
{
public HttpResponse export(
String user,
String password,
int expectedStatusCode,
List<String> nodeRefs
) {
final JSONObject requestParams = new JSONObject();
requestParams.put("nodeRefs", new JSONArray(nodeRefs));
return doPostJsonRequest(user, password, expectedStatusCode, requestParams, EXPORT_API);
return doPostJsonRequest(
user,
password,
expectedStatusCode,
requestParams,
EXPORT_API
);
}
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited
* Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
@@ -33,7 +33,6 @@ import java.text.MessageFormat;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.alfresco.rest.core.v0.APIUtils;
import org.alfresco.rest.core.v0.BaseAPI;
import org.alfresco.rest.rm.community.model.hold.HoldEntry;
@@ -53,13 +52,14 @@ import org.springframework.stereotype.Component;
* @since 3.2
*/
@Component
public class HoldsAPI extends BaseAPI
{
public class HoldsAPI extends BaseAPI {
public static final String HOLDS_CONTAINER = "Holds";
/**
* The URI to create a hold
*/
private static final String CREATE_HOLDS_API = "{0}type/rma:hold/formprocessor";
private static final String CREATE_HOLDS_API =
"{0}type/rma:hold/formprocessor";
/**
* The URI to add items to hold or to remove items from hold
@@ -81,8 +81,13 @@ public class HoldsAPI extends BaseAPI
* @param description hold description
* @return The HTTP response.
*/
public HttpResponse createHold(String user, String password, String holdName, String reason, String description)
{
public HttpResponse createHold(
String user,
String password,
String holdName,
String reason,
String description
) {
return createHold(user, password, holdName, reason, description, SC_OK);
}
@@ -97,19 +102,37 @@ public class HoldsAPI extends BaseAPI
* @param expectedStatusCode The expected return status code.
* @return The HTTP response or throws AssertionError if the returned status code is not as expected.
*/
public HttpResponse createHold(String user, String password, String holdName, String reason, String description,
int expectedStatusCode)
{
public HttpResponse createHold(
String user,
String password,
String holdName,
String reason,
String description,
int expectedStatusCode
) {
// retrieve the Holds container nodeRef
final String parentNodeRef = getItemNodeRef(user, password, "/" + HOLDS_CONTAINER);
final String parentNodeRef = getItemNodeRef(
user,
password,
"/" + HOLDS_CONTAINER
);
final JSONObject requestParams = new JSONObject();
requestParams.put("alf_destination", getNodeRefSpacesStore() + parentNodeRef);
requestParams.put(
"alf_destination",
getNodeRefSpacesStore() + parentNodeRef
);
requestParams.put("prop_cm_name", holdName);
requestParams.put("prop_cm_description", description);
requestParams.put("prop_rma_holdReason", reason);
return doPostJsonRequest(user, password, expectedStatusCode, requestParams, CREATE_HOLDS_API);
return doPostJsonRequest(
user,
password,
expectedStatusCode,
requestParams,
CREATE_HOLDS_API
);
}
/**
@@ -122,22 +145,32 @@ public class HoldsAPI extends BaseAPI
* @param description hold description
* @return node ref of the hold created
*/
public String createHoldAndGetNodeRef(String user, String password,
String holdName, String reason, String description)
{
final HttpResponse httpResponse = createHold(user, password, holdName, reason, description);
public String createHoldAndGetNodeRef(
String user,
String password,
String holdName,
String reason,
String description
) {
final HttpResponse httpResponse = createHold(
user,
password,
holdName,
reason,
description
);
try
{
return convertHTTPResponseToJSON(httpResponse).getString("persistedObject")
.replace(NODE_REF_WORKSPACE_SPACES_STORE, "");
}
catch(JSONException error)
{
LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error);
}
catch(ParseException error)
{
try {
return convertHTTPResponseToJSON(httpResponse)
.getString("persistedObject")
.replace(NODE_REF_WORKSPACE_SPACES_STORE, "");
} catch (JSONException error) {
LOGGER.error(
"Converting message body to JSON failed. Body: {}",
httpResponse,
error
);
} catch (ParseException error) {
LOGGER.error("Parsing message body failed.", error);
}
@@ -151,9 +184,13 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRef the hold node ref
* @return The HTTP Response or throws AssertionError if the request is not successful.
*/
public HttpResponse deleteHold(UserModel user, String holdNodeRef)
{
return deleteHold(user.getUsername(), user.getPassword(), holdNodeRef, SC_OK);
public HttpResponse deleteHold(UserModel user, String holdNodeRef) {
return deleteHold(
user.getUsername(),
user.getPassword(),
holdNodeRef,
SC_OK
);
}
/**
@@ -164,13 +201,23 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRef the hold node ref
* @return The HTTP Response or throws AssertionError if the returned status code is not as expected.
*/
public HttpResponse deleteHold(String username, String password, String holdNodeRef, int expectedStatusCode)
{
public HttpResponse deleteHold(
String username,
String password,
String holdNodeRef,
int expectedStatusCode
) {
JSONObject requestParams = new JSONObject();
requestParams.put("name", "deleteHold");
requestParams.put("nodeRef", getNodeRefSpacesStore() + holdNodeRef);
return doPostJsonRequest(username, password, expectedStatusCode, requestParams, RM_ACTIONS_API);
return doPostJsonRequest(
username,
password,
expectedStatusCode,
requestParams,
RM_ACTIONS_API
);
}
/**
@@ -181,9 +228,12 @@ public class HoldsAPI extends BaseAPI
* @param holdName the hold name
* @throws AssertionError if the deletion was unsuccessful.
*/
public void deleteHold( String username, String password, String holdName)
{
deleteItem(username, password, String.format("/%s/%s", HOLDS_CONTAINER, holdName));
public void deleteHold(String username, String password, String holdName) {
deleteItem(
username,
password,
String.format("/%s/%s", HOLDS_CONTAINER, holdName)
);
}
/**
@@ -195,9 +245,18 @@ public class HoldsAPI extends BaseAPI
* @param holdName the hold name
* @return The HTTP response
*/
public HttpResponse addItemToHold(String user, String password, String itemNodeRef, String holdName)
{
return addItemsToHolds(user, password, Collections.singletonList(itemNodeRef), Collections.singletonList(holdName));
public HttpResponse addItemToHold(
String user,
String password,
String itemNodeRef,
String holdName
) {
return addItemsToHolds(
user,
password,
Collections.singletonList(itemNodeRef),
Collections.singletonList(holdName)
);
}
/**
@@ -209,12 +268,29 @@ public class HoldsAPI extends BaseAPI
* @param holdNames the list of holds
* @return The HTTP response
*/
public HttpResponse addItemsToHolds(String user, String password, List<String> itemNodeRefs, List<String> holdNames)
{
final List<String> holdNodeRefs = holdNames.stream()
.map(hold -> getItemNodeRef(user, password, String.format("/%s/%s", HOLDS_CONTAINER, hold)))
.collect(Collectors.toList());
return addItemsToHolds(user, password, SC_OK, itemNodeRefs, holdNodeRefs);
public HttpResponse addItemsToHolds(
String user,
String password,
List<String> itemNodeRefs,
List<String> holdNames
) {
final List<String> holdNodeRefs = holdNames
.stream()
.map(hold ->
getItemNodeRef(
user,
password,
String.format("/%s/%s", HOLDS_CONTAINER, hold)
)
)
.collect(Collectors.toList());
return addItemsToHolds(
user,
password,
SC_OK,
itemNodeRefs,
holdNodeRefs
);
}
/**
@@ -226,11 +302,24 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRefs the list of holds
* @return The HTTP response
*/
public HttpResponse addItemsToHolds(String user, String password, int expectedStatus, List<String> itemNodeRefs,
List<String> holdNodeRefs)
{
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(itemNodeRefs, holdNodeRefs);
return doPostJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API);
public HttpResponse addItemsToHolds(
String user,
String password,
int expectedStatus,
List<String> itemNodeRefs,
List<String> holdNodeRefs
) {
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(
itemNodeRefs,
holdNodeRefs
);
return doPostJsonRequest(
user,
password,
expectedStatus,
requestParams,
RM_HOLDS_API
);
}
/**
@@ -242,11 +331,20 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRef the hold node ref
* @return The error message
*/
public String addToHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String
holdNodeRef)
{
final HttpResponse httpResponse = addItemsToHolds(user, password, expectedStatus, Collections.singletonList(itemNodeRef),
Collections.singletonList(holdNodeRef));
public String addToHoldAndGetMessage(
String user,
String password,
int expectedStatus,
String itemNodeRef,
String holdNodeRef
) {
final HttpResponse httpResponse = addItemsToHolds(
user,
password,
expectedStatus,
Collections.singletonList(itemNodeRef),
Collections.singletonList(holdNodeRef)
);
return APIUtils.extractErrorMessageFromHttpResponse(httpResponse);
}
@@ -257,12 +355,18 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRefs list of hold node refs for add/remove items
* @return JSONObject fo
*/
private JSONObject addOrRemoveToFromHoldJsonObject(List<String> items, List<String> holdNodeRefs)
{
private JSONObject addOrRemoveToFromHoldJsonObject(
List<String> items,
List<String> holdNodeRefs
) {
final JSONArray nodeRefs = new JSONArray();
items.forEach(itemNodeRef -> nodeRefs.put(getNodeRefSpacesStore() + itemNodeRef));
items.forEach(itemNodeRef ->
nodeRefs.put(getNodeRefSpacesStore() + itemNodeRef)
);
final JSONArray holds = new JSONArray();
holdNodeRefs.forEach(holdNodeRef -> holds.put(getNodeRefSpacesStore() + holdNodeRef));
holdNodeRefs.forEach(holdNodeRef ->
holds.put(getNodeRefSpacesStore() + holdNodeRef)
);
final JSONObject requestParams = new JSONObject();
requestParams.put("nodeRefs", nodeRefs);
requestParams.put("holds", holds);
@@ -278,9 +382,18 @@ public class HoldsAPI extends BaseAPI
* @param holdName the hold name
* @return The HTTP response
*/
public HttpResponse removeItemFromHold(String user, String password, String itemNodeRef, String holdName)
{
return removeItemsFromHolds(user, password, Collections.singletonList(itemNodeRef), Collections.singletonList(holdName));
public HttpResponse removeItemFromHold(
String user,
String password,
String itemNodeRef,
String holdName
) {
return removeItemsFromHolds(
user,
password,
Collections.singletonList(itemNodeRef),
Collections.singletonList(holdName)
);
}
/**
@@ -292,12 +405,29 @@ public class HoldsAPI extends BaseAPI
* @param holdNames the list of hold names
* @return The HTTP response
*/
public HttpResponse removeItemsFromHolds(String user, String password, List<String> itemNodeRefs, List<String> holdNames)
{
final List<String> holdNodeRefs = holdNames.stream()
.map(hold -> getItemNodeRef(user, password, String.format("/%s/%s", HOLDS_CONTAINER, hold)))
.collect(Collectors.toList());
return removeItemsFromHolds(user, password, SC_OK, itemNodeRefs, holdNodeRefs);
public HttpResponse removeItemsFromHolds(
String user,
String password,
List<String> itemNodeRefs,
List<String> holdNames
) {
final List<String> holdNodeRefs = holdNames
.stream()
.map(hold ->
getItemNodeRef(
user,
password,
String.format("/%s/%s", HOLDS_CONTAINER, hold)
)
)
.collect(Collectors.toList());
return removeItemsFromHolds(
user,
password,
SC_OK,
itemNodeRefs,
holdNodeRefs
);
}
/**
@@ -310,11 +440,24 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRefs the list of hold node refs
* @return The HTTP response
*/
public HttpResponse removeItemsFromHolds(String user, String password, int expectedStatus, List<String> itemNodeRefs,
List<String> holdNodeRefs)
{
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(itemNodeRefs, holdNodeRefs);
return doPutJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API);
public HttpResponse removeItemsFromHolds(
String user,
String password,
int expectedStatus,
List<String> itemNodeRefs,
List<String> holdNodeRefs
) {
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(
itemNodeRefs,
holdNodeRefs
);
return doPutJsonRequest(
user,
password,
expectedStatus,
requestParams,
RM_HOLDS_API
);
}
/**
@@ -326,11 +469,20 @@ public class HoldsAPI extends BaseAPI
* @param holdNodeRef the hold node ref
* @return The error message
*/
public String removeFromHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String
holdNodeRef)
{
final HttpResponse httpResponse = removeItemsFromHolds(user, password, expectedStatus, Collections.singletonList(itemNodeRef),
Collections.singletonList(holdNodeRef));
public String removeFromHoldAndGetMessage(
String user,
String password,
int expectedStatus,
String itemNodeRef,
String holdNodeRef
) {
final HttpResponse httpResponse = removeItemsFromHolds(
user,
password,
expectedStatus,
Collections.singletonList(itemNodeRef),
Collections.singletonList(holdNodeRef)
);
return APIUtils.extractErrorMessageFromHttpResponse(httpResponse);
}
@@ -345,15 +497,35 @@ public class HoldsAPI extends BaseAPI
* @param fileOnly True if only files should be return
* @return return a list of hold entries
*/
public List<HoldEntry> getHolds(String user, String password, final String itemNodeRef,
final Boolean includedInHold, final Boolean fileOnly)
{
final String parameters = (itemNodeRef != null ? "itemNodeRef=" + NODE_REF_WORKSPACE_SPACES_STORE + itemNodeRef : "")
+ (includedInHold != null ? "&includedInHold=" + includedInHold : "")
+ (fileOnly != null ? "&fileOnly=" + fileOnly : "");
public List<HoldEntry> getHolds(
String user,
String password,
final String itemNodeRef,
final Boolean includedInHold,
final Boolean fileOnly
) {
final String parameters =
(
itemNodeRef != null
? "itemNodeRef=" +
NODE_REF_WORKSPACE_SPACES_STORE +
itemNodeRef
: ""
) +
(
includedInHold != null
? "&includedInHold=" + includedInHold
: ""
) +
(fileOnly != null ? "&fileOnly=" + fileOnly : "");
final JSONArray holdEntries = doGetRequest(user, password,
MessageFormat.format(GET_RM_HOLDS, "{0}", parameters)).getJSONObject("data").getJSONArray("holds");
final JSONArray holdEntries = doGetRequest(
user,
password,
MessageFormat.format(GET_RM_HOLDS, "{0}", parameters)
)
.getJSONObject("data")
.getJSONArray("holds");
return PojoUtility.jsonToObject(holdEntries, HoldEntry.class);
}

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